5

I run auctex with the latex source on the left half buffer and corresponding pdf on the right half (using C-x 3 to split the buffer). I then split the left half buffer into 2 so as two work on different parts of the latex source file. Similarly I split the right hand buffer into two so as to view the two corresponding pdf parts. Is there some way of doing forward/reverse search between the top left latex source and top right pdf; and a forward/reverse search between the bottom left latex source and bottom right pdf? This would help a lot when working on a large latex document. Right now, the top left and bottom left latex source do forward/backward search with the top right pdf; the bottom right pdf seems to be ignored.

1 Answer 1

3

The solution at the bottom of this answer does not work anymore after https://github.com/emacs-mirror/emacs/commit/f646675cd1637948b2df2351a9666792ea8251ea

The extra argument DEDICATE of window--display-buffer has been removed by that commit.

Since window--display-buffer does consider display-buffer-mark-dedicated anyway maybe Emacs does like the OP wanted out-of-the-box.

Otherwise you can use the following modified code:

(defun display-buffer-beside-selected (buffer alist) "Try displaying BUFFER in a window beside the selected window. If there is a window below the selected one and that window already displays BUFFER, use that window. If that attempt fails and there is a non-dedicated window beside the selected one, use that window. The left or right hand side is chosen if ALIST contains the cons (side . left) or (side . right), respectively." (let (window) (or (and (setq window (window-in-direction (cdr (assq 'side alist)))) (eq buffer (window-buffer window)) (window--display-buffer buffer window 'reuse alist)) (and (setq window (window-in-direction (cdr (assq 'side alist)))) (not (window-dedicated-p window)) (window--display-buffer buffer window 'reuse alist))))) (defun my-display-buffer-right (fun &rest args) "Use `display-buffer-in-side-window' as `display-buffer-overriding-action'. Then run FUN with ARGS." (let ((display-buffer-overriding-action '(display-buffer-beside-selected (side . right)))) (apply fun args))) (defun my-display-buffer-left (fun &rest args) "Use `display-buffer-in-side-window' as `display-buffer-overriding-action'. Then run FUN with ARGS." (let ((display-buffer-overriding-action '(display-buffer-beside-selected (side . left)))) (apply fun args))) (advice-add 'TeX-pdf-tools-sync-view :around #'my-display-buffer-right) (advice-add 'pdf-sync-backward-search-mouse :around #'my-display-buffer-left) 

You can set the preferred window via the ACTION for display-buffer, which see. That also works for commands that use display-buffer.

From all the possibilities for setting the ACTION the variable display-buffer-overriding-action has the highest priority.

The following code shows how to define the action you want and how to set display-buffer-overriding-action for the commands you need.

(defun display-buffer-beside-selected (buffer alist) "Try displaying BUFFER in a window beside the selected window. If there is a window below the selected one and that window already displays BUFFER, use that window. If that attempt fails and there is a non-dedicated window beside the selected one, use that window. The left or right hand side is chosen if ALIST contains the cons (side . left) or (side . right), respectively." (let (window) (or (and (setq window (window-in-direction (cdr (assq 'side alist)))) (eq buffer (window-buffer window)) (window--display-buffer buffer window 'reuse alist)) (and (setq window (window-in-direction (cdr (assq 'side alist)))) (not (window-dedicated-p window)) (window--display-buffer buffer window 'reuse alist display-buffer-mark-dedicated))))) (defun my-display-buffer-right (fun &rest args) "Use `display-buffer-in-side-window' as `display-buffer-overriding-action'. Then run FUN with ARGS." (let ((display-buffer-overriding-action '(display-buffer-beside-selected (side . right)))) (apply fun args))) (defun my-display-buffer-left (fun &rest args) "Use `display-buffer-in-side-window' as `display-buffer-overriding-action'. Then run FUN with ARGS." (let ((display-buffer-overriding-action '(display-buffer-beside-selected (side . left)))) (apply fun args))) (advice-add 'TeX-pdf-tools-sync-view :around #'my-display-buffer-right) (advice-add 'pdf-sync-backward-search-mouse :around #'my-display-buffer-left) 
1
  • Thank you sir! That works perfectly! I have a related new question which I will post. Commented Feb 4, 2020 at 2:04

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.