emacs-diffs
[Top][All Lists]
Advanced

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

feature/fix-the-long-lines-display-bug e31cffb5ab: Revert commits 9ea953


From: Gregory Heytings
Subject: feature/fix-the-long-lines-display-bug e31cffb5ab: Revert commits 9ea9533f17, c0c4600ece, 7b19ce51fc, 051d2a1e36 and eb6d2fb58d.
Date: Fri, 8 Jul 2022 17:32:34 -0400 (EDT)

branch: feature/fix-the-long-lines-display-bug
commit e31cffb5abfe68b62047532765a2076ac4885475
Author: Gregory Heytings <gregory@heytings.org>
Commit: Gregory Heytings <gregory@heytings.org>

    Revert commits 9ea9533f17, c0c4600ece, 7b19ce51fc, 051d2a1e36 and 
eb6d2fb58d.
---
 doc/emacs/display.texi | 20 +++++---------------
 etc/NEWS               | 13 ++++---------
 lisp/files.el          | 37 +++++++++++--------------------------
 lisp/font-lock.el      |  5 -----
 lisp/isearch.el        |  5 +----
 src/buffer.h           | 16 ----------------
 src/window.c           |  5 -----
 src/xdisp.c            | 25 ++++++-------------------
 8 files changed, 27 insertions(+), 99 deletions(-)

diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index feb4675b32..9fe9533e88 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -474,10 +474,9 @@ it.  @xref{Disabling}.
 @vindex auto-narrow-long-line-threshold
 @vindex auto-narrow-display-length
 @vindex auto-narrow-widen-automatically
-@vindex auto-narrow-hook
 
   When a file with extremely long lines is opened or inserted in a
-buffer, Emacs automatically enters Auto-Narrow mode, and the word
+buffer, Emacs automatically enters auto-narrow mode, and the word
 @samp{Auto-Narrow} appears in the mode line.  This means that Emacs
 restricts display, but not editing, to a portion of the buffer above
 and below point.  All editing commands, including narrowing commands,
@@ -486,21 +485,12 @@ remain available, and they act on the whole buffer.  For 
example,
 happen with ordinary narrowing, to the end of the portion of the
 buffer to which display is currently restricted.
 
-  The behavior of Auto-Narrow mode is controlled by four variables:
+  The behavior of auto-narrow mode is controlled by three variables:
 @code{auto-narrow-long-line-threshold} is the line length above which
-Auto-Narrow move is entered, @code{auto-narrow-display-length} is the
-number of characters to which display is restricted,
+auto-narrow move is entered, @code{auto-narrow-display-length} is the
+number of characters to which display is restricted, and
 @code{auto-narrow-widen-automatically} is a list of commands for which
-display is widened before they are executed, and
-@code{auto-narrow-hook} is a list of functions that are called when
-Auto-Narrow mode is entered.  By default, Font Lock mode is disabled
-in Auto-Narrow mode.
-
-  If you still experience slowdowns while editing a file when
-Auto-Narrow mode is enabled, this is not due to Emacs itself, but to
-the current major mode or one of the enabled minor modes, and you
-should open the file with @kbd{M-x find-file-literally} instead of
-@kbd{C-x C-f}.
+display is widened before they are executed.
 
 @node View Mode
 @section View Mode
diff --git a/etc/NEWS b/etc/NEWS
index 3df1fb9c4e..51d31bcf17 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -905,15 +905,10 @@ automatically enters auto-narrow mode.  This means that 
Emacs
 restricts display, but not editing, to a portion of the buffer above
 and below point.  All editing commands, including narrowing commands,
 remain available, and they act on the whole buffer.  The behavior of
-that mode is controlled by four variables:
-auto-narrow-long-line-threshold, auto-narrow-display-length,
-auto-narrow-widen-automatically and auto-narrow-hook (which by default
-disables font-lock-mode).  To disable that feature, set
-auto-narrow-long-line-threshold to nil in your init file.  If you
-still experience slowdowns while editing a file in auto-narrow mode,
-this is due to the current major mode or one of the enabled minor
-modes: you should open the file with M-x find-file-literally instead
-of C-x C-f.
+that mode is controlled by three variables:
+auto-narrow-long-line-threshold, auto-narrow-display-length and
+auto-narrow-widen-automatically.  To disable that feature, set
+auto-narrow-long-line-threshold to nil in your init file.
 
 ---
 ** 'zap-to-char' and 'zap-up-to-char' are case-sensitive for upper-case chars.
