[PATCH v2 0/1] emacs: Kill the stderr buffer when an async process completes

classic Classic list List threaded Threaded
3 messages Options
David Edmondson David Edmondson
Reply | Threaded
Open this post in threaded view
|

[PATCH v2 0/1] emacs: Kill the stderr buffer when an async process completes


emacs: Kill the stderr buffer when an async process completes

v2: Explain the make-process distinction in the error sentinel.


David Edmondson (1):
  emacs: Kill the stderr buffer when an async process completes

 emacs/notmuch-lib.el | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

--
2.17.1 (Apple Git-112)

_______________________________________________
notmuch mailing list
[hidden email]
https://notmuchmail.org/mailman/listinfo/notmuch
David Edmondson David Edmondson
Reply | Threaded
Open this post in threaded view
|

[PATCH v2 1/1] 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.
---
 emacs/notmuch-lib.el | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index a7e02710..25d83fd6 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,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)
--
2.17.1 (Apple Git-112)

_______________________________________________
notmuch mailing list
[hidden email]
https://notmuchmail.org/mailman/listinfo/notmuch
David Bremner-2 David Bremner-2
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH v2 1/1] emacs: Kill the stderr buffer when an async process completes

David Edmondson <[hidden email]> writes:

> 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.

pushed to master,

d
_______________________________________________
notmuch mailing list
[hidden email]
https://notmuchmail.org/mailman/listinfo/notmuch