X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=emacstips.mdwn;h=552fe3157ddf11e4f78954f8228c778577f2b5f0;hb=b7174eac02828bf63459d533a3e77c81d9fb563e;hp=a90911c3e789933bd41445652f44573a7e0e620d;hpb=6eaa615a3f9f2eb42c6646aac6f64b7a37e040c8;p=notmuch-wiki diff --git a/emacstips.mdwn b/emacstips.mdwn index a90911c..552fe31 100644 --- a/emacstips.mdwn +++ b/emacstips.mdwn @@ -174,62 +174,39 @@ case you want this behaviour: ## Add a key binding to add/remove/toggle a tag -The `notmuch-{search,show}-{add,remove}-tag` functions are very useful -for making quick tag key bindings. For instance, here's an example -of how to make a key binding to add the "spam" tag and remove the -"inbox" tag in notmuch-show-mode: - -In notmuch versions up to 0.11.x - - (define-key notmuch-show-mode-map "S" - (lambda () - "mark message as spam" - (interactive) - (notmuch-show-add-tag "spam") - (notmuch-show-remove-tag "inbox"))) - -Starting from notmuch 0.12 the functions `notmuch-show-add-tag` and -`notmuch-show-remove-tag` have changed to be more versatile and lost -noninteractive use. When upgrading to 0.12 the above needs to be -changed to this: +The `notmuch-{search,show,tree}-tag` functions are very useful for +making quick tag key bindings. The arguments to these functions have +changed as notmuch has evolved but the following should work on all +versions of notmuch 0.13 and later. These functions take a list of +tag changes as argument. For example, an argument of (list "+spam" +"-inbox) adds the tag spam and deletes the tag inbox. Note the +argument must be a list even if there is only a single tag change +e.g., use (list "+deleted") to add the deleted tag. + +For instance, here's an example of how to make a key binding to add +the "spam" tag and remove the "inbox" tag in notmuch-show-mode: (define-key notmuch-show-mode-map "S" (lambda () "mark message as spam" (interactive) - (notmuch-show-tag-message "+spam" "-inbox"))) + (notmuch-show-tag (list "+spam" "-inbox")))) You can do the same for threads in `notmuch-search-mode` by just -replacing "show" with "search" in the called functions. - -Starting from notmuch 0.12 use `notmuch-search-tag-thread` instead: - - (define-key notmuch-search-mode-map "S" - (lambda () - "mark messages in thread as spam" - (interactive) - (notmuch-show-tag-thread "+spam" "-inbox"))) - -Starting from notmuch 0.13 use `notmuch-search-tag` -- it has a little -different usage syntax: +replacing "show" with "search" in the keymap and called functions, or +for messages in `notmuch-tree-mode` by replacing "show" by "tree". If +you want to tag a whole thread in `notmuch-tree-mode` use +`notmuch-tree-tag-thread` instead of `notmuch-tree-tag`. - (define-key notmuch-search-mode-map "S" - (lambda () - "mark messages in thread as spam" - (interactive) - (notmuch-search-tag '("+spam" "-inbox")))) - -The definition above makes use of a lambda function, but you could +The definitions above make use of a lambda function, but you could also define a separate function first: (defun notmuch-show-tag-spam () "mark message as spam" (interactive) - (notmuch-show-add-tag "spam") - (notmuch-show-remove-tag "inbox"))) - (define-key notmuch-show-mode-map "S" 'notmuch-show-tag-spam) + (notmuch-show-add-tag (list "+spam" "-inbox"))) -(See above for analogy how to apply this for notmuch 0.12 and later) + (define-key notmuch-show-mode-map "S" 'notmuch-show-tag-spam) Here's a more complicated example of how to add a toggle "deleted" key: @@ -239,18 +216,8 @@ key: "toggle deleted tag for message" (interactive) (if (member "deleted" (notmuch-show-get-tags)) - (notmuch-show-remove-tag "deleted") - (notmuch-show-add-tag "deleted")))) - -And version for notmuch 0.12 - - (define-key notmuch-show-mode-map "d" - (lambda () - "toggle deleted tag for message" - (interactive) - (notmuch-show-tag-message - (if (member "deleted" (notmuch-show-get-tags)) - "-deleted" "+deleted")))) + (notmuch-show-tag (list "-deleted")) + (notmuch-show-tag (list "+deleted"))))) ## Adding many tagging keybindings @@ -765,3 +732,33 @@ Then In general it is nice to have a key for org-links (not just for notmuch). For example (define-key global-map "\C-cl" 'org-store-link) + +## Viewing diffs in notmuch + +The following code allows you to view an inline patch in diff-mode +directly from notmuch. This means that normal diff-mode commands like +refine, next hunk etc all work. + + (defun my-notmuch-show-view-as-patch () + "View the the current message as a patch." + (interactive) + (let* ((id (notmuch-show-get-message-id)) + (subject (concat "Subject: " (notmuch-show-get-subject) "\n")) + (diff-default-read-only t) + (buf (get-buffer-create (concat "*notmuch-patch-" id "*"))) + (map (make-sparse-keymap))) + (define-key map "q" 'notmuch-kill-this-buffer) + (switch-to-buffer buf) + (let ((inhibit-read-only t)) + (erase-buffer) + (insert subject) + (insert (notmuch-get-bodypart-internal id 1 nil))) + (set-buffer-modified-p nil) + (diff-mode) + (lexical-let ((new-ro-bind (cons 'buffer-read-only map))) + (add-to-list 'minor-mode-overriding-map-alist new-ro-bind)) + (goto-char (point-min)))) + +and then this function needs to bound into the keymap with something like + + (define-key 'notmuch-show-mode-map "D" 'my-notmuch-show-view-as-patch)