]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch.el
notmuch.el: Don't hide long signatures.
[notmuch] / notmuch.el
index a205267ecfed76df05c04ef0861c7999f373c849..20436f83a5ca5a89f3b4c3e4cdee4f82a7af4bc5 100644 (file)
@@ -46,6 +46,9 @@
   "Keymap for \"notmuch show\" buffers.")
 (fset 'notmuch-show-mode-map notmuch-show-mode-map)
 
+(defvar notmuch-show-signature-lines-max 6
+  "Maximum length of signature that will be hidden by default.")
+
 (defvar notmuch-show-message-begin-regexp    "\fmessage{")
 (defvar notmuch-show-message-end-regexp      "\fmessage}")
 (defvar notmuch-show-header-begin-regexp     "\fheader{")
@@ -297,20 +300,24 @@ which this thread was originally shown."
       (if (looking-at ">")
          (progn
            (while (looking-at ">")
-             (next-line))
+             (forward-line))
            (let ((overlay (make-overlay beg-sub (point))))
              (overlay-put overlay 'invisible 'notmuch-show-citation)
              (overlay-put overlay 'before-string
                           (concat "[" (number-to-string (count-lines beg-sub (point)))
-                                  " quoted lines.]")))))
+                                  " quoted lines.]\n")))))
       (if (looking-at "--[ ]?$")
-         (let ((overlay (make-overlay beg-sub end)))
-           (overlay-put overlay 'invisible 'notmuch-show-signature)
-           (overlay-put overlay 'before-string
-                        (concat "[" (number-to-string (count-lines beg-sub (point)))
-                                "-line signature.]"))
-           (goto-char end)))
-      (next-line))))
+         (let ((sig-lines (count-lines beg-sub end)))
+           (if (<= sig-lines notmuch-show-signature-lines-max)
+               (progn
+                 (overlay-put (make-overlay beg-sub (+ beg-sub 1))
+                              'before-string
+                              (concat "[" (number-to-string sig-lines)
+                                      "-line signature.]"))
+                 (overlay-put (make-overlay (+ beg-sub 2) end)
+                              'invisible 'notmuch-show-signature)
+                 (goto-char end)))))
+      (forward-line))))
 
 (defun notmuch-show-markup-body ()
   (re-search-forward notmuch-show-body-begin-regexp)
@@ -470,15 +477,18 @@ thread from that buffer can be show when done with this one)."
          (progn
            (notmuch-show-next-unread-message)
            ; But if there are no unread messages, go back to the
-           ; beginning of the buffer.
+           ; beginning of the buffer, and open up the bodies of all
+           ; read message.
            (if (not (notmuch-show-message-unread-p))
-               (goto-char (point-min)))))
+               (progn
+                 (goto-char (point-min))
+                 (notmuch-show-toggle-body-read-visible)))))
       )))
 
 (defvar notmuch-search-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "a" 'notmuch-search-archive-thread)
-    (define-key map "b" 'scroll-down)
+    (define-key map "b" 'notmuch-search-scroll-down)
     (define-key map "f" 'notmuch-search-filter)
     (define-key map "n" 'next-line)
     (define-key map "p" 'previous-line)
@@ -493,12 +503,34 @@ thread from that buffer can be show when done with this one)."
     (define-key map ">" 'notmuch-search-goto-last-thread)
     (define-key map "=" 'notmuch-search-refresh-view)
     (define-key map "\M->" 'notmuch-search-goto-last-thread)
-    (define-key map " " 'scroll-up)
-    (define-key map (kbd "<DEL>") 'scroll-down)
+    (define-key map " " 'notmuch-search-scroll-up)
+    (define-key map (kbd "<DEL>") 'notmuch-search-scroll-down)
     map)
   "Keymap for \"notmuch search\" buffers.")
 (fset 'notmuch-search-mode-map notmuch-search-mode-map)
 
+(defun notmuch-search-scroll-up ()
+  "Scroll up, moving point to last message in thread if at end."
+  (interactive)
+  (condition-case nil
+      (scroll-up nil)
+    ((end-of-buffer) (notmuch-search-goto-last-thread))))
+
+(defun notmuch-search-scroll-down ()
+  "Scroll down, moving point to first message in thread if at beginning."
+  (interactive)
+  ; I don't know why scroll-down doesn't signal beginning-of-buffer
+  ; the way that scroll-up signals end-of-buffer, but c'est la vie.
+  ;
+  ; So instead of trapping a signal we instead check whether the
+  ; window begins on the first line of the buffer and if so, move
+  ; directly to that position. (We have to count lines since the
+  ; window-start position is not the same as point-min due to the
+  ; invisible thread-ID characters on the first line.
+  (if (equal (count-lines (point-min) (window-start)) 1)
+      (goto-char (window-start))
+    (scroll-down nil)))
+
 (defun notmuch-search-goto-last-thread (&optional arg)
   "Move point to the last thread in the buffer."
   (interactive "^P")