]> git.eshelyaron.com Git - emacs.git/commitdiff
New feature optionally to accelerate auto-repeated scrolling.
authorAlan Mackenzie <acm@muc.de>
Sun, 14 Dec 2014 18:26:44 +0000 (18:26 +0000)
committerAlan Mackenzie <acm@muc.de>
Sun, 14 Dec 2014 18:26:44 +0000 (18:26 +0000)
src/xdisp.c: Remove "static" from declaration of
Qfontification_functions.

src/window.c (window_scroll): bind fontification-functions to nil when
scrolling by whole screens and fast-but-imprecise-scrolling is non-nil.
(syms_of_window): New DEFVAR_BOOL fast-but-imprecise-scrolling.

src/lisp.h (bool): Declare Qfontification_functions extern.

lisp/cus-start.el (all): Add fast-but-imprecise-scrolling.

doc/emacs/display.texi (Scrolling): fast-but-imprecise-scrolling.
Describe new variable.

etc/NEWS: Add entry for fast-but-imprecise-scrolling.

doc/emacs/ChangeLog
doc/emacs/display.texi
etc/ChangeLog
etc/NEWS
lisp/ChangeLog
lisp/cus-start.el
src/ChangeLog
src/lisp.h
src/window.c
src/xdisp.c

index cd46d9fc474e14eeb9ada0627d243d0a93699f4d..d2f7a345566539e2f738c6100b38598ecf2ff8d0 100644 (file)
@@ -1,3 +1,8 @@
+2014-12-14  Alan Mackenzie  <acm@muc.de>
+
+       * display.texi (Scrolling): fast-but-imprecise-scrolling.
+       Describe new variable.
+
 2014-12-14  Cameron Desautels  <camdez@gmail.com>
 
        * custom.texi (Saving Customizations): Mention
index a5555d58054ab4b199077f867b20ee87931baabb..12a8e1b3eee1958ddff3016997e0e2ca47c474ef 100644 (file)
@@ -127,6 +127,19 @@ the mouse wheel (@pxref{Mouse Commands}); in general, it affects any
 command that has a non-@code{nil} @code{scroll-command} property.
 @xref{Property Lists,,, elisp, The Emacs Lisp Reference Manual}.
 
+@vindex fast-but-imprecise-scrolling
+  Sometimes, particularly when you hold down keys such as @kbd{C-v}
+and @kbd{M-v}, activating keyboard auto-repeat, Emacs fails to keep up
+with the rapid rate of scrolling requested; the display doesn't update
+and Emacs can become unresponsive to input for quite a long time.  You
+can counter this sluggishness by setting the variable
+@code{fast-but-imprecise-scrolling} to a non-@code{nil} value.  This
+instructs the scrolling commands not to fontify (@pxref{Font Lock})
+any unfontified text they scroll over, instead to assume it has the
+default face.  This can cause Emacs to scroll to somewhat wrong buffer
+positions when the faces in use are not all the same size, even with
+single (i.e. without auto-repeat) scrolling operations.
+
 @vindex scroll-up
 @vindex scroll-down
 @findex scroll-up-line
index f344e2437b0e0b1eb9356192054b14236b864ead..0a06cbd5c70f0f261d7389ac4e9480e18021aa42 100644 (file)
@@ -1,3 +1,7 @@
+2014-12-14  Alan Mackenzie  <acm@muc.de>
+
+       * NEWS: Add entry for fast-but-imprecise-scrolling.
+
 2014-12-14  Cameron Desautels  <camdez@gmail.com>
 
        * NEWS: Mention `custom-prompt-customize-unsaved-options'.
index 37cb4b42e52e182efb58e5da9ab81d5544b1fc4b..6b1a4e3627df70f7a36f025ea1101569dc04c1f6 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -153,6 +153,12 @@ name (as returned from, for instance, `file-name-all-completions' is
 a directory file name.  It returns non-nil if the last character in
 the name is a forward slash.
 
++++
+** New variable `fast-but-imprecise-scrolling' inhibits
+fontification during full screen scrolling operations, giving less
+hesitant operation during auto-repeat of C-v, M-v at the cost of
+possible inaccuracies in the end position.
+
 \f
 * Editing Changes in Emacs 25.1
 
index 288589d9e041269736782f8ef296fcbfbf9808fb..8a0d5181bae183916a24e7818bc61c06a9fb397b 100644 (file)
@@ -1,3 +1,7 @@
+2014-12-14  Alan Mackenzie  <acm@muc.de>
+
+       * lisp/cus-start.el (all): Add fast-but-imprecise-scrolling.
+
 2014-12-14  Artur Malabarba  <bruce.connor.am@gmail.com>
 
        * let-alist.el: Add lexical binding.
index 3b8885a8717e240bced42a70df8203914ba13911..4049974841e1c6ffe4ff5a6bcd79565a7fa6b86b 100644 (file)
@@ -460,6 +460,7 @@ since it could result in memory overflow and make Emacs crash."
                              :value display-buffer)
                       (other :tag "Always (t)" :value t))
              "24.3")
+            (fast-but-imprecise-scrolling scrolling boolean "25.1")
             (window-resize-pixelwise windows boolean "24.4")
             ;; xdisp.c
             ;; The whitespace group is for whitespace.el.
index fd56186105b48779f6fbe8b6ff96222f899645af..46bf2801849c0424b2eaa83f896404aca1648c24 100644 (file)
@@ -1,3 +1,18 @@
+2014-12-14  Alan Mackenzie  <acm@muc.de>
+
+       New feature optionally to accelerate auto-repeated scrolling.
+
+       * xdisp.c: Remove "static" from declaration of
+       Qfontification_functions.
+
+       * window.c (window_scroll): bind fontification-functions to nil
+       when scrolling by whole screens and
+       fast-but-imprecise-scrolling is non-nil.
+       (syms_of_window): New DEFVAR_BOOL
+       fast-but-imprecise-scrolling.
+
+       * lisp.h (bool): Declare Qfontification_functions extern.
+
 2014-12-14  Eli Zaretskii  <eliz@gnu.org>
 
        Load system's default trusted Certificate Authorities if available.
index a56c4a73bf875b2269dad58db8531ea1a072f679..37172c6b04950307bf5085b19bcef01b9c01d1ff 100644 (file)
@@ -830,6 +830,7 @@ extern Lisp_Object Qwindowp;
 
 /* Defined in xdisp.c.  */
 extern Lisp_Object Qimage;
+extern Lisp_Object Qfontification_functions;
 \f
 
 /* Extract a value or address from a Lisp_Object.  */
index 7c2b3ca29d20c5a4fea21a286b11d9eb3b4b50c0..0b766649b17c988192db367205173d8d4c927099 100644 (file)
@@ -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);
index f022790023b9e7684e26e70a34bcbb9264e14c0b..48a2979dcde3663322a6ef7e4ffad3a2f212a84b 100644 (file)
@@ -347,7 +347,7 @@ Lisp_Object Qtext;
 /* Holds the list (error).  */
 static Lisp_Object list_of_error;
 
-static Lisp_Object Qfontification_functions;
+Lisp_Object Qfontification_functions;
 
 static Lisp_Object Qwrap_prefix;
 static Lisp_Object Qline_prefix;