Index: lisp/gnus.el =================================================================== RCS file: /usr/local/cvsroot/gnus/lisp/gnus.el,v retrieving revision 7.66 diff -u -r7.66 gnus.el --- lisp/gnus.el 4 Jun 2007 11:58:52 -0000 7.66 +++ lisp/gnus.el 5 Jul 2007 08:23:13 -0000 @@ -909,6 +909,18 @@ (setcdr buffers (cddr buffers))))) gnus-buffers) +(defun gnus-kill-all-sticky-article-buffers (confirm) + "Kills all sticky article buffers. If a prefix arg is given, +it'll ask for confirmation." + (interactive "P") + (dolist (buf (gnus-buffers)) + (with-current-buffer buf + (when (eq major-mode 'gnus-sticky-article-mode) + (if (not confirm) + (gnus-kill-buffer buf) + (when (yes-or-no-p (concat "Kill buffer " (buffer-name buf))) + (gnus-kill-buffer buf))))))) + ;;; Splash screen. (defvar gnus-group-buffer "*Group*") @@ -4358,6 +4370,12 @@ (gnus-ems-redefine) (provide 'gnus) + +;; Local Variables: +;; coding: iso-8859-1 +;; indent-tabs-mode: t +;; tab-width: 8 +;; End: ;;; arch-tag: acebeeab-f331-4f8f-a7ea-89c58c84f636 ;;; gnus.el ends here Index: lisp/gnus-sum.el =================================================================== RCS file: /usr/local/cvsroot/gnus/lisp/gnus-sum.el,v retrieving revision 7.189 diff -u -r7.189 gnus-sum.el --- lisp/gnus-sum.el 4 Jul 2007 09:21:13 -0000 7.189 +++ lisp/gnus-sum.el 5 Jul 2007 08:23:35 -0000 @@ -1768,6 +1768,7 @@ "j" gnus-summary-goto-article "^" gnus-summary-refer-parent-article "\M-^" gnus-summary-refer-article + "\C-cs" gnus-summary-make-sticky-article "u" gnus-summary-tick-article-forward "!" gnus-summary-tick-article-forward "U" gnus-summary-tick-article-backward @@ -2444,6 +2445,7 @@ ["Remove article" gnus-cache-remove-article t]) ["Translate" gnus-article-babel t] ["Select article buffer" gnus-summary-select-article-buffer t] + ["Make article buffer sticky" gnus-summary-make-sticky-article t] ["Enter digest buffer" gnus-summary-enter-digest-group t] ["Isearch article..." gnus-summary-isearch-article t] ["Beginning of the article" gnus-summary-beginning-of-article t] @@ -6937,9 +6939,13 @@ (gnus-run-hooks 'gnus-summary-prepare-exit-hook) ;; If we have several article buffers, we kill them at exit. (unless gnus-single-article-buffer - (gnus-kill-buffer gnus-article-buffer) - (gnus-kill-buffer gnus-original-article-buffer) - (setq gnus-article-current nil)) + (when (gnus-buffer-live-p gnus-article-buffer) + (with-current-buffer gnus-article-buffer + ;; Don't kill sticky article buffers + (unless (eq major-mode 'gnus-sticky-article-mode) + (gnus-kill-buffer gnus-article-buffer) + (setq gnus-article-current nil)))) + (gnus-kill-buffer gnus-original-article-buffer)) (when gnus-use-cache (gnus-cache-possibly-remove-articles) (gnus-cache-save-buffers)) @@ -6971,11 +6977,6 @@ (setq group-point (point)) (if temporary nil ;Nothing to do. - ;; If we have several article buffers, we kill them at exit. - (unless gnus-single-article-buffer - (gnus-kill-buffer gnus-article-buffer) - (gnus-kill-buffer gnus-original-article-buffer) - (setq gnus-article-current nil)) (set-buffer buf) (if (not gnus-kill-summary-on-exit) (progn @@ -7908,6 +7909,48 @@ (error "Article history empty"))) (gnus-summary-position-point)) +(defun gnus-summary-make-sticky-article (arg) + "Make the current article sticky. If a prefix arg is given you +will be asked for a name for this sticky buffer." + (interactive "P") + (gnus-configure-windows 'article) + (gnus-summary-show-thread) + (gnus-summary-select-article nil nil 'pseudo) + (let (new-art-buf-name) + (gnus-eval-in-buffer-window gnus-article-buffer + (setq new-art-buf-name + (rename-buffer + (concat + "*Sticky Article: " + (if arg + (read-from-minibuffer "Sticky article buffer name: ") + (gnus-with-article-headers + (gnus-article-goto-header "subject") + (setq new-art-buf-name + (buffer-substring-no-properties + (line-beginning-position) (line-end-position))) + (goto-char (point-min)) + (gnus-article-goto-header "from") + (setq new-art-buf-name + (concat + new-art-buf-name ", " + (buffer-substring-no-properties + (line-beginning-position) (line-end-position)))) + (goto-char (point-min)) + (gnus-article-goto-header "date") + (setq new-art-buf-name + (concat + new-art-buf-name ", " + (buffer-substring-no-properties + (line-beginning-position) (line-end-position)))))) + "*") + t))) + (setq gnus-article-buffer new-art-buf-name)) + (gnus-summary-recenter) + (gnus-summary-position-point) + (set-buffer gnus-article-buffer) + (gnus-sticky-article-mode)) + ;; Summary commands and functions for limiting the summary buffer. (defun gnus-summary-limit-to-articles (n) @@ -12405,6 +12448,8 @@ ;; Local Variables: ;; coding: iso-8859-1 +;; indent-tabs-mode: t +;; tab-width: 8 ;; End: ;; arch-tag: 17c6748f-6d00-4d36-bf01-835c42f31235 Index: lisp/gnus-art.el =================================================================== RCS file: /usr/local/cvsroot/gnus/lisp/gnus-art.el,v retrieving revision 7.219 diff -u -r7.219 gnus-art.el --- lisp/gnus-art.el 26 Jun 2007 07:31:41 -0000 7.219 +++ lisp/gnus-art.el 5 Jul 2007 08:23:48 -0000 @@ -4365,6 +4365,35 @@ (gnus-run-hooks 'gnus-article-prepare-hook))) ;;; +;;; Gnus Sticky Article Mode +;;; + +(define-derived-mode gnus-sticky-article-mode gnus-article-mode "StickyArticle" + "Mode for sticky articles." + ;; Release bindings that won't work. + (substitute-key-definition 'gnus-article-read-summary-keys 'undefined + gnus-sticky-article-mode-map) + (substitute-key-definition 'gnus-article-refer-article 'undefined + gnus-sticky-article-mode-map) + (dolist (k '("e" "h" "s" "F" "R")) + (define-key gnus-sticky-article-mode-map k nil)) + (define-key gnus-sticky-article-mode-map "q" 'gnus-sticky-article-kill-buffer) + (define-key gnus-sticky-article-mode-map "\C-hc" 'describe-key-briefly) + (define-key gnus-sticky-article-mode-map "\C-hk" 'describe-key)) + + +(defun gnus-sticky-article-kill-buffer (&optional buffer) + "Kills the given sticky article buffer. If none is given, it'll +assume the current buffer and kill it if it has +`gnus-sticky-article-mode'." + (interactive) + (unless buffer + (setq buffer (current-buffer))) + (with-current-buffer buffer + (when (eq major-mode 'gnus-sticky-article-mode) + (gnus-kill-buffer buffer)))) + +;;; ;;; Gnus MIME viewing functions ;;; @@ -8081,6 +8110,12 @@ (provide 'gnus-art) (run-hooks 'gnus-art-load-hook) + +;; Local Variables: +;; coding: iso-8859-1 +;; indent-tabs-mode: t +;; tab-width: 8 +;; End: ;;; arch-tag: 2654516f-6279-48f9-a83b-05c1fa450c33 ;;; gnus-art.el ends here