This commit is contained in:
Gregory Heytings 2022-07-08 23:36:18 +02:00
parent e31cffb5ab
commit 60e51595c8
13 changed files with 108 additions and 328 deletions

View file

@ -19,8 +19,6 @@ the text is displayed.
* Horizontal Scrolling:: Moving text left and right in a window.
* Narrowing:: Restricting display and editing to a portion
of the buffer.
* Auto-Narrowing:: Automatically restrict display to a portion of
the buffer.
* View Mode:: Viewing read-only buffers.
* Follow Mode:: Follow mode lets two windows scroll as one.
* Faces:: How to change the display style using faces.
@ -469,29 +467,6 @@ this command asks for confirmation and gives you the option of enabling it;
if you enable the command, confirmation will no longer be required for
it. @xref{Disabling}.
@node Auto-Narrowing
@findex auto-narrow-mode
@vindex auto-narrow-long-line-threshold
@vindex auto-narrow-display-length
@vindex auto-narrow-widen-automatically
When a file with extremely long lines is opened or inserted in a
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,
remain available, and they act on the whole buffer. For example,
@kbd{M->} moves point to the end of the buffer, and not, as would
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 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, and
@code{auto-narrow-widen-automatically} is a list of commands for which
display is widened before they are executed.
@node View Mode
@section View Mode
@cindex View mode

View file

@ -1190,6 +1190,7 @@ Dealing with Emacs Trouble
* Crashing:: What Emacs does when it crashes.
* After a Crash:: Recovering editing in an Emacs session that crashed.
* Emergency Escape:: What to do if Emacs stops responding.
* Long Lines:: Mitigating slowness due to extremely long lines.
* DEL Does Not Delete:: What to do if @key{DEL} doesn't delete.
Reporting Bugs

View file

@ -158,6 +158,7 @@ Emacs.
* Crashing:: What Emacs does when it crashes.
* After a Crash:: Recovering editing in an Emacs session that crashed.
* Emergency Escape:: What to do if Emacs stops responding.
* Long Lines:: Mitigating slowness due to extremely long lines.
* DEL Does Not Delete:: What to do if @key{DEL} doesn't delete.
@end menu
@ -432,6 +433,64 @@ program.
emergency escape---but there are cases where it won't work, when a
system call hangs or when Emacs is stuck in a tight loop in C code.
@node Long Lines
@subsection Long Lines
@cindex long lines
For a variety of reasons (some of which are fundamental to the Emacs
redisplay code and the complex range of possibilities it handles;
others of which are due to modes and features which do not scale well
in unusual circumstances), Emacs can perform poorly when extremely
long lines are present (where ``extremely long'' usually means at
least many thousands of characters).
@cindex @code{so-long} mode
@findex global-so-long-mode
@vindex so-long-action
A particular problem is that Emacs may ``hang'' for a long time at
the point of visiting a file with extremely long lines. This can be
mitigated by enabling the @file{so-long} library, which detects when a
visited file contains abnormally long lines, and takes steps to
disable features which are liable to cause slowness in that situation.
To enable this library, type @kbd{M-x global-so-long-mode @key{RET}},
or turn on the @code{global-so-long-mode} in your init file
(@pxref{Init File}), or customize the @code{global-so-long-mode}
option. You can tailor this mode's operation by customizing the
variable @code{so-long-action}.
The @file{so-long} library can also significantly improve
performance when moving and editing in a buffer with long lines.
Performance is still likely to degrade as you get deeper into the long
lines, but the improvements from using this library can nevertheless
be substantial.
@findex so-long-commentary
Use @kbd{M-x so-long-commentary} to view the documentation for this
library and learn more about how to enable and configure it.
@vindex max-redisplay-ticks
If even @code{so-long-mode} doesn't help making Emacs responsive
enough, or if you'd rather not disable the display-related features
that @code{so-long-mode} turns off, you can instead customize the
variable @code{max-redisplay-ticks} to a non-zero value. Then Emacs
will abort redisplay of a window and commands, like @kbd{C-n} and
@kbd{M-v}, which use the display code to do their job, if processing a
window needs more low-level display operations than the value of this
variable. The display of the offending window will then remain
outdated, and possibly incomplete, on the screen, but Emacs should
otherwise be responsive, and you could then switch to another buffer,
or kill the problematic buffer, or turn on @code{so-long-mode} or
@code{so-long-minor-mode} in that buffer. When the display of a
window is aborted due to this reason, the buffer shown in that window
will not have any of its windows redisplayed until the buffer is
modified or until you type @kbd{C-l} (@pxref{Recentering}) in one of
that buffer's windows.
If you decide to customize this variable to a non-zero value, we
recommend to use a value between 100,000 and 1,000,000, depending on
your patience and the speed of your system. The default value is
zero, which disables this feature.
@node DEL Does Not Delete
@subsection If @key{DEL} Fails to Delete
@cindex @key{DEL} vs @key{BACKSPACE}

