[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");