]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch-show.el
notmuch.el: quote args in notmuch-show to facilitate remote use
[notmuch] / emacs / notmuch-show.el
index cc1f9053c4266f4fb6f0943f1bfcaa8999162eff..81276d90f32eb2104939afd73c8f6bd5b1ed991c 100644 (file)
@@ -110,11 +110,21 @@ Can use up to one integer format parameter, i.e. %d")
 (defvar notmuch-show-signature-lines-max 12
   "Maximum length of signature that will be hidden by default.")
 
-(defvar notmuch-show-citation-lines-prefix 4
-  "Always show at least this many lines of a citation.
+(defvar notmuch-show-citation-lines-prefix 3
+  "Always show at least this many lines at the start of a citation.
 
-If there is one more line, show that, otherwise collapse
-remaining lines into a button.")
+If there is one more line than the sum of
+`notmuch-show-citation-lines-prefix' and
+`notmuch-show-citation-lines-suffix', show that, otherwise
+collapse remaining lines into a button.")
+
+(defvar notmuch-show-citation-lines-suffix 3
+  "Always show at least this many lines at the end of a citation.
+
+If there is one more line than the sum of
+`notmuch-show-citation-lines-prefix' and
+`notmuch-show-citation-lines-suffix', show that, otherwise
+collapse remaining lines into a button.")
 
 (defvar notmuch-show-message-begin-regexp    "\fmessage{")
 (defvar notmuch-show-message-end-regexp      "\fmessage}")
@@ -679,29 +689,35 @@ is what to put on the button."
       (let* ((cite-start (match-beginning 0))
             (cite-end  (match-end 0))
             (cite-lines (count-lines cite-start cite-end)))
-       (when (> cite-lines (1+ notmuch-show-citation-lines-prefix))
+       (overlay-put (make-overlay cite-start cite-end) 'face 'message-cited-text-face)
+       (when (> cite-lines (1+ (+ notmuch-show-citation-lines-prefix notmuch-show-citation-lines-suffix)))
          (goto-char cite-start)
          (forward-line notmuch-show-citation-lines-prefix)
-         (notmuch-show-region-to-button
-          (point) cite-end
-          "citation"
-          indent
-          (format notmuch-show-citation-button-format
-                  (- cite-lines notmuch-show-citation-lines-prefix))
-          ))))
+         (let ((hidden-start (point)))
+           (goto-char cite-end)
+           (forward-line (- notmuch-show-citation-lines-suffix))
+           (notmuch-show-region-to-button
+            hidden-start (point)
+            "citation"
+            indent
+            (format notmuch-show-citation-button-format
+                    (- cite-lines notmuch-show-citation-lines-prefix notmuch-show-citation-lines-suffix))
+            )))))
     (if (and (< (point) end)
             (re-search-forward signature-regexp end t))
        (let* ((sig-start (match-beginning 0))
               (sig-end (match-end 0))
               (sig-lines (1- (count-lines sig-start end))))
          (if (<= sig-lines notmuch-show-signature-lines-max)
-             (notmuch-show-region-to-button
-              sig-start
-              end
-              "signature"
-              indent
-              (format notmuch-show-signature-button-format sig-lines)
-              ))))))
+             (progn
+               (overlay-put (make-overlay sig-start end) 'face 'message-cited-text-face)
+               (notmuch-show-region-to-button
+                sig-start
+                end
+                "signature"
+                indent
+                (format notmuch-show-signature-button-format sig-lines)
+                )))))))
 
 (defun notmuch-show-markup-part (beg end depth)
   (if (re-search-forward notmuch-show-part-begin-regexp nil t)
@@ -959,17 +975,26 @@ All currently available key bindings:
          (lambda()
            (hl-line-mode 1) ))
 
-(defun notmuch-show (thread-id &optional parent-buffer query-context)
+(defun notmuch-show (thread-id &optional parent-buffer query-context buffer-name)
   "Run \"notmuch show\" with the given thread ID and display results.
 
 The optional PARENT-BUFFER is the notmuch-search buffer from
 which this notmuch-show command was executed, (so that the next
 thread from that buffer can be show when done with this one).
 
-The optional QUERY-CONTEXT is a notmuch search term. Only messages from the thread
-matching this search term are shown if non-nil. "
+The optional QUERY-CONTEXT is a notmuch search term. Only
+messages from the thread matching this search term are shown if
+non-nil.
+
+The optional BUFFER-NAME provides the name of the buffer in which
+the message thread is shown. If it is nil (which occurs when the
+command is called interactively) the argument to the function is
+used."
   (interactive "sNotmuch show: ")
-  (let ((buffer (get-buffer-create (concat "*notmuch-show-" thread-id "*"))))
+  (when (null buffer-name)
+    (setq buffer-name (concat "*notmuch-" thread-id "*")))
+  (let* ((thread-buffer-name (generate-new-buffer-name buffer-name))
+        (buffer (get-buffer-create thread-buffer-name)))
     (switch-to-buffer buffer)
     (notmuch-show-mode)
     (set (make-local-variable 'notmuch-show-parent-buffer) parent-buffer)
@@ -981,8 +1006,10 @@ matching this search term are shown if non-nil. "
       (erase-buffer)
       (goto-char (point-min))
       (save-excursion
-       (let* ((basic-args (list notmuch-command nil t nil "show" "--entire-thread" thread-id))
-               (args (if query-context (append basic-args (list "and (" query-context ")")) basic-args)))
+       (let* ((basic-args (list notmuch-command nil t nil "show" "--entire-thread" "\'" thread-id))
+               (args (if query-context
+                         (append basic-args (list "and (" query-context ")\'"))
+                       (append basic-args (list "\'")))))
          (apply 'call-process args)
          (when (and (eq (buffer-size) 0) query-context)
            (apply 'call-process basic-args)))