From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.emacs.gnus.general/55919 Path: main.gmane.org!not-for-mail From: Romain Francoise Newsgroups: gmane.emacs.gnus.general Subject: [PATCH] Hide headers using narrowing Date: Sun, 11 Jan 2004 13:45:24 +0100 Organization: orebokech dot com Sender: ding-owner@lists.math.uh.edu Message-ID: <87brpalkm3.fsf@orebokech.com> NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: sea.gmane.org 1073825155 1276 80.91.224.253 (11 Jan 2004 12:45:55 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sun, 11 Jan 2004 12:45:55 +0000 (UTC) Original-X-From: ding-owner+M4459@lists.math.uh.edu Sun Jan 11 13:45:52 2004 Return-path: Original-Received: from malifon.math.uh.edu ([129.7.128.13]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1AfeyV-0002m8-00 for ; Sun, 11 Jan 2004 13:45:51 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.math.uh.edu) by malifon.math.uh.edu with smtp (Exim 3.20 #1) id 1AfeyL-00075O-00; Sun, 11 Jan 2004 06:45:41 -0600 Original-Received: from justine.libertine.org ([66.139.78.221] ident=postfix) by malifon.math.uh.edu with esmtp (Exim 3.20 #1) id 1AfeyF-00075J-00 for ding@lists.math.uh.edu; Sun, 11 Jan 2004 06:45:35 -0600 Original-Received: from yeast.orebokech.com (yeast.orebokech.com [82.67.41.165]) by justine.libertine.org (Postfix) with ESMTP id 75BBB3A0048 for ; Sun, 11 Jan 2004 06:45:34 -0600 (CST) Original-Received: from swift (swift [192.168.1.6]) by yeast.orebokech.com (Postfix) with ESMTP id A971F12D0F for ; Sun, 11 Jan 2004 13:44:46 +0100 (CET) Original-Received: by swift (Postfix, from userid 1000) id D99EB17EFB; Sun, 11 Jan 2004 13:45:24 +0100 (CET) Original-To: ding@gnus.org Mail-Copies-To: nobody Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAElBMVEVfX1/6+vr////9/f3t 7e3Ly8vQsKpnAAACG0lEQVR4nHWUwbLqIAyGc+aW/QF0f0l0f0p03yrsqYX3f5UbWlrrnLnRcUY+ /iSEBEAxkq9HrZ3re2SuSwjLL7LVJ1AjGavJHkDdBGIP1FW7g7rprmIYOh2sP7giJP6rQg5QFtEh huchxxAGABWeBwXxCCIYI0SA7HfQ41lBVUQVlxSoAaYkG2M+xS6knF6uAbIWSsqhWZo1+uaKoRRZ OsmnAutpBTpKMuGt8FKZVVFD7ACevrc7UHkh4krUTzl9A0uIxcaoQJmW7mVxdNpYgWcDQ4u9ofRa s7oAvF1VG6ZVcYWy5zSKahwmswKVw4cN2f5SrKBzLcZniHGYWxFTve+yy6Iy2wG1WIWgihhMdg1O 5mS0/4HNFF9a2SlNGBI8jLvCFzptcVWgS8rWK72YM6g+oLWtJLcEBqDD7z+DgiuMSGu6JH8zdB6H LhU4Q5Z2bEVUstChByXlTDA7bue4i//y8FeAW5oFsN3uPHWI1otHi3xXEsE1IDPRs4ecCHvDS7+v DceeHWtpaeSey2ypufJUe5+lJfA22eqX34PDxHd42au6gaKtE8WXK6Nzxknr3SvYXNm6W385pxP8 KOWZNoX+hlmDQ5NE0XneJ0qn9IogRR3Urbzeo0Y9pOkbHl5m1OBhBsknmM7FOOm93rwBI8fyINKE Cag/ziA6j04mzMbOHB6AZQxJaudJPz7fkvoIeON1rdmn4pf9F/wDiXi3jVRQn7MAAAAASUVORK5C YII= User-Agent: Gnus/5.110002 (No Gnus v0.2) Emacs/21.3.50 (gnu/linux) Precedence: bulk Xref: main.gmane.org gmane.emacs.gnus.general:55919 X-Report-Spam: http://spam.gmane.org/gmane.emacs.gnus.general:55919 --=-=-= Hi, This patch has been waiting for No Gnus for months: it makes Message use narrowing to hide headers, by moving them to the very top of the message buffer, and narrowing to the region underneath. This approach will most probably be less fragile than the current one which uses the `invisible' text property. To make raw messages look less funky, I've also made it sort the headers before sending the message, maybe it's not 100% necessary, but it seemed cleaner this way. The proposed ChangeLog entry follows. (And I do have papers on file for Gnus.) 2004-01-11 Romain Francoise * message.el (message-header-format-alist): Add `From' in list so that it can be sorted. (message-hide-headers): Use narrowing to hide headers by moving them to the top of the buffer and narrowing to the region underneath. (message-fix-before-sending): Widen and sort headers before sending. (message-strip-forbidden-properties): Remove check for obsolete `message-hidden' text property, hidden headers are not accessible in the buffer anymore. -- Romain Francoise | Shine the headlight, straight it's a miracle -- http://orebokech.com/ | into my eyes. --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=hidden-headers.patch Content-Description: Hide headers using narrowing Index: lisp/message.el =================================================================== RCS file: /usr/local/cvsroot/gnus/lisp/message.el,v retrieving revision 7.3 diff -u -r7.3 message.el --- lisp/message.el 7 Jan 2004 17:47:39 -0000 7.3 +++ lisp/message.el 11 Jan 2004 11:31:56 -0000 @@ -1490,7 +1490,8 @@ "A regexp that matches the separator before the text of a failed message.") (defvar message-header-format-alist - `((Newsgroups) + `((From) + (Newsgroups) (To . message-fill-address) (Cc . message-fill-address) (Subject) @@ -2108,7 +2109,8 @@ 10000)))) (defun message-sort-headers () - "Sort the headers of the current message according to `message-header-format-alist'." + "Sort the headers of the current message according to +`message-header-format-alist'." (interactive) (save-excursion (save-restriction @@ -2372,9 +2374,8 @@ (when (and message-strip-special-text-properties (message-tamago-not-in-use-p begin)) (while (not (= begin end)) - (when (not (get-text-property begin 'message-hidden)) - (remove-text-properties begin (1+ begin) - message-forbidden-properties)) + (remove-text-properties begin (1+ begin) + message-forbidden-properties) (incf begin)))) ;;;###autoload @@ -3470,12 +3471,9 @@ (unless (bolp) (insert "\n")) ;; Make the hidden headers visible. - (let ((points (message-text-with-property 'message-hidden))) - (when points - (goto-char (car points)) - (dolist (point points) - (add-text-properties point (1+ point) - '(invisible nil intangible nil))))) + (widen) + ;; Sort headers before sending the message. + (message-sort-headers) ;; Make invisible text visible. ;; It doesn't seem as if this is useful, since the invisible property ;; is clobbered by an after-change hook anyhow. @@ -6804,7 +6802,8 @@ (list message-hidden-headers) message-hidden-headers)) (inhibit-point-motion-hooks t) - (after-change-functions nil)) + (after-change-functions nil) + (end-of-headers 0)) (when regexps (save-excursion (save-restriction @@ -6813,11 +6812,17 @@ (while (not (eobp)) (if (not (message-hide-header-p regexps)) (message-next-header) - (let ((begin (point))) + (let ((begin (point)) + header header-len) (message-next-header) - (add-text-properties - begin (point) - '(invisible t message-hidden t)))))))))) + (setq header (buffer-substring begin (point)) + header-len (- (point) begin)) + (delete-region begin (point)) + (goto-char (1+ end-of-headers)) + (insert header) + (setq end-of-headers + (+ end-of-headers header-len)))))))) + (narrow-to-region (1+ end-of-headers) (point-max)))) (defun message-hide-header-p (regexps) (let ((result nil) --=-=-=--