1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-11 09:20:51 +00:00

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.
This commit is contained in:
Karl Fogel 2010-07-14 12:02:53 -04:00
parent e44fa724e4
commit 33b4848367
3 changed files with 42 additions and 13 deletions

View File

@ -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

View File

@ -4452,6 +4452,8 @@ commands:
(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)

View File

@ -12629,18 +12629,24 @@ If ALL is a number, fetch this number of articles."
(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 @@ If ALL is a number, fetch this number of articles."
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))