]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch.el
emacs: instruct user to autoload notmuch instead of require'ing it
[notmuch] / emacs / notmuch.el
index c9bc2f22c7d43a21598e2c189ef6fe3f0f738f5a..e646aa5ba6143c389a615790896a55b6df44acea 100644 (file)
@@ -36,7 +36,7 @@
 ;;
 ;; Then, to actually run it, add:
 ;;
-;;     (require 'notmuch)
+;;     (autoload 'notmuch "notmuch" "Notmuch mail" t)
 ;;
 ;; to your ~/.emacs file, and then run "M-x notmuch" from within emacs,
 ;; or run:
@@ -165,6 +165,7 @@ To enter a line break in customize, press \\[quoted-insert] C-j."
 (defvar notmuch-search-stash-map
   (let ((map (make-sparse-keymap)))
     (define-key map "i" 'notmuch-search-stash-thread-id)
+    (define-key map "?" 'notmuch-subkeymap-help)
     map)
   "Submap for stash commands")
 (fset 'notmuch-search-stash-map notmuch-search-stash-map)
@@ -648,7 +649,7 @@ foreground and blue background."
          (let ((tag (car elem))
                (attributes (cdr elem)))
            (when (member tag line-tag-list)
-             (notmuch-combine-face-text-property start end attributes))))
+             (notmuch-apply-face nil attributes nil start end))))
        ;; Reverse the list so earlier entries take precedence
        (reverse notmuch-search-line-faces)))
 
@@ -752,24 +753,33 @@ non-authors is found, assume that all of the authors match."
      format-string (notmuch-sanitize (plist-get result :authors))))
 
    ((string-equal field "tags")
-    (let ((tags (plist-get result :tags)))
-      (insert (format format-string (notmuch-tag-format-tags tags)))))))
+    (let ((tags (plist-get result :tags))
+         (orig-tags (plist-get result :orig-tags)))
+      (insert (format format-string (notmuch-tag-format-tags tags orig-tags)))))))
 
-(defun notmuch-search-show-result (result &optional pos)
-  "Insert RESULT at POS or the end of the buffer if POS is null."
+(defun notmuch-search-show-result (result pos)
+  "Insert RESULT at POS."
   ;; Ignore excluded matches
   (unless (= (plist-get result :matched) 0)
-    (let ((beg (or pos (point-max))))
-      (save-excursion
-       (goto-char beg)
-       (dolist (spec notmuch-search-result-format)
-         (notmuch-search-insert-field (car spec) (cdr spec) result))
-       (insert "\n")
-       (notmuch-search-color-line beg (point) (plist-get result :tags))
-       (put-text-property beg (point) 'notmuch-search-result result))
-      (when (string= (plist-get result :thread) notmuch-search-target-thread)
-       (setq notmuch-search-target-thread "found")
-       (goto-char beg)))))
+    (save-excursion
+      (goto-char pos)
+      (dolist (spec notmuch-search-result-format)
+       (notmuch-search-insert-field (car spec) (cdr spec) result))
+      (insert "\n")
+      (notmuch-search-color-line pos (point) (plist-get result :tags))
+      (put-text-property pos (point) 'notmuch-search-result result))))
+
+(defun notmuch-search-append-result (result)
+  "Insert RESULT at the end of the buffer.
+
+This is only called when a result is first inserted so it also
+sets the :orig-tag property."
+  (let ((new-result (plist-put result :orig-tags (plist-get result :tags)))
+       (pos (point-max)))
+    (notmuch-search-show-result new-result pos)
+    (when (string= (plist-get result :thread) notmuch-search-target-thread)
+      (setq notmuch-search-target-thread "found")
+      (goto-char pos))))
 
 (defun notmuch-search-process-filter (proc string)
   "Process and filter the output of \"notmuch search\""
@@ -783,7 +793,7 @@ non-authors is found, assume that all of the authors match."
        (save-excursion
          (goto-char (point-max))
          (insert string))
-       (notmuch-sexp-parse-partial-list 'notmuch-search-show-result
+       (notmuch-sexp-parse-partial-list 'notmuch-search-append-result
                                         results-buf)))))
 
 (defun notmuch-search-tag-all (tag-changes)
@@ -828,7 +838,7 @@ See `notmuch-tag' for information on the format of TAG-CHANGES."
 PROMPT is the string to prompt with."
   (lexical-let
       ((completions
-       (append (list "folder:" "thread:" "id:" "date:" "from:" "to:"
+       (append (list "folder:" "path:" "thread:" "id:" "date:" "from:" "to:"
                      "subject:" "attachment:")
                (mapcar (lambda (tag)
                          (concat "tag:" (notmuch-escape-boolean-term tag)))
@@ -887,6 +897,7 @@ the configured default sort order."
     (set 'notmuch-search-oldest-first oldest-first)
     (set 'notmuch-search-target-thread target-thread)
     (set 'notmuch-search-target-line target-line)
+    (notmuch-tag-clear-cache)
     (let ((proc (get-buffer-process (current-buffer)))
          (inhibit-read-only t))
       (if proc