diff options
| author | Basil L. Contovounesios | 2019-05-04 16:29:39 +0100 |
|---|---|---|
| committer | Basil L. Contovounesios | 2019-05-12 12:47:56 +0100 |
| commit | 571d802df38cb1d3f93222f2977b766995616ac7 (patch) | |
| tree | d32380deb818d4d7b6d90457d1a31977de60dbe3 | |
| parent | bb60144d00fce90d7db1fdb5b67d6aa266e5010a (diff) | |
| download | emacs-571d802df38cb1d3f93222f2977b766995616ac7.tar.gz emacs-571d802df38cb1d3f93222f2977b766995616ac7.zip | |
Fix Gnus summary widget navigation across frames
* lisp/gnus/gnus-sum.el (gnus-summary-widget-forward)
(gnus-summary-widget-backward): Signal more informative error if
article window is not found. Consider other frames displaying
article buffer, and raise its frame before navigating its
widgets. (bug#35565)
* lisp/gnus/gnus-win.el (gnus-get-buffer-window): Simplify and add
docstring.
| -rw-r--r-- | lisp/gnus/gnus-sum.el | 18 | ||||
| -rw-r--r-- | lisp/gnus/gnus-win.el | 19 |
2 files changed, 22 insertions, 15 deletions
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index b8aa302f11a..ac222acfd2d 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el | |||
| @@ -9423,8 +9423,11 @@ With optional ARG, move across that many fields." | |||
| 9423 | (interactive "p") | 9423 | (interactive "p") |
| 9424 | (gnus-summary-select-article) | 9424 | (gnus-summary-select-article) |
| 9425 | (gnus-configure-windows 'article) | 9425 | (gnus-configure-windows 'article) |
| 9426 | (select-window (gnus-get-buffer-window gnus-article-buffer)) | 9426 | (let ((win (or (gnus-get-buffer-window gnus-article-buffer t) |
| 9427 | (widget-forward arg)) | 9427 | (error "No article window found")))) |
| 9428 | (select-window win) | ||
| 9429 | (select-frame-set-input-focus (window-frame win)) | ||
| 9430 | (widget-forward arg))) | ||
| 9428 | 9431 | ||
| 9429 | (defun gnus-summary-widget-backward (arg) | 9432 | (defun gnus-summary-widget-backward (arg) |
| 9430 | "Move point to the previous field or button in the article. | 9433 | "Move point to the previous field or button in the article. |
| @@ -9432,10 +9435,13 @@ With optional ARG, move across that many fields." | |||
| 9432 | (interactive "p") | 9435 | (interactive "p") |
| 9433 | (gnus-summary-select-article) | 9436 | (gnus-summary-select-article) |
| 9434 | (gnus-configure-windows 'article) | 9437 | (gnus-configure-windows 'article) |
| 9435 | (select-window (gnus-get-buffer-window gnus-article-buffer)) | 9438 | (let ((win (or (gnus-get-buffer-window gnus-article-buffer t) |
| 9436 | (unless (widget-at (point)) | 9439 | (error "No article window found")))) |
| 9437 | (goto-char (point-max))) | 9440 | (select-window win) |
| 9438 | (widget-backward arg)) | 9441 | (select-frame-set-input-focus (window-frame win)) |
| 9442 | (unless (widget-at (point)) | ||
| 9443 | (goto-char (point-max))) | ||
| 9444 | (widget-backward arg))) | ||
| 9439 | 9445 | ||
| 9440 | (defun gnus-summary-isearch-article (&optional regexp-p) | 9446 | (defun gnus-summary-isearch-article (&optional regexp-p) |
| 9441 | "Do incremental search forward on the current article. | 9447 | "Do incremental search forward on the current article. |
diff --git a/lisp/gnus/gnus-win.el b/lisp/gnus/gnus-win.el index 5f7154c5456..a992fe731cb 100644 --- a/lisp/gnus/gnus-win.el +++ b/lisp/gnus/gnus-win.el | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | 28 | ||
| 29 | (require 'gnus) | 29 | (require 'gnus) |
| 30 | (require 'gnus-util) | 30 | (require 'gnus-util) |
| 31 | (require 'seq) | ||
| 31 | 32 | ||
| 32 | (defgroup gnus-windows nil | 33 | (defgroup gnus-windows nil |
| 33 | "Window configuration." | 34 | "Window configuration." |
| @@ -509,15 +510,15 @@ should have point." | |||
| 509 | (delq lowest-buf bufs))))) | 510 | (delq lowest-buf bufs))))) |
| 510 | 511 | ||
| 511 | (defun gnus-get-buffer-window (buffer &optional frame) | 512 | (defun gnus-get-buffer-window (buffer &optional frame) |
| 512 | (cond ((and (null gnus-use-frames-on-any-display) | 513 | "Return a window currently displaying BUFFER, or nil if none. |
| 513 | (memq frame '(t 0 visible))) | 514 | Like `get-buffer-window', but respecting |
| 514 | (car | 515 | `gnus-use-frames-on-any-display'." |
| 515 | (let ((frames (frames-on-display-list))) | 516 | (if (and (not gnus-use-frames-on-any-display) |
| 516 | (seq-remove (lambda (win) (not (memq (window-frame win) | 517 | (memq frame '(t 0 visible))) |
| 517 | frames))) | 518 | (let ((frames (frames-on-display-list))) |
| 518 | (get-buffer-window-list buffer nil frame))))) | 519 | (seq-find (lambda (win) (memq (window-frame win) frames)) |
| 519 | (t | 520 | (get-buffer-window-list buffer nil frame))) |
| 520 | (get-buffer-window buffer frame)))) | 521 | (get-buffer-window buffer frame))) |
| 521 | 522 | ||
| 522 | (provide 'gnus-win) | 523 | (provide 'gnus-win) |
| 523 | 524 | ||