Fix vertical-motion and posn-at-point when word-wrap is on (Bug#19769)
src/xdisp.c (move_it_in_display_line_to): Handle the case where the last character of a screen line is whitespace, and we are under word-wrap with overflow-newline-into-fringe turned on.
This commit is contained in:
parent
a323b93d46
commit
c0ba5908b1
2 changed files with 37 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
|||
2015-02-05 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* xdisp.c (move_it_in_display_line_to): Handle the case where the
|
||||
last character of a screen line is whitespace, and we are under
|
||||
word-wrap with overflow-newline-into-fringe turned on.
|
||||
(Bug#19769)
|
||||
|
||||
2015-02-03 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* xdisp.c (handle_stop, handle_single_display_spec)
|
||||
|
|
32
src/xdisp.c
32
src/xdisp.c
|
@ -8798,7 +8798,16 @@ move_it_in_display_line_to (struct it *it,
|
|||
if (BUFFER_POS_REACHED_P ())
|
||||
{
|
||||
if (it->line_wrap != WORD_WRAP
|
||||
|| wrap_it.sp < 0)
|
||||
|| wrap_it.sp < 0
|
||||
/* If we've just found whitespace to
|
||||
wrap, effectively ignore the
|
||||
previous wrap point -- it is no
|
||||
longer relevant, but we won't
|
||||
have an opportunity to update it,
|
||||
since we've reached the edge of
|
||||
this screen line. */
|
||||
|| (may_wrap
|
||||
&& IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)))
|
||||
{
|
||||
it->hpos = hpos_before_this_char;
|
||||
it->current_x = x_before_this_char;
|
||||
|
@ -8862,7 +8871,26 @@ move_it_in_display_line_to (struct it *it,
|
|||
else
|
||||
IT_RESET_X_ASCENT_DESCENT (it);
|
||||
|
||||
if (wrap_it.sp >= 0)
|
||||
/* If the screen line ends with whitespace, and we
|
||||
are under word-wrap, don't use wrap_it: it is no
|
||||
longer relevant, but we won't have an opportunity
|
||||
to update it, since we are done with this screen
|
||||
line. */
|
||||
if (may_wrap && IT_OVERFLOW_NEWLINE_INTO_FRINGE (it))
|
||||
{
|
||||
/* If we've found TO_X, go back there, as we now
|
||||
know the last word fits on this screen line. */
|
||||
if ((op & MOVE_TO_X) && new_x == it->last_visible_x
|
||||
&& atx_it.sp >= 0)
|
||||
{
|
||||
RESTORE_IT (it, &atx_it, atx_data);
|
||||
atpos_it.sp = -1;
|
||||
atx_it.sp = -1;
|
||||
result = MOVE_X_REACHED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (wrap_it.sp >= 0)
|
||||
{
|
||||
RESTORE_IT (it, &wrap_it, wrap_data);
|
||||
atpos_it.sp = -1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue