help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to have a frame dedicated to buffers of a certain kind? (was: us


From: Tassilo Horn
Subject: Re: How to have a frame dedicated to buffers of a certain kind? (was: use pdf-tools in Emacs.)
Date: Sat, 29 Apr 2023 21:37:43 +0200
User-agent: mu4e 1.11.3; emacs 30.0.50

Hongyi Zhao <hongyi.zhao@gmail.com> writes:

> And this time the 3rd circle numbered window will be used to display
> the LaTeX code and PDF alternately when I do the forward and backward
> searching. This is not the result we hope to see.

Here's a slightly improved version:

(defun th/display-buffer-in-my-pdf-frame (buffer alist)
  (if-let ((frame (car (seq-filter
                        (lambda (f) (frame-parameter f 'th/pdf-frame))
                        (frame-list)))))
      (display-buffer-use-some-frame
       buffer `((frame-predicate . ,(lambda (f)
                                      (frame-parameter f 'th/pdf-frame)))))
    (display-buffer-pop-up-frame
     buffer (cons
             '(pop-up-frame-parameters (th/pdf-frame . t))
             alist))))

;; PDFs in a dedicated pdf frame.
(add-to-list 'display-buffer-alist
             `((derived-mode . pdf-view-mode)
               th/display-buffer-in-my-pdf-frame))

The problem remains that when double-clicking in the pdf-view-mode
buffer to jump to the corresponding position in the tex file, the tex
file buffer appears in a new window of the pdf frame.  The issue is that
pdf-tools uses pop-to-buffer here:

(defun pdf-sync-backward-search (x y)
  "Go to the source corresponding to image coordinates X, Y.

Try to find the exact position, if
`pdf-sync-backward-use-heuristic' is non-nil."
  (cl-destructuring-bind (source finder)
      (pdf-sync-backward-correlate x y)
    (pop-to-buffer (or (find-buffer-visiting source)
                       (find-file-noselect source))
                   pdf-sync-backward-display-action)
    (push-mark)
    (funcall finder)
    (run-hooks 'pdf-sync-backward-hook)))

But there you go!  You can define a pdf-sync-backward-display-action to
make it work.

(setq pdf-sync-backward-display-action
      '(display-buffer-reuse-window (reusable-frames . t)))

You can read up how that all works in (info "(elisp) Displaying
Buffers").

Bye,
Tassilo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]