diff options
Diffstat (limited to 'src/window.c')
-rw-r--r-- | src/window.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/window.c b/src/window.c index 7c2b3ca29d2..0b766649b17 100644 --- a/src/window.c +++ b/src/window.c @@ -4869,11 +4869,16 @@ window_internal_height (struct window *w) static void window_scroll (Lisp_Object window, EMACS_INT n, bool whole, int noerror) { + ptrdiff_t count = SPECPDL_INDEX (); + immediate_quit = 1; n = clip_to_bounds (INT_MIN, n, INT_MAX); wset_redisplay (XWINDOW (window)); + if (whole && Vfast_but_imprecise_scrolling) + specbind (Qfontification_functions, Qnil); + /* If we must, use the pixel-based version which is much slower than the line-based one but can handle varying line heights. */ if (FRAME_WINDOW_P (XFRAME (XWINDOW (window)->frame))) @@ -4881,6 +4886,8 @@ window_scroll (Lisp_Object window, EMACS_INT n, bool whole, int noerror) else window_scroll_line_based (window, n, whole, noerror); + unbind_to (count, Qnil); + /* Bug#15957. */ XWINDOW (window)->window_end_valid = 0; immediate_quit = 0; @@ -7478,6 +7485,17 @@ frame's character size, at least one window may get resized pixelwise even if this option is nil. */); window_resize_pixelwise = 0; + DEFVAR_BOOL ("fast-but-imprecise-scrolling", + Vfast_but_imprecise_scrolling, + doc: /* When non-nil, accelerate scrolling operations. +This comes into play when scrolling rapidly over previously +unfontified buffer regions. Only those portions of the buffer which +are actually going to be displayed get fontified. + +Note that this optimization can cause the portion of the buffer +displayed after a scrolling operation to be somewhat inaccurate. */); + Vfast_but_imprecise_scrolling = 0; + defsubr (&Sselected_window); defsubr (&Sminibuffer_window); defsubr (&Swindow_minibuffer_p); |