]> 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-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}")
 
 (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)))
       (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)
          (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)
     (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)
 
 (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) ))
 
          (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).
 
   "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: ")
   (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)
     (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
       (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)))
          (apply 'call-process args)
          (when (and (eq (buffer-size) 0) query-context)
            (apply 'call-process basic-args)))