]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch.el
notmuch.el: Fix to claim correct number of lines for hidden signature.
[notmuch] / notmuch.el
index a205267ecfed76df05c04ef0861c7999f373c849..0599af5f0139b76846efa60b27eedabdfc0a269c 100644 (file)
@@ -307,7 +307,7 @@ which this thread was originally shown."
          (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)))
+                        (concat "[" (number-to-string (count-lines beg-sub end))
                                 "-line signature.]"))
            (goto-char end)))
       (next-line))))
@@ -470,15 +470,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 +496,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")