]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch-tree.el
emacs/tree: introduce notmuch-tree-parent-buffer variable
[notmuch] / emacs / notmuch-tree.el
index 37a5d1c843015c6226ec217f2d59bda414473914..29f648518dfc03fd2fd836ce35d6db35e9d83f26 100644 (file)
@@ -1,4 +1,4 @@
-;;; notmuch-tree.el --- displaying notmuch forests.
+;;; notmuch-tree.el --- displaying notmuch forests
 ;;
 ;; Copyright © Carl Worth
 ;; Copyright © David Edmondson
@@ -33,6 +33,7 @@
 (require 'notmuch-show)
 (require 'notmuch-tag)
 (require 'notmuch-parser)
+(require 'notmuch-jump)
 
 (declare-function notmuch-search "notmuch"
                  (&optional query oldest-first target-thread target-line))
@@ -221,6 +222,9 @@ For example:
   "A buffer local copy of argument open-target to the function notmuch-tree.")
 (make-variable-buffer-local 'notmuch-tree-open-target)
 
+(defvar notmuch-tree-parent-buffer nil)
+(make-variable-buffer-local 'notmuch-tree-parent-buffer)
+
 (defvar notmuch-tree-message-window nil
   "The window of the message pane.
 
@@ -587,7 +591,7 @@ Shows in split pane or whole window according to value of
        (scroll-up)))))
 
 (defun notmuch-tree-scroll-message-window-back ()
-  "Scroll the message window back(if it exists)."
+  "Scroll the message window back (if it exists)."
   (interactive)
   (when (window-live-p notmuch-tree-message-window)
     (with-selected-window notmuch-tree-message-window
@@ -596,7 +600,8 @@ Shows in split pane or whole window according to value of
        (scroll-down)))))
 
 (defun notmuch-tree-scroll-or-next ()
-  "Scroll the message window. If it at end go to next message."
+  "Scroll the message window.
+If it at end go to next message."
   (interactive)
   (when (notmuch-tree-scroll-message-window)
     (notmuch-tree-next-matching-message)))
@@ -967,19 +972,19 @@ Complete list of currently available key bindings:
        (never-found-target-thread nil))
     (when (memq status '(exit signal))
       (kill-buffer (process-get proc 'parse-buf))
-      (if (buffer-live-p buffer)
-         (with-current-buffer buffer
-           (save-excursion
-             (let ((inhibit-read-only t)
-                   (atbob (bobp)))
-               (goto-char (point-max))
-               (if (eq status 'signal)
-                   (insert "Incomplete search results (tree view process was killed).\n"))
-               (when (eq status 'exit)
-                 (insert "End of search results.")
-                 (unless (= exit-status 0)
-                   (insert (format " (process returned %d)" exit-status)))
-                 (insert "\n")))))))))
+      (when (buffer-live-p buffer)
+       (with-current-buffer buffer
+         (save-excursion
+           (let ((inhibit-read-only t)
+                 (atbob (bobp)))
+             (goto-char (point-max))
+             (when (eq status 'signal)
+               (insert "Incomplete search results (tree view process was killed).\n"))
+             (when (eq status 'exit)
+               (insert "End of search results.")
+               (unless (= exit-status 0)
+                 (insert (format " (process returned %d)" exit-status)))
+               (insert "\n")))))))))
 
 (defun notmuch-tree-process-filter (proc string)
   "Process and filter the output of \"notmuch show\" for tree view."
@@ -1009,7 +1014,8 @@ the same as for the function notmuch-tree."
   (setq notmuch-tree-basic-query basic-query)
   (setq notmuch-tree-query-context (if (or (string= query-context "")
                                           (string= query-context "*"))
-                                      nil query-context))
+                                      nil
+                                    query-context))
   (setq notmuch-tree-target-msg target)
   (setq notmuch-tree-open-target open-target)
   ;; Set the default value for `notmuch-show-process-crypto' in this
@@ -1023,8 +1029,8 @@ the same as for the function notmuch-tree."
                              (and query-context
                                   (concat " and (" query-context ")"))))
         (message-arg (if unthreaded "--unthreaded" "--entire-thread")))
-    (if (equal (car (process-lines notmuch-command "count" search-args)) "0")
-       (setq search-args basic-query))
+    (when (equal (car (process-lines notmuch-command "count" search-args)) "0")
+      (setq search-args basic-query))
     (notmuch-tag-clear-cache)
     (let ((proc (notmuch-start-notmuch
                 "notmuch-tree" (current-buffer) #'notmuch-tree-process-sentinel
@@ -1047,7 +1053,7 @@ the same as for the function notmuch-tree."
              ")")
     notmuch-tree-basic-query))
 
-(defun notmuch-tree (&optional query query-context target buffer-name open-target unthreaded)
+(defun notmuch-tree (&optional query query-context target buffer-name open-target unthreaded parent-buffer)
   "Display threads matching QUERY in tree view.
 
 The arguments are:
@@ -1063,10 +1069,10 @@ The arguments are:
   OPEN-TARGET: If TRUE open the target message in the message pane.
   UNTHREADED: If TRUE only show matching messages in an unthreaded view."
   (interactive)
-  (if (null query)
-      (setq query (notmuch-read-query (concat "Notmuch "
-                                             (if unthreaded "unthreaded " "tree ")
-                                             "view search: "))))
+  (unless query
+    (setq query (notmuch-read-query (concat "Notmuch "
+                                           (if unthreaded "unthreaded " "tree ")
+                                           "view search: "))))
   (let ((buffer (get-buffer-create (generate-new-buffer-name
                                    (or buffer-name
                                        (concat "*notmuch-"
@@ -1077,6 +1083,7 @@ The arguments are:
   ;; Don't track undo information for this buffer
   (set 'buffer-undo-list t)
   (notmuch-tree-worker query query-context target open-target unthreaded)
+  (setq notmuch-tree-parent-buffer parent-buffer)
   (setq truncate-lines t))
 
 (defun notmuch-unthreaded (&optional query query-context target buffer-name open-target)