notmuch.el: Add '<' and '>' bindings to goto first/last thread.
authorCarl Worth <cworth@cworth.org>
Tue, 3 Nov 2009 02:23:06 +0000 (18:23 -0800)
committerCarl Worth <cworth@cworth.org>
Tue, 3 Nov 2009 02:23:06 +0000 (18:23 -0800)
Also, take care to remove a final blank line to avoid the point
going beyond the last thread in the buffer.

notmuch.el

index 4e350a80021f90affd362fc7c07a951bfb42b494..54f4a5812e997a2db270164af380f8127c5bc955 100644 (file)
@@ -61,7 +61,7 @@
          (error "notmuch search process already running for query `%s'" query)
        )
       (erase-buffer)
-      (beginning-of-buffer)
+      (goto-char (point-min))
       (save-excursion
        (call-process "notmuch" nil t nil "show" thread-id)
        )
     (define-key map "\r" 'notmuch-search-show-thread)
     (define-key map "+" 'notmuch-search-add-tag)
     (define-key map "-" 'notmuch-search-remove-tag)
+    (define-key map "<" 'beginning-of-buffer)
+    (define-key map ">" 'notmuch-search-goto-last-thread)
+    (define-key map "\M->" 'notmuch-search-goto-last-thread)
     map)
   "Keymap for \"notmuch search\" buffers.")
 (fset 'notmuch-search-mode-map notmuch-search-mode-map)
 
+(defun notmuch-search-goto-last-thread (&optional arg)
+  "Move point to the last thread in the buffer."
+  (interactive "^P")
+  (end-of-buffer arg)
+  (beginning-of-line))
+
 ;;;###autoload
 (defun notmuch-search-mode ()
   "Major mode for handling the output of \"notmuch search\""
 
 (defun notmuch-search-markup-thread-ids ()
   (save-excursion
-    (beginning-of-buffer)
+    (goto-char (point-min))
     (while (not (eobp))
       (notmuch-search-markup-this-thread-id)
       (next-line))))
          (error "notmuch search process already running for query `%s'" query)
        )
       (erase-buffer)
-      (beginning-of-buffer)
+      (goto-char (point-min))
       (save-excursion
        (call-process "notmuch" nil t nil "search" query)
-       )
-      (notmuch-search-markup-thread-ids)
-      )))
+       (notmuch-search-markup-thread-ids)
+        ; A well-behaved program ends its output with a newline, but we
+        ; don't actually want the blank line at the end of the file.
+       (goto-char (point-max))
+       (if (looking-at "^$")
+           (delete-backward-char 1)
+         )
+       ))))
 
 (defun notmuch-search-filter (query)
   "Run \"notmuch search\" to refine the current search results.