Mercurial > emacs
changeset 109396:8b1192833a1e
Allow bookmarks to be set from Gnus Article buffers (Bug #5975).
Patch applied (with minor tweaks) by Karl Fogel. Note this leaves
C-w still not working correctly from Article buffers; Thierry's
patch to fix that will be applied after this.
* lisp/gnus/gnus-art.el (bookmark-make-record-function): New local variable.
* lisp/gnus/gnus-sum.el (gnus-summary-bookmark-make-record): Allow setting
from article buffer.
(gnus-summary-bookmark-jump): Maybe jump to article buffer.
author | Karl Fogel <kfogel@red-bean.com> |
---|---|
date | Wed, 14 Jul 2010 12:02:53 -0400 |
parents | fa4400531412 |
children | 4e6b8160da4b |
files | lisp/gnus/ChangeLog lisp/gnus/gnus-art.el lisp/gnus/gnus-sum.el |
diffstat | 3 files changed, 42 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/gnus/ChangeLog Wed Jul 14 11:57:54 2010 -0400 +++ b/lisp/gnus/ChangeLog Wed Jul 14 12:02:53 2010 -0400 @@ -1,3 +1,16 @@ +2010-07-13 Thierry Volpiatto <thierry.volpiatto@gmail.com> + + Allow bookmarks to be set from Gnus Article buffers (Bug #5975). + Patch applied (with minor tweaks) by Karl Fogel. Note this leaves + C-w still not working correctly from Article buffers; Thierry's + patch to fix that will be applied after this. + + * gnus-art.el (bookmark-make-record-function): New local variable. + + * gnus-sum.el (gnus-summary-bookmark-make-record): Allow setting + from article buffer. + (gnus-summary-bookmark-jump): Maybe jump to article buffer. + 2010-07-13 Karl Fogel <kfogel@red-bean.com> * gnus/gnus-sum.el (bookmark-make-record-default): Adjust
--- a/lisp/gnus/gnus-art.el Wed Jul 14 11:57:54 2010 -0400 +++ b/lisp/gnus/gnus-art.el Wed Jul 14 12:02:53 2010 -0400 @@ -4452,6 +4452,8 @@ (make-local-variable 'gnus-article-image-alist) (make-local-variable 'gnus-article-charset) (make-local-variable 'gnus-article-ignored-charsets) + (set (make-local-variable 'bookmark-make-record-function) + 'gnus-summary-bookmark-make-record) ;; Prevent Emacs 22 from displaying non-break space with `nobreak-space' ;; face. (set (make-local-variable 'nobreak-char-display) nil)
--- a/lisp/gnus/gnus-sum.el Wed Jul 14 11:57:54 2010 -0400 +++ b/lisp/gnus/gnus-sum.el Wed Jul 14 12:02:53 2010 -0400 @@ -12629,18 +12629,24 @@ (defun gnus-summary-bookmark-make-record () "Make a bookmark entry for a Gnus summary buffer." - (unless (and (derived-mode-p 'gnus-summary-mode) gnus-article-current) - (error "Please retry from the Gnus summary buffer")) ;[1] - (let* ((subject (elt (gnus-summary-article-header) 1)) - (grp (car gnus-article-current)) - (art (cdr gnus-article-current)) - (head (gnus-summary-article-header art)) - (id (mail-header-id head))) - `(,subject - ,@(bookmark-make-record-default 'point-only) - (location . ,(format "Gnus %s:%d:%s" grp art id)) - (group . ,grp) (article . ,art) - (message-id . ,id) (handler . gnus-summary-bookmark-jump)))) + (let (pos buf) + (unless (and (derived-mode-p 'gnus-summary-mode) gnus-article-current) + (save-restriction ; FIXME is it necessary to widen? + (widen) (setq pos (point))) ; Set position in gnus-article buffer. + (setq buf "art") ; We are recording bookmark from article buffer. + (gnus-article-show-summary)) ; Go back in summary buffer. + ;; We are now recording bookmark from summary buffer. + (unless buf (setq buf "sum")) + (let* ((subject (elt (gnus-summary-article-header) 1)) + (grp (car gnus-article-current)) + (art (cdr gnus-article-current)) + (head (gnus-summary-article-header art)) + (id (mail-header-id head))) + `(,subject + ,@(bookmark-make-record-default 'no-file 'no-context pos) + (location . ,(format "Gnus-%s %s:%d:%s" buf grp art id)) + (group . ,grp) (article . ,art) + (message-id . ,id) (handler . gnus-summary-bookmark-jump))))) ;;;###autoload (defun gnus-summary-bookmark-jump (bookmark) @@ -12648,10 +12654,18 @@ BOOKMARK is a bookmark name or a bookmark record." (let ((group (bookmark-prop-get bookmark 'group)) (article (bookmark-prop-get bookmark 'article)) - (id (bookmark-prop-get bookmark 'message-id))) + (id (bookmark-prop-get bookmark 'message-id)) + (buf (car (split-string (bookmark-prop-get bookmark 'location))))) (gnus-fetch-group group (list article)) (gnus-summary-insert-cached-articles) (gnus-summary-goto-article id nil 'force) + ;; FIXME we have to wait article buffer is ready (only large buffer) + ;; Is there a better solution to know that? + ;; If we don't wait `bookmark-default-handler' will have no chance + ;; to set position. However there is no error, just wrong pos. + (sit-for 1) + (when (string= buf "Gnus-art") + (other-window 1)) (bookmark-default-handler `("" (buffer . ,(current-buffer))