X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=emacs%2Fnotmuch-lib.el;h=546ab6fda41f654e8e64d1a85408f64fc6f78ffe;hp=010be454e77420c2f945fdfc3a7895283a8d7209;hb=6682b4e686b7972883626c9b0f941ae4bf02dedb;hpb=43668950626f347f05aad7d49cd9ea4383030443 diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el index 010be454..546ab6fd 100644 --- a/emacs/notmuch-lib.el +++ b/emacs/notmuch-lib.el @@ -155,6 +155,7 @@ For example, if you wanted to remove an \"inbox\" tag and add an (define-key map "s" 'notmuch-search) (define-key map "z" 'notmuch-tree) (define-key map "m" 'notmuch-mua-new-mail) + (define-key map "g" 'notmuch-refresh-this-buffer) (define-key map "=" 'notmuch-refresh-this-buffer) (define-key map (kbd "M-=") 'notmuch-refresh-all-buffers) (define-key map "G" 'notmuch-poll-and-refresh-this-buffer) @@ -297,7 +298,7 @@ This is basically just `format-kbd-macro' but we also convert ESC to M-." "Prepend cons cells describing prefix-arg ACTUAL-KEY and ACTUAL-KEY to TAIL It does not prepend if ACTUAL-KEY is already listed in TAIL." - (let ((key-string (concat prefix (format-kbd-macro actual-key)))) + (let ((key-string (concat prefix (key-description actual-key)))) ;; We don't include documentation if the key-binding is ;; over-ridden. Note, over-riding a binding automatically hides the ;; prefixed version too. @@ -312,7 +313,7 @@ It does not prepend if ACTUAL-KEY is already listed in TAIL." ;; Documentation for command (push (cons key-string (or (and (symbolp binding) (get binding 'notmuch-doc)) - (notmuch-documentation-first-line binding))) + (and (functionp binding) (notmuch-documentation-first-line binding)))) tail))) tail) @@ -593,7 +594,7 @@ the given type." (set-buffer-multibyte nil)) (let ((args `("show" "--format=raw" ,(format "--part=%s" (plist-get part :id)) - ,@(when process-crypto '("--decrypt")) + ,@(when process-crypto '("--decrypt=true")) ,(notmuch-id-to-query (plist-get msg :id)))) (coding-system-for-read (if binaryp 'no-conversion @@ -909,7 +910,7 @@ invoke `set-process-sentinel' directly on the returned process, as that will interfere with the handling of stderr and the exit status." - (let (err-file err-buffer proc + (let (err-file err-buffer proc err-proc ;; Find notmuch using Emacs' `exec-path' (command (or (executable-find notmuch-command) (error "Command not found: %s" notmuch-command)))) @@ -926,11 +927,13 @@ status." :buffer buffer :command (cons command args) :connection-type 'pipe - :stderr err-buffer)) + :stderr err-buffer) + err-proc (get-buffer-process err-buffer)) (process-put proc 'err-buffer err-buffer) - ;; Silence "Process NAME stderr finished" in stderr by adding a - ;; no-op sentinel to the fake stderr process object - (set-process-sentinel (get-buffer-process err-buffer) #'ignore)) + + (process-put err-proc 'err-file err-file) + (process-put err-proc 'err-buffer err-buffer) + (set-process-sentinel err-proc #'notmuch-start-notmuch-error-sentinel)) ;; On Emacs versions before 25, there is no way to capture ;; stdout and stderr separately for asynchronous processes, or @@ -990,9 +993,16 @@ status." ;; Emacs behaves strangely if an error escapes from a sentinel, ;; so turn errors into messages. (message "%s" (error-message-string err)))) - (when err-buffer (kill-buffer err-buffer)) (when err-file (ignore-errors (delete-file err-file))))) +(defun notmuch-start-notmuch-error-sentinel (proc event) + (let* ((err-file (process-get proc 'err-file)) + ;; When `make-process' is available, use the error buffer + ;; associated with the process, otherwise the error file. + (err-buffer (or (process-get proc 'err-buffer) + (find-file-noselect err-file)))) + (when err-buffer (kill-buffer err-buffer)))) + ;; This variable is used only buffer local, but it needs to be ;; declared globally first to avoid compiler warnings. (defvar notmuch-show-process-crypto nil)