From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.emacs.gnus.general/64885 Path: news.gmane.org!not-for-mail From: Tassilo Horn Newsgroups: gmane.emacs.gnus.general Subject: [Patch] Sticky Article Buffers Date: Thu, 05 Jul 2007 00:27:23 +0200 Message-ID: <87odirreic.fsf@baldur.tsdh.de> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: sea.gmane.org 1183588094 24372 80.91.229.12 (4 Jul 2007 22:28:14 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Wed, 4 Jul 2007 22:28:14 +0000 (UTC) To: ding@gnus.org Original-X-From: ding-owner+M13395@lists.math.uh.edu Thu Jul 05 00:28:13 2007 connect(): Connection refused Return-path: Envelope-to: ding-account@gmane.org Original-Received: from util0.math.uh.edu ([129.7.128.18]) by lo.gmane.org with esmtp (Exim 4.50) id 1I6DKV-0004uh-Bq for ding-account@gmane.org; Thu, 05 Jul 2007 00:28:11 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.math.uh.edu) by util0.math.uh.edu with smtp (Exim 4.63) (envelope-from ) id 1I6DJx-0003xx-Ua; Wed, 04 Jul 2007 17:27:37 -0500 Original-Received: from mx1.math.uh.edu ([129.7.128.32]) by util0.math.uh.edu with esmtps (TLSv1:AES256-SHA:256) (Exim 4.63) (envelope-from ) id 1I6DJu-0003xf-Nz for ding@lists.math.uh.edu; Wed, 04 Jul 2007 17:27:34 -0500 Original-Received: from quimby.gnus.org ([80.91.231.51]) by mx1.math.uh.edu with esmtp (Exim 4.67) (envelope-from ) id 1I6DJs-0008Kf-4B for ding@lists.math.uh.edu; Wed, 04 Jul 2007 17:27:34 -0500 Original-Received: from main.gmane.org ([80.91.229.2] helo=ciao.gmane.org) by quimby.gnus.org with esmtp (Exim 3.35 #1 (Debian)) id 1I6DJq-0001Ui-00 for ; Thu, 05 Jul 2007 00:27:30 +0200 Original-Received: from list by ciao.gmane.org with local (Exim 4.43) id 1I6DJp-0001Y0-UV for ding@gnus.org; Thu, 05 Jul 2007 00:27:29 +0200 Original-Received: from dslb-084-063-054-099.pools.arcor-ip.net ([84.63.54.99]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 05 Jul 2007 00:27:29 +0200 Original-Received: from tassilo by dslb-084-063-054-099.pools.arcor-ip.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 05 Jul 2007 00:27:29 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 236 Original-X-Complaints-To: usenet@sea.gmane.org X-Gmane-NNTP-Posting-Host: dslb-084-063-054-099.pools.arcor-ip.net Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAElBMVEUSEQ9eW1Dkxz/6+fjQ w52JeEi7Imd/AAAACXBIWXMAAAsSAAALEgHS3X78AAAATnRFWHRSYXcgcHJvZmlsZSB0eXBlIGV4 aWYACmV4aWYKICAgICAgMjAKNDU3ODY5NjYwMDAwNGQ0ZDAwMmEwMDAwMDAwODAwMDAwMDAwMDAw MAqJuBZbAAAACXZwQWcAAAAwAAAAMADO7oxXAAABk0lEQVQ4y32TS3KDMAxAxQB7uyEHiGvvoSh7 sMSeJnD/q9Q/DBmYamNZz/oioM8ySkn7DbL2bHiUV+CODTflGXTSC5xBWwRAJzBAkPIEhLMWANUZ 3ETRt1CcAbcVdhdgmMZq5CsPsS6iufJ4EY7rFVg0WwNwblA5+Q/QCbADtLeewUxKcT/n1g8x0UVp c5Lt7Op4ANw+wfwOB+YxJoA5wlZXMnSwT788gmEbhUtSHMFWPuEnwK0WD6IOKUDISIckkFYk+KWl qHYgUvGIOKYkEeQJEQ5H0EETrERIbWoxgTLmQCLvsQNRhpqQELvmF3Kop17Ce+yJf6WsM7D8CMNF 7pcZoN5C4cLWlUXsiHY5bAKsmXn2c2BCPYkGI0BtHTGFrxX5RUz8jkBZ1tqKt8vOrC1bNgk4M6v5 5jyYvzQrtjqCICN7+8hWaaXNAahvwn66R92QA88ENCPPCSze4ycBI6WQdVBXOoYy/ndeN3tocH35 68MDH8os26zQGHd/+XcYE+xbMpk1LuC0mo9NdANOX10n5Q8J6syYNMm6EgAAABp6VFh0anBlZzpj b2xvcnNwYWNlAAB42jMCAAAzADOJOCM1AAAAJnpUWHRqcGVnOnNhbXBsaW5nLWZhY3RvcgAAeNoz qjDSMawwBGEAEYMC6T2XL08AAAAASUVORK5CYII= User-Agent: Gnus/5.110007 (No Gnus v0.7) Emacs/22.1 (gnu/linux) Cancel-Lock: sha1:mAFRkx1HO8gyp63kpEuMLcpA8O4= X-Spam-Score: -2.6 (--) List-ID: Precedence: bulk Xref: news.gmane.org gmane.emacs.gnus.general:64885 Archived-At: --=-=-= Hello, this patch implements sticky article buffers. With `C-c s' in Summary Buffer you open an article buffer and make it sticky. Sticky means that it won't be killed when selecting another article or leaving the summary. This might me useful if you write an article and have to quote many other articles (which you would make sticky first, instead of visiting them via summary over and over again). You kill a sticky article buffer with `q' in it or with `gnus-kill-all-sticky-article-buffers'. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=sticky-article-buffers.patch Content-Description: Sticky Article Buffers Index: gnus.el =================================================================== RCS file: /usr/local/cvsroot/gnus/lisp/gnus.el,v retrieving revision 7.66 diff -u -r7.66 gnus.el --- gnus.el 4 Jun 2007 11:58:52 -0000 7.66 +++ gnus.el 4 Jul 2007 22:21:17 -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: gnus-sum.el =================================================================== RCS file: /usr/local/cvsroot/gnus/lisp/gnus-sum.el,v retrieving revision 7.188 diff -u -r7.188 gnus-sum.el --- gnus-sum.el 14 Jun 2007 09:49:28 -0000 7.188 +++ gnus-sum.el 4 Jul 2007 22:21:37 -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)) @@ -6973,9 +6979,13 @@ 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)) + (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)) (set-buffer buf) (if (not gnus-kill-summary-on-exit) (progn @@ -7908,6 +7918,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) @@ -12404,6 +12456,8 @@ ;; Local Variables: ;; coding: iso-8859-1 +;; indent-tabs-mode: t +;; tab-width: 8 ;; End: ;; arch-tag: 17c6748f-6d00-4d36-bf01-835c42f31235 Index: 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 --- gnus-art.el 26 Jun 2007 07:31:41 -0000 7.219 +++ gnus-art.el 4 Jul 2007 22:21:50 -0000 @@ -4365,6 +4365,26 @@ (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.") + +(define-key gnus-sticky-article-mode-map "q" 'gnus-sticky-article-kill-buffer) + +(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 +8101,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 --=-=-= I tested it briefly and it seems to do what it should. Anyway, it's my first non-trivial patch, so feel free to comment. Bye, Tassilo -- "DRM manages rights in the same way a jail manages freedom" --=-=-=--