emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master a516ab7 1/2: Add a new variable 'process-error-pause-time'


From: Lars Ingebrigtsen
Subject: master a516ab7 1/2: Add a new variable 'process-error-pause-time'
Date: Thu, 2 Dec 2021 07:22:02 -0500 (EST)

branch: master
commit a516ab79c300517d5c3ab68c45ff9c90bda6c67a
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Add a new variable 'process-error-pause-time'
    
    * doc/lispref/processes.texi (Asynchronous Processes): Document it.
    * lisp/cus-start.el (standard): Customize.
    
    * src/process.c (read_process_output_error_handler)
    (exec_sentinel_error_handler): Use it.
    (syms_of_process): New variable process-error-pause-time (bug#19457).
---
 doc/lispref/processes.texi |  9 +++++++++
 etc/NEWS                   |  4 ++++
 lisp/cus-start.el          |  1 +
 src/process.c              | 12 ++++++++++--
 4 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index 8a9cb2a..ac5d4d1 100644
--- a/doc/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -966,6 +966,15 @@ use the function @code{process-tty-name} (@pxref{Process
 Information}).
 @end defvar
 
+@defvar process-error-pause-time
+If a process sentinel/filter function has an error, Emacs will (by
+default) pause Emacs for @code{process-error-pause-time} seconds after
+displaying this error, so that users will see the error in question.
+However, this can lead to situations where Emacs becomes unresponsive
+(if there's a lot of these errors happening), so this can be disabled
+by setting @code{process-error-pause-time} to 0.
+@end defvar
+
 @node Deleting Processes
 @section Deleting Processes
 @cindex deleting processes
diff --git a/etc/NEWS b/etc/NEWS
index d783fc0..55733c6 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -75,6 +75,10 @@ time.
 
 * Changes in Emacs 29.1
 
+** New user option 'process-error-pause-time'.
+This determines how long to pause Emacs after a process
+filter/sentinel error has been handled.
+
 +++
 ** New face 'variable-pitch-text'.
 This face is like 'variable-pitch' (from which it inherits), but is
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 53cad99..579beae 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -575,6 +575,7 @@ Leaving \"Default\" unchecked is equivalent with specifying 
a default of
              (ns-scroll-event-delta-factor ns float "29.1")
             ;; process.c
             (delete-exited-processes processes-basics boolean)
+             (process-error-pause-time processes-basics integer "29.1")
             ;; syntax.c
             (parse-sexp-ignore-comments editing-basics boolean)
             (words-include-escapes editing-basics boolean)
diff --git a/src/process.c b/src/process.c
index 241ffe9..483da4d 100644
--- a/src/process.c
+++ b/src/process.c
@@ -5994,7 +5994,8 @@ read_process_output_error_handler (Lisp_Object error_val)
   cmd_error_internal (error_val, "error in process filter: ");
   Vinhibit_quit = Qt;
   update_echo_area ();
-  Fsleep_for (make_fixnum (2), Qnil);
+  if (process_error_pause_time > 0)
+    Fsleep_for (make_fixnum (process_error_pause_time), Qnil);
   return Qt;
 }
 
@@ -7421,7 +7422,8 @@ exec_sentinel_error_handler (Lisp_Object error_val)
   cmd_error_internal (error_val, "error in process sentinel: ");
   Vinhibit_quit = Qt;
   update_echo_area ();
-  Fsleep_for (make_fixnum (2), Qnil);
+  if (process_error_pause_time > 0)
+    Fsleep_for (make_fixnum (process_error_pause_time), Qnil);
   return Qt;
 }
 
@@ -8577,6 +8579,12 @@ Enlarge the value only if the subprocess generates very 
large (megabytes)
 amounts of data in one go.  */);
   read_process_output_max = 4096;
 
+  DEFVAR_INT ("process-error-pause-time", process_error_pause_time,
+             doc: /* The number of seconds to pause after handling process 
errors.
+This isn't used for all process-related errors, but is used when a
+sentinel or a process filter function has an error.  */);
+  process_error_pause_time = 1;
+
   DEFSYM (Qinternal_default_interrupt_process,
          "internal-default-interrupt-process");
   DEFSYM (Qinterrupt_process_functions, "interrupt-process-functions");



reply via email to

[Prev in Thread] Current Thread [Next in Thread]