# HG changeset patch # User Karl Fogel # Date 1279123373 14400 # Node ID 8b1192833a1ecd9c542460d66b0042dbb77d5688 # Parent fa4400531412cbe8860f3e760939fef5da250c5a 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. diff -r fa4400531412 -r 8b1192833a1e lisp/gnus/ChangeLog --- 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 + + 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 * gnus/gnus-sum.el (bookmark-make-record-default): Adjust diff -r fa4400531412 -r 8b1192833a1e lisp/gnus/gnus-art.el --- 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) diff -r fa4400531412 -r 8b1192833a1e lisp/gnus/gnus-sum.el --- 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))