diff --git a/lisp/files.el b/lisp/files.el
index 9d7273cb1c..0e6f1a935d 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2692,9 +2692,9 @@ the file contents into it using 
`insert-file-contents-literally'."
   "Number of characters to which display is restricted in `auto-narrow-mode'.
 
 When `auto-narrow-mode' is in effect, the number of characters
-displayed above and below point is at least one third and at most
-two thirds of `auto-narrow-display-line-length', except at the
-beginning and end of the buffer."
+displayed above and below point is one third of
+`auto-narrow-display-line-length', except at the beginning and
+end of the buffer."
   :group 'files
   :group 'find-file
   :version "29.1"
@@ -2706,40 +2706,30 @@ beginning and end of the buffer."
      beginning-of-buffer end-of-buffer goto-char goto-line
      mark-sexp mark-defun mark-paragraph mark-whole-buffer mark-page
      exchange-point-and-mark pop-global-mark set-mark-command jump-to-register
-     bookmark-jump undo)
+     bookmark-jump)
   "Commands for which display is automatically widened in `auto-narrow-mode'."
   :group 'files
   :group 'find-file
   :version "29.1"
   :type '(repeat function))
 
-(defcustom auto-narrow-hook '(turn-off-font-lock-mode)
-  "List of functions to be called when `auto-narrow-mode' is entered."
-  :group 'find-file
-  :type 'hook
-  :version "29.1"
-  :type '(repeat function))
-
 (defvar-local auto-narrow--widen-automatically nil
   "Internal variable used by `auto-narrow-mode'.")
 
 (defvar-local auto-narrow--isearch-widen-automatically nil
   "Internal variable used by `auto-narrow-mode'.")
 
-(defvar-local auto-narrow--isearch-lazy-highlight nil
-  "Internal variable used by `auto-narrow-mode'.")
-
-(defun auto-narrow--reset-isearch-lazy-highlight ()
-  "Internal function used by `auto-narrow-mode'."
-  (when auto-narrow-mode
-    (setq-local isearch-lazy-highlight auto-narrow--isearch-lazy-highlight)))
-
 (defvar-local auto-narrow--initialized nil
   "Internal variable used by `auto-narrow-mode'.")
 
 (defun auto-narrow-pre-command-function ()
   "Conditionally widen display when `auto-narrow-mode' is in effect."
   (when auto-narrow-mode
+    (unless auto-narrow--initialized
+      (setq auto-narrow--widen-automatically widen-automatically
+            auto-narrow--isearch-widen-automatically 
isearch-widen-automatically
+            auto-narrow--narrowing-state 'auto
+            auto-narrow--initialized t))
     (setq-local widen-automatically t
                 isearch-widen-automatically t)
     (if (memq this-command '(narrow-to-region narrow-to-defun narrow-to-page))
@@ -2757,13 +2747,7 @@ beginning and end of the buffer."
   (when (and auto-narrow-mode
              (not (eq auto-narrow--narrowing-state 'explicit)))
     (unless auto-narrow--initialized
-      (run-hooks 'auto-narrow-hook)
-      (add-hook 'isearch-mode-end-hook 
#'auto-narrow--reset-isearch-lazy-highlight)
-      (setq auto-narrow--widen-automatically widen-automatically
-            auto-narrow--isearch-widen-automatically 
isearch-widen-automatically
-            auto-narrow--isearch-lazy-highlight isearch-lazy-highlight
-            auto-narrow--narrowing-state 'auto
-            auto-narrow--initialized t))
+      (setq auto-narrow--narrowing-state 'auto))
     (let (point cur-point-min buf-point-min buf-point-max size)
       (setq point (point) cur-point-min (point-min)
             size (/ auto-narrow-display-length 3))
@@ -2793,6 +2777,7 @@ in a buffer.  It restricts display, but not editing, to
 executing any of the commands listed in `auto-narrow-widen-automatically'."
   :group 'files
   :version "29.1"
+  :after-hook (progn (put 'auto-narrow-mode 'permanent-local t))
   (if auto-narrow-mode
       (auto-narrow-post-command-function)
     (when (not (eq auto-narrow--narrowing-state 'explicit))
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index 0c30173d9a..206879b169 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -2045,11 +2045,6 @@ Sets various variables using `font-lock-defaults' and
        (setq font-lock-keywords
               (font-lock-compile-keywords font-lock-keywords))))
     (font-lock-flush)))
-
-(defun turn-off-font-lock-mode ()
-  "Unconditionally turn off `font-lock-mode'."
-  (interactive)
-  (font-lock-mode -1))
 
 ;;; Color etc. support.
 
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 29036201ad..a6e034df6b 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -3658,10 +3658,7 @@ Optional third argument, if t, means if fail just return 
nil (no error).
                (isearch-search-string isearch-string nil t))
           (if (and (not isearch-success) (buffer-narrowed-p)
                    isearch-widen-automatically widen-automatically)
-              (progn
-                (when auto-narrow-mode
-                  (setq-local isearch-lazy-highlight nil))
-                (widen))
+              (widen)
            ;; Clear RETRY unless the search predicate says
            ;; to skip this search hit.
            (if (or (not isearch-success)
diff --git a/src/buffer.h b/src/buffer.h
index 84492737b0..19faa844e0 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -1120,28 +1120,12 @@ BUFFER_CHECK_INDIRECTION (struct buffer *b)
     }
 }
 
-/* Check the state of auto-narrowed buffers.  */
-
-INLINE bool
-BUFFER_NEEDS_AUTO_NARROWING_P (struct buffer *b)
-{
-  return EQ (BVAR (b, auto_narrow__narrowing_state), Qneeded);
-}
-
 INLINE bool
 BUFFER_AUTO_NARROWED_P (struct buffer *b)
 {
   return EQ (BVAR (b, auto_narrow__narrowing_state), Qauto);
 }
 
-INLINE bool
-BUFFER_AUTO_NARROWED_NON_NARROWED_P (struct buffer *b)
-{
-  return BUFFER_AUTO_NARROWED_P (b)
-    && BUF_BEG (b) == BUF_BEGV (b)
-    && BUF_Z (b) == BUF_ZV (b);
-}
-
 /* This structure holds the default values of the buffer-local variables
    that have special slots in each buffer.
    The default value occupies the same slot in this structure
diff --git a/src/window.c b/src/window.c
index 218b3e6a4f..af463b90ce 100644
--- a/src/window.c
+++ b/src/window.c
@@ -6557,11 +6557,6 @@ and redisplay normally--don't erase and redraw the 
frame.  */)
   if (buf != current_buffer)
     error ("`recenter'ing a window that does not display current-buffer.");
 
-  /* Refuse to recenter auto-narrowed buffers that are not actually narrowed,
-     as this can be very slow.  */
-  if (BUFFER_AUTO_NARROWED_NON_NARROWED_P (buf))
-    return Qnil;
-
   /* If redisplay is suppressed due to an error, try again.  */
   buf->display_error_modiff = 0;
 
diff --git a/src/xdisp.c b/src/xdisp.c
index a583e10252..be51a0eb13 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -18872,32 +18872,19 @@ set_vertical_scroll_bar (struct window *w)
          && NILP (echo_area_buffer[0])))
     {
       struct buffer *buf = XBUFFER (w->contents);
-      ptrdiff_t window_end_pos = w->window_end_pos;
-
-      /* If w->window_end_pos cannot be trusted, recompute it "the
-        hard way".  */
-      if (!w->window_end_valid)
-       {
-         struct it it;
-         struct text_pos start_pos;
-
-         SET_TEXT_POS_FROM_MARKER (start_pos, w->start);
-         start_display (&it, w, start_pos);
-         move_it_to (&it, -1, it.last_visible_x, window_box_height (w), -1,
-                     MOVE_TO_X | MOVE_TO_Y);
-         window_end_pos = BUF_Z (buf) - IT_CHARPOS (it);
-       }
-      if (! BUFFER_AUTO_NARROWED_P (buf))
+      if (! BUFFER_AUTO_NARROWED_P (current_buffer))
        {
          whole = BUF_ZV (buf) - BUF_BEGV (buf);
          start = marker_position (w->start) - BUF_BEGV (buf);
-         end = BUF_Z (buf) - window_end_pos - BUF_BEGV (buf);
+         /* I don't think this is guaranteed to be right.  For the
+            moment, we'll pretend it is.  */
+         end = BUF_Z (buf) - w->window_end_pos - BUF_BEGV (buf);
        }
       else
        {
          whole = BUF_Z (buf) - BUF_BEG (buf);
          start = marker_position (w->start) - BUF_BEG (buf);
-         end = BUF_Z (buf) - window_end_pos - BUF_BEG (buf);
+         end = BUF_Z (buf) - w->window_end_pos - BUF_BEG (buf);
        }
 
       if (end < start)
@@ -19155,7 +19142,7 @@ redisplay_window (Lisp_Object window, bool 
just_this_one_p)
      variables.  */
   set_buffer_internal_1 (XBUFFER (w->contents));
 
-  if (BUFFER_NEEDS_AUTO_NARROWING_P (current_buffer))
+  if (EQ (BVAR (current_buffer, auto_narrow__narrowing_state), Qneeded))
     {
       safe_call (1, Qauto_narrow_mode);
       /* Normally set by auto-narrow-mode, set it here anyway as a safety 
measure.  */



reply via email to

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