View file

@ -324,6 +324,9 @@ startup. Previously, these functions ignored
* Changes in Emacs 29.1
---
** 'longlines-mode' is no longer obsolete.
+++
** New command to change the font size globally.
To increase the font size, type 'C-x C-M-+' or 'C-x C-M-='; to
@ -898,18 +901,6 @@ Formerly it invoked 'just-one-space'. The actions performed by
'cycle-spacing' and their order can now be customized via the user
option 'cycle-spacing-actions'.
+++
** Emacs is now capable of editing files with arbitarily long lines.
When a file with long lines is opened or inserted in a buffer, Emacs
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 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.
These commands now behave as case-sensitive for interactive calls when

View file

@ -400,14 +400,10 @@ mouse-1: Display minor mode menu\n\
mouse-2: Show help for minor mode\n\
mouse-3: Toggle minor modes"
local-map ,mode-line-minor-mode-keymap)
'(:eval
(if (not (eq auto-narrow--narrowing-state 'auto))
(propertize "%n"
'help-echo "mouse-2: Remove narrowing from buffer"
'mouse-face 'mode-line-highlight
'local-map (make-mode-line-mouse-map
'mouse-2 #'mode-line-widen))
"%n"))
(propertize "%n" 'help-echo "mouse-2: Remove narrowing from buffer"
'mouse-face 'mode-line-highlight
'local-map (make-mode-line-mouse-map
'mouse-2 #'mode-line-widen))
")"
(propertize "%]" 'help-echo recursive-edit-help-echo)
" "))

View file

@ -2688,103 +2688,6 @@ the file contents into it using `insert-file-contents-literally'."
(confirm-nonexistent-file-or-buffer))))
(switch-to-buffer (find-file-noselect filename nil t)))
(defcustom auto-narrow-display-length 30000
"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 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"
:type 'integer)
(defcustom auto-narrow-widen-automatically
'( move-beginning-of-line move-end-of-line backward-sentence forward-sentence
backward-sexp forward-sexp beginning-of-defun end-of-defun
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)
"Commands for which display is automatically widened in `auto-narrow-mode'."
:group 'files
:group 'find-file
: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--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))
(setq auto-narrow--narrowing-state 'explicit
widen-automatically auto-narrow--widen-automatically
isearch-widen-automatically auto-narrow--isearch-widen-automatically))
(if (eq this-command 'widen)
(setq auto-narrow--narrowing-state 'auto))
(when (and (not (eq auto-narrow--narrowing-state 'explicit))
(memq this-command auto-narrow-widen-automatically))
(widen))))
(defun auto-narrow-post-command-function ()
"Update display narrowing when `auto-narrow-mode' is in effect."
(when (and auto-narrow-mode
(not (eq auto-narrow--narrowing-state 'explicit)))
(unless auto-narrow--initialized
(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))
(save-restriction
(widen)
(setq buf-point-min (point-min) buf-point-max (point-max)))
(let* ((pos (* (min (max (/ point size) 1)
(1- (/ buf-point-max size)))
size))
(begin (max (- pos size) buf-point-min))
(end (min (+ begin (* 3 size)) buf-point-max)))
(when (or (not (buffer-narrowed-p))
(not (= begin cur-point-min)))
(narrow-to-region begin end))))))
(setq auto-narrow-long-line-threshold 30000
auto-narrow-pre-command-function #'auto-narrow-pre-command-function
auto-narrow-post-command-function #'auto-narrow-post-command-function)
(define-minor-mode auto-narrow-mode
"Automatically narrow the display of a buffer above and below point.
This mode is automatically entered when a file with one or more lines
longer than `auto-narrow-long-line-threshold' is opened or inserted
in a buffer. It restricts display, but not editing, to
`auto-narrow-display-length' characters. Display is widened before
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))
(widen))
(setq auto-narrow--narrowing-state nil
auto-narrow--initialized nil)))
(defun after-find-file (&optional error warn noauto
_after-find-file-from-revert-buffer
nomodes)

View file

@ -3037,13 +3037,6 @@ search. This option is ignored \(presumed t) when
:type 'boolean
:group 'isearch)
(defcustom isearch-widen-automatically nil
"Whether a narrowed buffer can be widened when isearch fails.
This option has no effect when `widen-automatically' is nil."
:version "29.1"
:type 'boolean
:group 'isearch)
(defun isearch-string-out-of-window (isearch-point)
"Test whether the search string is currently outside of the window.
Return nil if it's completely visible, or if point is visible,
@ -3656,20 +3649,17 @@ Optional third argument, if t, means if fail just return nil (no error).
(while retry
(setq isearch-success
(isearch-search-string isearch-string nil t))
(if (and (not isearch-success) (buffer-narrowed-p)
isearch-widen-automatically widen-automatically)
(widen)
;; Clear RETRY unless the search predicate says
;; to skip this search hit.
(if (or (not isearch-success)
(funcall isearch-filter-predicate
(match-beginning 0) (match-end 0)))
(setq retry nil)
;; Advance point on empty matches before retrying
(when (= (match-beginning 0) (match-end 0))
(if (if isearch-forward (eobp) (bobp))
(setq retry nil isearch-success nil)
(forward-char (if isearch-forward 1 -1)))))))
;; Clear RETRY unless the search predicate says
;; to skip this search hit.
(if (or (not isearch-success)
(funcall isearch-filter-predicate
(match-beginning 0) (match-end 0)))
(setq retry nil)
;; Advance point on empty matches before retrying
(when (= (match-beginning 0) (match-end 0))
(if (if isearch-forward (eobp) (bobp))
(setq retry nil isearch-success nil)
(forward-char (if isearch-forward 1 -1))))))
(setq isearch-just-started nil)
(when isearch-success
(setq isearch-other-end

View file

@ -6,7 +6,6 @@
;; Alex Schroeder <alex@gnu.org>
;; Chong Yidong <cyd@stupidchicken.com>
;; Maintainer: emacs-devel@gnu.org
;; Obsolete-since: 24.4
;; Keywords: convenience, wp
;; This file is part of GNU Emacs.

View file

@ -5276,9 +5276,6 @@ init_buffer_once (void)
XSETFASTINT (BVAR (&buffer_local_flags, tab_line_format), idx); ++idx;
XSETFASTINT (BVAR (&buffer_local_flags, cursor_type), idx); ++idx;
XSETFASTINT (BVAR (&buffer_local_flags, extra_line_spacing), idx); ++idx;
XSETFASTINT (BVAR (&buffer_local_flags, auto_narrow__narrowing_state), idx);
/* Make this one a permanent local. */
buffer_permanent_local_flags[idx++] = 1;
XSETFASTINT (BVAR (&buffer_local_flags, cursor_in_non_selected_windows), idx); ++idx;
/* buffer_local_flags contains no pointers, so it's safe to treat it
@ -5665,7 +5662,7 @@ A string is printed verbatim in the mode line except for %-constructs:
%p -- print percent of buffer above top of window, or Top, Bot or All.
%P -- print percent of buffer above bottom of window, perhaps plus Top,
or print Bottom or All.
%n -- print Narrow or Auto-Narrow if appropriate.
%n -- print Narrow if appropriate.
%t -- visited file is text or binary (if OS supports this distinction).
%z -- print mnemonics of keyboard, terminal, and buffer coding systems.
%Z -- like %z, but including the end-of-line format.
@ -6366,10 +6363,6 @@ see `display-graphic-p'.
If value is a floating point number, it specifies the spacing relative
to the default frame line height. A value of nil means add no extra space. */);
DEFVAR_PER_BUFFER ("auto-narrow--narrowing-state",
&BVAR (current_buffer, auto_narrow__narrowing_state), Qnil,
doc: /* Internal variable used by `auto-narrow-mode'. */);
DEFVAR_PER_BUFFER ("cursor-in-non-selected-windows",
&BVAR (current_buffer, cursor_in_non_selected_windows), Qnil,
doc: /* Non-nil means show a cursor in non-selected windows.

View file

@ -561,9 +561,6 @@ struct buffer
in the display of this buffer. */
Lisp_Object extra_line_spacing_;
/* Narrowing state when auto-narrow mode is in effect. */
Lisp_Object auto_narrow__narrowing_state_;
/* Cursor type to display in non-selected windows.
t means to use hollow box cursor.
See `cursor-type' for other values. */
@ -835,11 +832,6 @@ bset_width_table (struct buffer *b, Lisp_Object val)
{
b->width_table_ = val;
}
INLINE void
bset_auto_narrow__narrowing_state (struct buffer *b, Lisp_Object val)
{
b->auto_narrow__narrowing_state_ = val;
}
/* BUFFER_CEILING_OF (resp. BUFFER_FLOOR_OF), when applied to n, return
the max (resp. min) p such that
@ -1120,12 +1112,6 @@ BUFFER_CHECK_INDIRECTION (struct buffer *b)
}
}
INLINE bool
BUFFER_AUTO_NARROWED_P (struct buffer *b)
{
return EQ (BVAR (b, auto_narrow__narrowing_state), Qauto);
}
/* 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

View file

@ -4997,16 +4997,6 @@ by calling `format-decode', which see. */)
Otherwise start with an empty undo_list. */
bset_undo_list (current_buffer, EQ (old_undo, Qt) ? Qt : Qnil);
if (!noninteractive
&& !NILP (Vauto_narrow_long_line_threshold)
&& !NILP (CALLN
(Fgtr,
Fcar (Fcdr (Fbuffer_line_statistics (Fcurrent_buffer ()))),
Vauto_narrow_long_line_threshold)))
{
bset_auto_narrow__narrowing_state (current_buffer, Qneeded);
}
unbind_to (count1, Qnil);
}
@ -6648,17 +6638,6 @@ This includes interactive calls to `delete-file' and
/* Lisp function for recursively deleting directories. */
DEFSYM (Qdelete_directory, "delete-directory");
DEFVAR_LISP ("auto-narrow-long-line-threshold",
Vauto_narrow_long_line_threshold,
doc: /* Line length above which `auto-narrow-mode' is entered.
When non-nil, and when a file with one or more lines longer than
`auto-narrow-long-line-threshold' is opened or inserted in a buffer,
`auto-narrow-mode' is automatically enabled.
When nil, `auto-narrow-mode' is disabled. */);
Vauto_narrow_long_line_threshold = Qnil;
DEFSYM (Qauto_narrow_mode, "auto-narrow-mode");
DEFSYM (Qsubstitute_env_in_file_name, "substitute-env-in-file-name");
DEFSYM (Qget_buffer_window_list, "get-buffer-window-list");

View file

@ -1290,9 +1290,6 @@ command_loop_1 (void)
if (NILP (Vmemory_full))
{
if (!NILP (Vauto_narrow_post_command_function) && !NILP (Vrun_hooks))
safe_run_hooks (Qauto_narrow_post_command_function);
/* Make sure this hook runs after commands that get errors and
throw to top level. */
/* Note that the value cell will never directly contain nil
@ -1475,8 +1472,6 @@ command_loop_1 (void)
Vreal_this_command = cmd;
safe_run_hooks (Qpre_command_hook);
safe_run_hooks (Qauto_narrow_pre_command_function);
already_adjusted = 0;
if (NILP (Vthis_command))
@ -1527,8 +1522,6 @@ command_loop_1 (void)
}
kset_last_prefix_arg (current_kboard, Vcurrent_prefix_arg);
safe_run_hooks (Qauto_narrow_post_command_function);
safe_run_hooks (Qpost_command_hook);
/* If displaying a message, resize the echo area window to fit
@ -12047,11 +12040,6 @@ syms_of_keyboard (void)
DEFSYM (Qpre_command_hook, "pre-command-hook");
DEFSYM (Qpost_command_hook, "post-command-hook");
DEFSYM (Qauto_narrow_pre_command_function,
"auto-narrow-pre-command-function");
DEFSYM (Qauto_narrow_post_command_function,
"auto-narrow-post-command-function");
DEFSYM (Qundo_auto__add_boundary, "undo-auto--add-boundary");
DEFSYM (Qundo_auto__undoably_changed_buffers,
"undo-auto--undoably-changed-buffers");
@ -12616,22 +12604,6 @@ avoid making Emacs unresponsive while the user types.
See also `pre-command-hook'. */);
Vpost_command_hook = Qnil;
DEFVAR_LISP ("auto-narrow-pre-command-function",
Vauto_narrow_pre_command_function,
doc: /* Function executed before each command is executed in `auto-narrow-mode'.
If non-nil, and `auto-narrow-mode' is enabled, the function is
called before each command is executed, after `pre-command-hook'.
It is called without arguments. */);
Vauto_narrow_pre_command_function = Qnil;
DEFVAR_LISP ("auto-narrow-post-command-function",
Vauto_narrow_post_command_function,
doc: /* Function executed after each command is executed in `auto-narrow-mode'.
If non-nil, and `auto-narrow-mode' is enabled, the function is
called after each command is executed, before `post-command-hook'.
It is called without arguments. */);
Vauto_narrow_post_command_function = Qnil;
#if 0
DEFVAR_LISP ("echo-area-clear-hook", ...,
doc: /* Normal hook run when clearing the echo area. */);

View file

@ -18872,20 +18872,11 @@ set_vertical_scroll_bar (struct window *w)
&& NILP (echo_area_buffer[0])))
{
struct buffer *buf = XBUFFER (w->contents);
if (! BUFFER_AUTO_NARROWED_P (current_buffer))
{
whole = BUF_ZV (buf) - BUF_BEGV (buf);
start = marker_position (w->start) - 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) - w->window_end_pos - BUF_BEG (buf);
}
whole = BUF_ZV (buf) - BUF_BEGV (buf);
start = marker_position (w->start) - 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);
if (end < start)
end = start;
@ -19142,14 +19133,6 @@ redisplay_window (Lisp_Object window, bool just_this_one_p)
variables. */
set_buffer_internal_1 (XBUFFER (w->contents));
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. */
bset_auto_narrow__narrowing_state (current_buffer, Qauto);
message1 ("Auto-Narrow mode enabled in current buffer");
}
current_matrix_up_to_date_p
= (w->window_end_valid
&& !current_buffer->clip_changed
@ -27684,12 +27667,7 @@ decode_mode_spec (struct window *w, register int c, int field_width,
case 'n':
if (BUF_BEGV (b) > BUF_BEG (b) || BUF_ZV (b) < BUF_Z (b))
{
if (! BUFFER_AUTO_NARROWED_P (b))
return " Narrow";
else
return " Auto-Narrow";
}
return " Narrow";
break;
/* Display the "degree of travel" of the window through the buffer. */
@ -27697,27 +27675,17 @@ decode_mode_spec (struct window *w, register int c, int field_width,
{
ptrdiff_t toppos = marker_position (w->start);
ptrdiff_t botpos = BUF_Z (b) - w->window_end_pos;
ptrdiff_t beg, z;
ptrdiff_t begv = BUF_BEGV (b);
ptrdiff_t zv = BUF_ZV (b);
if (! BUFFER_AUTO_NARROWED_P (b))
{
beg = BUF_BEGV (b);
z = BUF_ZV (b);
}
else
{
beg = BUF_BEG (b);
z = BUF_Z (b);
}
if (z <= botpos)
return toppos <= beg ? "All" : "Bottom";
else if (toppos <= beg)
if (zv <= botpos)
return toppos <= begv ? "All" : "Bottom";
else if (toppos <= begv)
return "Top";
else
{
sprintf (decode_mode_spec_buf, "%2d%%",
percent99 (toppos - beg, (toppos - beg) + (z - botpos)));
percent99 (toppos - begv, (toppos - begv) + (zv - botpos)));
return decode_mode_spec_buf;
}
}
@ -27726,27 +27694,17 @@ decode_mode_spec (struct window *w, register int c, int field_width,
case 'p':
{
ptrdiff_t pos = marker_position (w->start);
ptrdiff_t beg, z;
ptrdiff_t begv = BUF_BEGV (b);
ptrdiff_t zv = BUF_ZV (b);
if (! BUFFER_AUTO_NARROWED_P (b))
{
beg = BUF_BEGV (b);
z = BUF_ZV (b);
}
else
{
beg = BUF_BEG (b);
z = BUF_Z (b);
}
if (w->window_end_pos <= BUF_Z (b) - z)
return pos <= beg ? "All" : "Bottom";
else if (pos <= beg)
if (w->window_end_pos <= BUF_Z (b) - zv)
return pos <= begv ? "All" : "Bottom";
else if (pos <= begv)
return "Top";
else
{
sprintf (decode_mode_spec_buf, "%2d%%",
percent99 (pos - beg, z - beg));
percent99 (pos - begv, zv - begv));
return decode_mode_spec_buf;
}
}
@ -27756,26 +27714,16 @@ decode_mode_spec (struct window *w, register int c, int field_width,
{
ptrdiff_t toppos = marker_position (w->start);
ptrdiff_t botpos = BUF_Z (b) - w->window_end_pos;
ptrdiff_t beg, z;
ptrdiff_t begv = BUF_BEGV (b);
ptrdiff_t zv = BUF_ZV (b);
if (! BUFFER_AUTO_NARROWED_P (b))
{
beg = BUF_BEGV (b);
z = BUF_ZV (b);
}
else
{
beg = BUF_BEG (b);
z = BUF_Z (b);
}
if (z <= botpos)
return toppos <= beg ? "All" : "Bottom";
if (zv <= botpos)
return toppos <= begv ? "All" : "Bottom";
else
{
sprintf (decode_mode_spec_buf,
&"Top%2d%%"[beg < toppos ? sizeof "Top" - 1 : 0],
percent99 (botpos - beg, z - beg));
&"Top%2d%%"[begv < toppos ? sizeof "Top" - 1 : 0],
percent99 (botpos - begv, zv - begv));
return decode_mode_spec_buf;
}
}
@ -27786,25 +27734,15 @@ decode_mode_spec (struct window *w, register int c, int field_width,
{
ptrdiff_t toppos = marker_position (w->start);
ptrdiff_t botpos = BUF_Z (b) - w->window_end_pos;
ptrdiff_t beg, z;
ptrdiff_t begv = BUF_BEGV (b);
ptrdiff_t zv = BUF_ZV (b);
int top_perc, bot_perc;
if (! BUFFER_AUTO_NARROWED_P (b))
{
beg = BUF_BEGV (b);
z = BUF_ZV (b);
}
else
{
beg = BUF_BEG (b);
z = BUF_Z (b);
}
if ((toppos <= beg) && (z <= botpos))
if ((toppos <= begv) && (zv <= botpos))
return "All ";
top_perc = toppos <= beg ? 0 : percent99 (toppos - beg, z - beg);
bot_perc = z <= botpos ? 100 : percent99 (botpos - beg, z - beg);
top_perc = toppos <= begv ? 0 : percent99 (toppos - begv, zv - begv);
bot_perc = zv <= botpos ? 100 : percent99 (botpos - begv, zv - begv);
if (top_perc == bot_perc)
sprintf (decode_mode_spec_buf, "%d%%", top_perc);
@ -35892,8 +35830,6 @@ be let-bound around code that needs to disable messages temporarily. */);
DEFSYM (Qinhibit_point_motion_hooks, "inhibit-point-motion-hooks");
DEFSYM (Qeval, "eval");
DEFSYM (QCdata, ":data");
DEFSYM (Qneeded, "needed");
DEFSYM (Qauto, "auto");
/* Names of text properties relevant for redisplay. */
DEFSYM (Qdisplay, "display");