]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch.el
Remove the global expand body keymapping
[notmuch] / notmuch.el
index fa6e7de4068a2598eb9997efaa1776a0c45a8f7a..907df2c09c96f1382afa69ccaf429a35ae9cf788 100644 (file)
@@ -61,9 +61,6 @@
     ; overlays-at to query and manipulate the current overlay.
     (define-key map "a" 'notmuch-show-archive-thread)
     (define-key map "A" 'notmuch-show-mark-read-then-archive-thread)
-    (define-key map "b" 'notmuch-show-toggle-body-read-visible)
-    (define-key map "c" 'notmuch-show-toggle-citations-visible)
-    (define-key map "h" 'notmuch-show-toggle-headers-visible)
     (define-key map "m" 'message-mail)
     (define-key map "n" 'notmuch-show-next-message)
     (define-key map "N" 'notmuch-show-mark-read-then-next-open-message)
@@ -72,7 +69,6 @@
     (define-key map (kbd "C-p") 'notmuch-show-previous-line)
     (define-key map "q" 'kill-this-buffer)
     (define-key map "r" 'notmuch-show-reply)
-    (define-key map "s" 'notmuch-show-toggle-signatures-visible)
     (define-key map "v" 'notmuch-show-view-all-mime-parts)
     (define-key map "w" 'notmuch-show-view-raw-message)
     (define-key map "x" 'kill-this-buffer)
@@ -500,6 +496,16 @@ which this thread was originally shown."
   (force-window-update)
   (redisplay t))
 
+(define-button-type 'notmuch-button-invisibility-toggle-type 'action 'notmuch-toggle-invisible-action 'follow-link t)
+(define-button-type 'notmuch-button-citation-toggle-type 'help-echo "mouse-1, RET: Show citation"
+  :supertype 'notmuch-button-invisibility-toggle-type)
+(define-button-type 'notmuch-button-signature-toggle-type 'help-echo "mouse-1, RET: Show signature"
+  :supertype 'notmuch-button-invisibility-toggle-type)
+(define-button-type 'notmuch-button-headers-toggle-type 'help-echo "mouse-1, RET: Show headers"
+  :supertype 'notmuch-button-invisibility-toggle-type)
+(define-button-type 'notmuch-button-body-toggle-type 'help-echo "mouse-1, RET: Show message"
+  :supertype 'notmuch-button-invisibility-toggle-type)
+
 (defun notmuch-show-markup-citations-region (beg end depth)
   (goto-char beg)
   (beginning-of-line)
@@ -515,22 +521,15 @@ which this thread was originally shown."
                   (invis-spec (make-symbol "notmuch-citation-region")))
               (add-to-invisibility-spec invis-spec)
              (overlay-put overlay 'invisible invis-spec)
-              (let (
-                    (p (point))
+              (let ((p (point))
                     (cite-button-text
                      (concat "["  (number-to-string (count-lines beg-sub (point)))
-                             "-line citation.]"))
-                    )
+                             "-line citation.]")))
                 (goto-char (- beg-sub 1))
                 (insert (concat "\n" indent))
-                (let ((cite-button (insert-button cite-button-text)))
-                  (button-put cite-button 'invisibility-spec invis-spec)
-                  (button-put cite-button 'action 'notmuch-toggle-invisible-action)
-                  (button-put cite-button 'follow-link t)
-                  (button-put cite-button 'help-echo
-                              "mouse-1, RET: Show citation")
-
-                  )
+                (insert-button cite-button-text
+                               'invisibility-spec invis-spec
+                               :type 'notmuch-button-citation-toggle-type)
                 (insert "\n")
                 (goto-char (+ (length cite-button-text) p))
               ))))
@@ -546,16 +545,11 @@ which this thread was originally shown."
                   
                     (goto-char (- beg-sub 1))
                     (insert (concat "\n" indent))
-                    (let ((sig-button (insert-button 
-                                       (concat "[" (number-to-string sig-lines)
-                                         "-line signature.]"))))
-                      (button-put sig-button 'invisibility-spec invis-spec)
-                      (button-put sig-button 'action
-                                  'notmuch-toggle-invisible-action)
-                      (button-put sig-button 'follow-link t)
-                      (button-put sig-button 'help-echo
-                                  "mouse-1, RET: Show signature")
-                      )
+                    (let ((sig-button-text (concat "[" (number-to-string sig-lines)
+                                                   "-line signature.]")))
+                      (insert-button sig-button-text 'invisibility-spec invis-spec
+                                     :type 'notmuch-button-signature-toggle-type)
+                     )
                     (insert "\n")
                     (goto-char end))))))
       (forward-line))))
@@ -584,16 +578,19 @@ which this thread was originally shown."
     (while (< (point) end)
       (notmuch-show-markup-part beg end depth))))
 
-(defun notmuch-show-markup-body (depth)
+(defun notmuch-show-markup-body (depth btn)
   (re-search-forward notmuch-show-body-begin-regexp)
   (forward-line)
   (let ((beg (point-marker)))
     (re-search-forward notmuch-show-body-end-regexp)
     (let ((end (copy-marker (match-beginning 0))))
       (notmuch-show-markup-parts-region beg end depth)
-      (if (not (notmuch-show-message-unread-p))
-         (overlay-put (make-overlay beg end)
-                      'invisible 'notmuch-show-body-read))
+      (let ((invis-spec (make-symbol "notmuch-show-body-read")))
+        (overlay-put (make-overlay beg end)
+                     'invisible invis-spec)
+        (button-put btn 'invisibility-spec invis-spec)
+        (if (not (notmuch-show-message-unread-p))
+            (add-to-invisibility-spec invis-spec)))
       (set-marker beg nil)
       (set-marker end nil)
       )))
@@ -601,11 +598,14 @@ which this thread was originally shown."
 (defun notmuch-show-markup-header (depth)
   (re-search-forward notmuch-show-header-begin-regexp)
   (forward-line)
-  (let ((beg (point-marker)))
+  (let ((beg (point-marker))
+        (btn nil))
     (end-of-line)
     ; Inverse video for subject
     (overlay-put (make-overlay beg (point)) 'face '(:inverse-video t))
-    (forward-line 2)
+    (setq btn (make-button beg (point) :type 'notmuch-button-body-toggle-type))
+    (forward-line 1)
+    (end-of-line)
     (let ((beg-hidden (point-marker)))
       (re-search-forward notmuch-show-header-end-regexp)
       (beginning-of-line)
@@ -619,22 +619,31 @@ 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)
+          (make-button (line-beginning-position) (line-end-position)
+                        'invisibility-spec (cons invis-spec t)
+                        :type 'notmuch-button-headers-toggle-type))
         (goto-char end)
         (insert "\n")
        (set-marker beg nil)
        (set-marker beg-hidden nil)
        (set-marker end nil)
-       ))))
+       ))
+    btn))
 
 (defun notmuch-show-markup-message ()
   (if (re-search-forward notmuch-show-message-begin-regexp nil t)
       (progn
        (re-search-forward notmuch-show-depth-regexp)
-       (let ((depth (string-to-number (buffer-substring (match-beginning 1) (match-end 1)))))
-         (notmuch-show-markup-header depth)
-         (notmuch-show-markup-body depth)))
+       (let ((depth (string-to-number (buffer-substring (match-beginning 1) (match-end 1))))
+              (btn nil))
+         (setq btn (notmuch-show-markup-header depth))
+         (notmuch-show-markup-body depth btn)))
     (goto-char (point-max))))
 
 (defun notmuch-show-hide-markers ()
@@ -654,50 +663,6 @@ which this thread was originally shown."
       (notmuch-show-markup-message)))
   (notmuch-show-hide-markers))
 
-(defun notmuch-show-toggle-citations-visible ()
-  "Toggle visibility of citations"
-  (interactive)
-  (if notmuch-show-citations-visible
-      (add-to-invisibility-spec 'notmuch-show-citation)
-    (remove-from-invisibility-spec 'notmuch-show-citation))
-  (set 'notmuch-show-citations-visible (not notmuch-show-citations-visible))
-  ; Need to force the redisplay for some reason
-  (force-window-update)
-  (redisplay t))
-
-(defun notmuch-show-toggle-signatures-visible ()
-  "Toggle visibility of signatures"
-  (interactive)
-  (if notmuch-show-signatures-visible
-      (add-to-invisibility-spec 'notmuch-show-signature)
-    (remove-from-invisibility-spec 'notmuch-show-signature))
-  (set 'notmuch-show-signatures-visible (not notmuch-show-signatures-visible))
-  ; Need to force the redisplay for some reason
-  (force-window-update)
-  (redisplay t))
-
-(defun notmuch-show-toggle-headers-visible ()
-  "Toggle visibility of header fields"
-  (interactive)
-  (if notmuch-show-headers-visible
-      (add-to-invisibility-spec 'notmuch-show-header)
-    (remove-from-invisibility-spec 'notmuch-show-header))
-  (set 'notmuch-show-headers-visible (not notmuch-show-headers-visible))
-  ; Need to force the redisplay for some reason
-  (force-window-update)
-  (redisplay t))
-
-(defun notmuch-show-toggle-body-read-visible ()
-  "Toggle visibility of message bodies of read messages"
-  (interactive)
-  (if notmuch-show-body-read-visible
-      (add-to-invisibility-spec 'notmuch-show-body-read)
-    (remove-from-invisibility-spec 'notmuch-show-body-read))
-  (set 'notmuch-show-body-read-visible (not notmuch-show-body-read-visible))
-  ; Need to force the redisplay for some reason
-  (force-window-update)
-  (redisplay t))
-
 ;;;###autoload
 (defun notmuch-show-mode ()
   "Major mode for viewing a thread with notmuch.
@@ -726,14 +691,6 @@ view, (remove the \"inbox\" tag from each), with
 \\{notmuch-show-mode-map}"
   (interactive)
   (kill-all-local-variables)
-  (set (make-local-variable 'notmuch-show-headers-visible) t)
-  (notmuch-show-toggle-headers-visible)
-  (set (make-local-variable 'notmuch-show-body-read-visible) t)
-  (notmuch-show-toggle-body-read-visible)
-  (set (make-local-variable 'notmuch-show-citations-visible) t)
-  (notmuch-show-toggle-citations-visible)
-  (set (make-local-variable 'notmuch-show-signatures-visible) t)
-  (notmuch-show-toggle-signatures-visible)
   (add-to-invisibility-spec 'notmuch-show-marker)
   (use-local-map notmuch-show-mode-map)
   (setq major-mode 'notmuch-show-mode
@@ -802,7 +759,16 @@ thread from that buffer can be show when done with this one)."
            (if (not (notmuch-show-message-unread-p))
                (progn
                  (goto-char (point-min))
-                 (notmuch-show-toggle-body-read-visible)))))
+                  (let ((btn (forward-button 1)))
+                    (while btn
+                      (if (button-has-type-p btn 'notmuch-button-body-toggle-type)
+                          (push-button))
+                      (condition-case err
+                          (setq btn (forward-button 1))
+                        (error (setq btn nil)))
+                    ))
+                  (beginning-of-buffer)
+                  ))))
       )))
 
 (defvar notmuch-search-authors-width 40
@@ -840,6 +806,7 @@ thread from that buffer can be show when done with this one)."
 (defvar notmuch-search-query-string)
 (defvar notmuch-search-oldest-first)
 
+
 (defun notmuch-search-scroll-up ()
   "Scroll up, moving point to last message in thread if at end."
   (interactive)