aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2021-01-04 00:59:56 -0500
committerStefan Monnier2021-01-04 00:59:56 -0500
commitb2f8c9f96fbda53387b9f910d3b97aefefab6cab (patch)
tree91542a66e8b88ea56a80bc6347f11963eb1a3f4c
parent0c599ee2e2c3fcebcab023cc9d52c9a6464b391c (diff)
downloademacs-b2f8c9f96fbda53387b9f910d3b97aefefab6cab.tar.gz
emacs-b2f8c9f96fbda53387b9f910d3b97aefefab6cab.zip
* src/xdisp.c (syms_of_xdisp): New var redisplay-skip-fontification-on-input
(handle_fontified_prop): Use it. * src/keyboard.h (input_was_pending): Declare. * src/keyboard.c (input_was_pending): Make non-static.
-rw-r--r--etc/NEWS6
-rw-r--r--src/keyboard.c2
-rw-r--r--src/keyboard.h2
-rw-r--r--src/xdisp.c14
4 files changed, 22 insertions, 2 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 8003175a83a..d8f25ab362e 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -212,6 +212,12 @@ This makes debugging Emacs Lisp scripts run in batch mode easier. To
212get back the old behavior, set the new variable 212get back the old behavior, set the new variable
213'backtrace-on-error-noninteractive' to a nil value. 213'backtrace-on-error-noninteractive' to a nil value.
214 214
215** 'redisplay-skip-fontification-on-input' helps Emacs keep up with fast input.
216This is another attempt to solve the problem of handling high key repeat rate
217and other "slow scrolling" situations. It is hoped it behaves better
218than 'fast-but-imprecise-scrolling' and 'jit-lock-defer-time'.
219It is not enabled by default.
220
215 221
216* Editing Changes in Emacs 28.1 222* Editing Changes in Emacs 28.1
217 223
diff --git a/src/keyboard.c b/src/keyboard.c
index d2f0cb405f0..cf15cd73572 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -285,7 +285,7 @@ bool input_pending;
285 with the input rate, but if it can keep up just enough that there's no 285 with the input rate, but if it can keep up just enough that there's no
286 input_pending when we begin the command, then redisplay is not skipped 286 input_pending when we begin the command, then redisplay is not skipped
287 which results in better feedback to the user. */ 287 which results in better feedback to the user. */
288static bool input_was_pending; 288bool input_was_pending;
289 289
290/* Circular buffer for pre-read keyboard input. */ 290/* Circular buffer for pre-read keyboard input. */
291 291
diff --git a/src/keyboard.h b/src/keyboard.h
index 91c6f4604f9..8bdffaa2bff 100644
--- a/src/keyboard.h
+++ b/src/keyboard.h
@@ -432,7 +432,7 @@ extern int parse_solitary_modifier (Lisp_Object symbol);
432extern Lisp_Object real_this_command; 432extern Lisp_Object real_this_command;
433 433
434extern int quit_char; 434extern int quit_char;
435 435extern bool input_was_pending;
436extern unsigned int timers_run; 436extern unsigned int timers_run;
437 437
438extern bool menu_separator_name_p (const char *); 438extern bool menu_separator_name_p (const char *);
diff --git a/src/xdisp.c b/src/xdisp.c
index 749893baad6..43447e2bf7e 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -4262,6 +4262,7 @@ handle_fontified_prop (struct it *it)
4262 if (!STRINGP (it->string) 4262 if (!STRINGP (it->string)
4263 && it->s == NULL 4263 && it->s == NULL
4264 && !NILP (Vfontification_functions) 4264 && !NILP (Vfontification_functions)
4265 && !(input_was_pending && redisplay_skip_fontification_on_input)
4265 && !NILP (Vrun_hooks) 4266 && !NILP (Vrun_hooks)
4266 && (pos = make_fixnum (IT_CHARPOS (*it)), 4267 && (pos = make_fixnum (IT_CHARPOS (*it)),
4267 prop = Fget_char_property (pos, Qfontified, Qnil), 4268 prop = Fget_char_property (pos, Qfontified, Qnil),
@@ -35598,6 +35599,19 @@ best except in special circumstances such as running redisplay tests
35598in batch mode. */); 35599in batch mode. */);
35599 redisplay_skip_initial_frame = true; 35600 redisplay_skip_initial_frame = true;
35600 35601
35602 DEFVAR_BOOL ("redisplay-skip-fontification-on-input",
35603 redisplay_skip_fontification_on_input,
35604 doc: /* Skip `fontification_functions` when there is input pending.
35605If non-nil and there was input pending at the beginning of the command,
35606the `fontification_functions` hook is not run. This usually does not
35607affect the display because redisplay is completely skipped anyway if input
35608was pending, but it can make scrolling smoother by avoiding
35609unnecessary fontification.
35610It is similar to `fast-but-imprecise-scrolling' with similar tradeoffs,
35611but with the advantage that it should only affect the behavior when Emacs
35612has trouble keeping up with the incoming input rate. */);
35613 redisplay_skip_fontification_on_input = false;
35614
35601 DEFVAR_BOOL ("redisplay-adhoc-scroll-in-resize-mini-windows", 35615 DEFVAR_BOOL ("redisplay-adhoc-scroll-in-resize-mini-windows",
35602 redisplay_adhoc_scroll_in_resize_mini_windows, 35616 redisplay_adhoc_scroll_in_resize_mini_windows,
35603 doc: /* If nil always use normal scrolling in minibuffer windows. 35617 doc: /* If nil always use normal scrolling in minibuffer windows.