mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
emacs: Kill the stderr buffer when an async process completes
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.
This commit is contained in:
parent
fd3c93650d
commit
cfd015bda4
1 changed files with 15 additions and 6 deletions
|
@ -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
|
as that will interfere with the handling of stderr and the exit
|
||||||
status."
|
status."
|
||||||
|
|
||||||
(let (err-file err-buffer proc
|
(let (err-file err-buffer proc err-proc
|
||||||
;; Find notmuch using Emacs' `exec-path'
|
;; Find notmuch using Emacs' `exec-path'
|
||||||
(command (or (executable-find notmuch-command)
|
(command (or (executable-find notmuch-command)
|
||||||
(error "Command not found: %s" notmuch-command))))
|
(error "Command not found: %s" notmuch-command))))
|
||||||
|
@ -926,11 +926,13 @@ status."
|
||||||
:buffer buffer
|
:buffer buffer
|
||||||
:command (cons command args)
|
:command (cons command args)
|
||||||
:connection-type 'pipe
|
:connection-type 'pipe
|
||||||
:stderr err-buffer))
|
:stderr err-buffer)
|
||||||
|
err-proc (get-buffer-process err-buffer))
|
||||||
(process-put proc 'err-buffer 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
|
(process-put err-proc 'err-file err-file)
|
||||||
(set-process-sentinel (get-buffer-process err-buffer) #'ignore))
|
(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
|
;; On Emacs versions before 25, there is no way to capture
|
||||||
;; stdout and stderr separately for asynchronous processes, or
|
;; stdout and stderr separately for asynchronous processes, or
|
||||||
|
@ -990,9 +992,16 @@ status."
|
||||||
;; Emacs behaves strangely if an error escapes from a sentinel,
|
;; Emacs behaves strangely if an error escapes from a sentinel,
|
||||||
;; so turn errors into messages.
|
;; so turn errors into messages.
|
||||||
(message "%s" (error-message-string err))))
|
(message "%s" (error-message-string err))))
|
||||||
(when err-buffer (kill-buffer err-buffer))
|
|
||||||
(when err-file (ignore-errors (delete-file err-file)))))
|
(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
|
;; This variable is used only buffer local, but it needs to be
|
||||||
;; declared globally first to avoid compiler warnings.
|
;; declared globally first to avoid compiler warnings.
|
||||||
(defvar notmuch-show-process-crypto nil)
|
(defvar notmuch-show-process-crypto nil)
|
||||||
|
|
Loading…
Reference in a new issue