From: Juri Linkov Date: Sat, 27 Aug 2022 19:52:03 +0000 (+0300) Subject: Use truncated-partial-width-window-p in more places (bug#56815) X-Git-Tag: emacs-29.0.90~1893^2~2 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=3f076a8e44b652691ffd4a2a07b04ab956ed4668;p=emacs.git Use truncated-partial-width-window-p in more places (bug#56815) * lisp/simple.el (line-move, line-move-finish): Use truncated-partial-width-window-p. * lisp/window.el (count-screen-lines, scroll-command--goto-goal-column): Use truncated-partial-width-window-p. (truncated-partial-width-window-p): Replace window-width with window-total-width. * src/indent.c (scan_for_column): Bring the logic of using truncated-partial-width-window-p closer to what the display engine does. --- diff --git a/lisp/simple.el b/lisp/simple.el index d18d54ce16c..ceb29b1e30a 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -7700,13 +7700,7 @@ not vscroll." ;; Lines are not truncated... (not (and - (or truncate-lines - (and (integerp truncate-partial-width-windows) - (< (window-total-width) - truncate-partial-width-windows)) - (and truncate-partial-width-windows - (not (integerp truncate-partial-width-windows)) - (not (window-full-width-p)))) + (or truncate-lines (truncated-partial-width-window-p)) ;; ...or if lines are truncated, this buffer ;; doesn't have very long lines. (long-line-optimizations-p))) @@ -7718,13 +7712,7 @@ not vscroll." ;; Lines aren't truncated. (not (and - (or truncate-lines - (and (integerp truncate-partial-width-windows) - (< (window-total-width) - truncate-partial-width-windows)) - (and truncate-partial-width-windows - (not (integerp truncate-partial-width-windows)) - (not (window-full-width-p)))) + (or truncate-lines (truncated-partial-width-window-p)) (long-line-optimizations-p))) ;; When the text in the window is scrolled to the left, ;; display-based motion doesn't make sense (because each @@ -7985,7 +7973,7 @@ If NOERROR, don't signal an error if we can't move that many lines." ;; Move to the desired column. (if (and line-move-visual - (not (or truncate-lines truncate-partial-width-windows))) + (not (or truncate-lines (truncated-partial-width-window-p)))) ;; Under line-move-visual, goal-column should be ;; interpreted in units of the frame's canonical character ;; width, which is exactly what vertical-motion does. diff --git a/lisp/window.el b/lisp/window.el index 4d88ffa9039..db69379e692 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -9044,10 +9044,7 @@ in some window." ;; vertical-motion returns a number that is 1 larger than it ;; should. We need to fix that. (setq end-invisible-p - (and (or truncate-lines - (and (natnump truncate-partial-width-windows) - (< (window-total-width window) - truncate-partial-width-windows))) + (and (or truncate-lines (truncated-partial-width-window-p window)) (save-excursion (goto-char finish) (> (- (current-column) (window-hscroll window)) @@ -10140,7 +10137,7 @@ semipermanent goal column for this command." (when goal-column ;; Move to the desired column. (if (and line-move-visual - (not (or truncate-lines truncate-partial-width-windows))) + (not (or truncate-lines (truncated-partial-width-window-p)))) ;; Under line-move-visual, goal-column should be ;; interpreted in units of the frame's canonical character ;; width, which is exactly what vertical-motion does. @@ -10449,7 +10446,7 @@ Otherwise, consult the value of `truncate-partial-width-windows' (let ((t-p-w-w (buffer-local-value 'truncate-partial-width-windows (window-buffer window)))) (if (integerp t-p-w-w) - (< (window-width window) t-p-w-w) + (< (window-total-width window) t-p-w-w) t-p-w-w)))) diff --git a/src/indent.c b/src/indent.c index cb368024d97..aa905f387bb 100644 --- a/src/indent.c +++ b/src/indent.c @@ -577,12 +577,15 @@ scan_for_column (ptrdiff_t *endpos, EMACS_INT *goalcol, if (!NILP (BVAR (current_buffer, truncate_lines))) lines_truncated = true; - else if (w && FIXNUMP (Vtruncate_partial_width_windows)) - lines_truncated = - w->total_cols < XFIXNAT (Vtruncate_partial_width_windows); - else if (w && !NILP (Vtruncate_partial_width_windows)) - lines_truncated = - w->total_cols < FRAME_COLS (XFRAME (WINDOW_FRAME (w))); + else if (!NILP (Vtruncate_partial_width_windows) && w + && w->total_cols < FRAME_COLS (XFRAME (WINDOW_FRAME (w)))) + { + if (FIXNUMP (Vtruncate_partial_width_windows)) + lines_truncated = + w->total_cols < XFIXNAT (Vtruncate_partial_width_windows); + else + lines_truncated = true; + } /* Special optimization for buffers with long and truncated lines: assumes that each character is a single column. */ if (lines_truncated)