On Sun, Apr 30, 2023 at 4:08 AM Tassilo Horn wrote: > > Hongyi Zhao 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))) Thank you for your wonderful tricks/tips/codes once more. This time, it can work perfectly according to the intention discussed here using the following configuration: (use-package pdf-tools :ensure t :init (pdf-tools-install) (setq pdf-sync-backward-display-action '(display-buffer-reuse-window (reusable-frames . t))) (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)) ) > You can read up how that all works in (info "(elisp) Displaying > Buffers"). Thank you for hints. But the Elisp code you mentioned requires a significant level of proficiency in Elisp programming. Even if I understand the underlying mechanics of the problem being discussed, it may still be challenging to write the corresponding code implementation without a strong foundation in Elisp. > Bye, > Tassilo Best, Zhao