]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch.el
make headers locally expandable/collapsable
[notmuch] / notmuch.el
index 0cabbe2c3b4d00005234d4a3c7804ff3a690070f..8aee2864047ef455ff3e7eb1e83693ee9e557829 100644 (file)
@@ -82,6 +82,8 @@
     (define-key map " " 'notmuch-show-advance-marking-read-and-archiving)
     (define-key map "|" 'notmuch-show-pipe-message)
     (define-key map "?" 'describe-mode)
+    (define-key map (kbd "TAB") 'notmuch-show-next-button)
+    (define-key map (kbd "M-TAB") 'notmuch-show-previous-button)
     map)
   "Keymap for \"notmuch show\" buffers.")
 (fset 'notmuch-show-mode-map notmuch-show-mode-map)
@@ -479,6 +481,16 @@ which this thread was originally shown."
        (if last
            (notmuch-show-archive-thread))))))
 
+(defun notmuch-show-next-button ()
+  "Advance point to the next button in the buffer."
+  (interactive)
+  (goto-char (button-start (next-button (point)))))
+
+(defun notmuch-show-previous-button ()
+  "Move point back to the previous button in the buffer."
+  (interactive)
+  (goto-char (button-start (previous-button (point)))))
+
 (defun notmuch-toggle-invisible-action (cite-button)
   (let ((invis-spec (button-get button 'invisibility-spec)))
         (if (invisible-p invis-spec)
@@ -593,7 +605,8 @@ which this thread was originally shown."
     (end-of-line)
     ; Inverse video for subject
     (overlay-put (make-overlay beg (point)) 'face '(:inverse-video t))
-    (forward-line 2)
+    (forward-line 1)
+    (end-of-line)
     (let ((beg-hidden (point-marker)))
       (re-search-forward notmuch-show-header-end-regexp)
       (beginning-of-line)
@@ -607,8 +620,19 @@ which this thread was originally shown."
           (forward-line)
           )
        (indent-rigidly beg end depth)
-       (overlay-put (make-overlay beg-hidden end)
-                    'invisible 'notmuch-show-header)
+        (let ((invis-spec (make-symbol "notmuch-show-header")))
+          (add-to-invisibility-spec (cons invis-spec t))
+          (overlay-put (make-overlay beg-hidden end)
+                       'invisible invis-spec)
+          (goto-char beg)
+          (forward-line)
+          (let ((header-button (make-button (line-beginning-position) (line-end-position))))
+            (button-put header-button 'invisibility-spec (cons invis-spec t))
+            (button-put header-button 'action 'notmuch-toggle-invisible-action)
+            (button-put header-button 'follow-link t)
+            (button-put header-button 'help-echo
+                        "mouse-1, RET: Show headers")
+          ))
         (goto-char end)
         (insert "\n")
        (set-marker beg nil)