[PATCH v1 1/1] emacs: Kill the stderr buffer when an async process completes
David Edmondson
dme at dme.org
Sat Aug 25 04:59:19 PDT 2018
This failure mode is very annoying. Could I persuade someone to review
the proposed change?
On Thursday, 2018-08-09 at 21:54:34 +01, David Edmondson wrote:
> On some platforms (e.g. macOS), it is necessary to add a real sentinel
> process for the error buffer used by `notmuch-start-notmuch' rather
> than a no-op sentinel.
> ---
> emacs/notmuch-lib.el | 19 +++++++++++++------
> 1 file changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
> index a7e02710..03c966b7 100644
> --- a/emacs/notmuch-lib.el
> +++ b/emacs/notmuch-lib.el
> @@ -909,7 +909,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 +926,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 +992,14 @@ 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))
> + (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)
> --
> 2.17.1 (Apple Git-112)
dme.
--
In heaven there is no beer, that's why we drink it here.
More information about the notmuch
mailing list