unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: David Edmondson <dme@dme.org>
To: notmuch@notmuchmail.org
Subject: [PATCH v2] emacs: Add more processing of displayed headers.
Date: Mon,  6 Feb 2012 15:39:05 +0000	[thread overview]
Message-ID: <1328542748-19530-2-git-send-email-dme@dme.org> (raw)
In-Reply-To: <1328542748-19530-1-git-send-email-dme@dme.org>

Wrap headers to the width of the window and indent continuations.
---
 emacs/notmuch-show.el |   43 ++++++++++++++++++++++++++++++++++++-------
 1 files changed, 36 insertions(+), 7 deletions(-)

diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 7469e2e..a589d37 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -68,9 +68,16 @@ any given message."
   :type 'boolean
   :group 'notmuch-show)
 
-(defvar notmuch-show-markup-headers-hook '(notmuch-show-colour-headers)
+(defcustom notmuch-show-markup-headers-hook '(notmuch-show-colour-headers
+					      notmuch-show-fill-headers
+					      notmuch-show-indent-continuations)
   "A list of functions called to decorate the headers listed in
-`notmuch-message-headers'.")
+`notmuch-message-headers'."
+  :type 'hook
+  :options '(notmuch-show-colour-headers
+	     notmuch-show-fill-headers
+	     notmuch-show-indent-continuations)
+  :group 'notmuch-show)
 
 (defcustom notmuch-show-hook '(notmuch-show-turn-on-visual-line-mode)
   "Functions called after populating a `notmuch-show' buffer."
@@ -269,13 +276,35 @@ operation on the contents of the current buffer."
     (overlay-put (make-overlay (point) (re-search-forward ".*$"))
 		 'face face)))
 
-(defun notmuch-show-colour-headers ()
+(defun notmuch-show-colour-headers (depth)
   "Apply some colouring to the current headers."
   (goto-char (point-min))
   (while (looking-at "^[A-Za-z][-A-Za-z0-9]*:")
     (notmuch-show-fontify-header)
     (forward-line)))
 
+(defun notmuch-show-fill-headers (depth)
+  "Wrap the text of the current headers."
+
+  ;; '-5' to allow for the indentation code.
+  (let ((fill-column (- (window-width) depth 5)))
+    (goto-char (point-min))
+    (while (not (eobp))
+      (let ((start (point)))
+	(end-of-line)
+	;; We're left at the start of the next line, so there's no need
+	;; to move forward after filling.
+	(fill-region-as-paragraph start (point))))))
+
+(defun notmuch-show-indent-continuations (depth)
+  "Indent any continuation lines."
+  (goto-char (point-min))
+  (while (not (eobp))
+    (if (not (looking-at "^[A-Za-z][-A-Za-z0-9]*:"))
+	;; Four spaces tends to work well with 'To' and 'Cc' headers.
+	(insert "    "))
+    (forward-line)))
+
 (defun notmuch-show-spaces-n (n)
   "Return a string comprised of `n' spaces."
   (make-string n ? ))
@@ -366,7 +395,7 @@ message at DEPTH in the current thread."
   "Insert a single header."
   (insert header ": " header-value "\n"))
 
-(defun notmuch-show-insert-headers (headers)
+(defun notmuch-show-insert-headers (headers depth)
   "Insert the headers of the current message."
   (let ((start (point)))
     (mapc (lambda (header)
@@ -379,7 +408,7 @@ message at DEPTH in the current thread."
     (save-excursion
       (save-restriction
 	(narrow-to-region start (point-max))
-	(run-hooks 'notmuch-show-markup-headers-hook)))))
+	(run-hook-with-args 'notmuch-show-markup-headers-hook depth)))))
 
 (define-button-type 'notmuch-show-part-button-type
   'action 'notmuch-show-part-button-default
@@ -671,7 +700,7 @@ current buffer, if possible."
     ;; Override `notmuch-message-headers' to force `From' to be
     ;; displayed.
     (let ((notmuch-message-headers '("From" "Subject" "To" "Cc" "Date")))
-      (notmuch-show-insert-headers (plist-get message :headers)))
+      (notmuch-show-insert-headers (plist-get message :headers) 0))
 
     ;; Blank line after headers to be compatible with the normal
     ;; message display.
@@ -864,7 +893,7 @@ current buffer, if possible."
     ;; Set `headers-start' to point after the 'Subject:' header to be
     ;; compatible with the existing implementation. This just sets it
     ;; to after the first header.
-    (notmuch-show-insert-headers headers)
+    (notmuch-show-insert-headers headers depth)
     (save-excursion
       (goto-char content-start)
       ;; If the subject of this message is the same as that of the
-- 
1.7.8.3

  reply	other threads:[~2012-02-06 15:39 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-20  9:43 [PATCH 1/3] emacs: Tidy `notmuch-show-insert-part-header' David Edmondson
2012-01-20  9:43 ` [PATCH 2/3] emacs: Don't return the button from `notmuch-show-insert-part-header' David Edmondson
2012-01-20 20:20   ` Jameson Graef Rollins
2012-01-22 21:38   ` Jameson Graef Rollins
2012-01-23  8:16     ` David Edmondson
2012-01-23  8:52       ` Jameson Graef Rollins
2012-01-23  9:12         ` David Edmondson
2012-01-23 10:33           ` [PATCH 1/3 v2] " David Edmondson
2012-01-23 10:33             ` [PATCH 2/3 v2] emacs: Optionally hide some part headers David Edmondson
2012-01-23 10:33             ` [PATCH 3/3 v2] emacs: Don't insert a part header if it's the first part and text/* David Edmondson
2012-01-23 11:32             ` [PATCH 1/3 v2] emacs: Don't return the button from `notmuch-show-insert-part-header' David Edmondson
2012-01-20  9:43 ` [PATCH 3/3] emacs: Optionally hide some part headers David Edmondson
2012-01-24 12:53 ` optional hiding of some part headers v3 David Edmondson
2012-01-24 12:53   ` [PATCH 1/3] emacs: Don't return the button from `notmuch-show-insert-part-header' David Edmondson
2012-01-24 18:46     ` Jameson Graef Rollins
2012-01-24 19:25       ` David Edmondson
2012-01-24 19:52         ` Jameson Graef Rollins
2012-01-25  6:15           ` David Edmondson
2012-01-24 19:33     ` Tomi Ollila
2012-01-24 12:53   ` [PATCH 2/3] emacs: Optionally hide some part headers David Edmondson
2012-01-24 19:34     ` Tomi Ollila
2012-01-24 12:53   ` [PATCH 3/3] emacs: Don't insert a part header if it's the first part and text/* David Edmondson
2012-01-24 19:46     ` Tomi Ollila
2012-02-06 15:39 ` [PATCH v3 0/3] part header code tidying and options David Edmondson
2012-02-06 15:39   ` David Edmondson [this message]
2012-02-14 12:30     ` [PATCH v2] emacs: Add more processing of displayed headers David Bremner
2012-02-14 13:28       ` David Edmondson
2012-10-12 19:11     ` Ethan Glasser-Camp
2012-02-06 15:39   ` [PATCH v3 1/3] emacs: Don't return the button from `notmuch-show-insert-part-header' David Edmondson
2012-02-06 15:39   ` [PATCH v3 2/3] emacs: Optionally hide some part headers David Edmondson
2012-02-12  9:21     ` Mark Walters
2012-02-06 15:39   ` [PATCH v3 3/3] emacs: Don't insert a part header if it's the first part and text/* David Edmondson
2012-02-12  9:24     ` Mark Walters
2012-02-12  9:39       ` Mark Walters
  -- strict thread matches above, loose matches on Subject: below --
2012-01-26  8:17 [PATCH 0/2] re-enable line wrapping and add some header bling David Edmondson
2012-02-06 13:16 ` [PATCH v2] Wrap and indent headers in show mode David Edmondson
2012-02-06 13:16   ` [PATCH v2] emacs: Add more processing of displayed headers David Edmondson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1328542748-19530-2-git-send-email-dme@dme.org \
    --to=dme@dme.org \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).