[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 6733f45383b: Fix scrolling when continuation line starts with a d
From: |
Eli Zaretskii |
Subject: |
master 6733f45383b: Fix scrolling when continuation line starts with a display string |
Date: |
Thu, 16 Nov 2023 04:24:33 -0500 (EST) |
branch: master
commit 6733f45383bc1f57860d98803391cda076ed7cbb
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>
Fix scrolling when continuation line starts with a display string
* src/xdisp.c (start_display): Compute continuation_lines_width
for starting display in strings and images as well. (Bug#67201)
---
src/xdisp.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/src/xdisp.c b/src/xdisp.c
index 041c7adfc50..2dbe85f0f04 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -3766,18 +3766,25 @@ start_display (struct it *it, struct window *w, struct
text_pos pos)
/* Don't reseat to previous visible line start if current start
position is in a string or image. */
- if (it->method == GET_FROM_BUFFER && it->line_wrap != TRUNCATE)
+ if (it->line_wrap != TRUNCATE)
{
- int first_y = it->current_y;
+ enum it_method method = it->method;
- /* If window start is not at a line start, skip forward to POS to
- get the correct continuation lines width. */
+ /* If window start is not at a line start, skip forward to POS
+ from the beginning of physical line to get the correct
+ continuation lines width. */
bool start_at_line_beg_p = (CHARPOS (pos) == BEGV
|| FETCH_BYTE (BYTEPOS (pos) - 1) == '\n');
if (!start_at_line_beg_p)
{
+ int first_y = it->current_y;
+ int continuation_width;
+ void *itdata = NULL;
+ struct it it2;
int new_x;
+ if (method != GET_FROM_BUFFER)
+ SAVE_IT (it2, *it, itdata);
reseat_at_previous_visible_line_start (it);
move_it_to (it, CHARPOS (pos), -1, -1, -1, MOVE_TO_POS);
@@ -3824,6 +3831,17 @@ start_display (struct it *it, struct window *w, struct
text_pos pos)
else if (it->current.dpvec_index >= 0)
it->current.dpvec_index = 0;
+ continuation_width = it->continuation_lines_width;
+ /* If we started from a position in something other than a
+ buffer, restore the original iterator state, keeping only
+ the continuation_lines_width, since we could now be very
+ far from the original position. */
+ if (method != GET_FROM_BUFFER)
+ {
+ RESTORE_IT (it, &it2, itdata);
+ it->continuation_lines_width = continuation_width;
+ }
+
/* We're starting a new display line, not affected by the
height of the continued line, so clear the appropriate
fields in the iterator structure. */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 6733f45383b: Fix scrolling when continuation line starts with a display string,
Eli Zaretskii <=