mirror of
https://github.com/vim/vim.git
synced 2025-09-07 22:03:36 -04:00
patch 8.1.0058: display problem with margins and scrolling
Problem: Display problem with margins and scrolling. Solution: Place the cursor in the right column. (Kouichi Iwamoto, closes #3016)
This commit is contained in:
parent
6ba3ec1bac
commit
bfa4246768
26
src/screen.c
26
src/screen.c
@ -9797,6 +9797,7 @@ screen_ins_lines(
|
|||||||
int j;
|
int j;
|
||||||
unsigned temp;
|
unsigned temp;
|
||||||
int cursor_row;
|
int cursor_row;
|
||||||
|
int cursor_col = 0;
|
||||||
int type;
|
int type;
|
||||||
int result_empty;
|
int result_empty;
|
||||||
int can_ce = can_clear(T_CE);
|
int can_ce = can_clear(T_CE);
|
||||||
@ -9893,6 +9894,9 @@ screen_ins_lines(
|
|||||||
gui_dont_update_cursor(row + off <= gui.cursor_row);
|
gui_dont_update_cursor(row + off <= gui.cursor_row);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (wp != NULL && wp->w_wincol != 0 && *T_CSV != NUL && *T_CCS == NUL)
|
||||||
|
cursor_col = wp->w_wincol;
|
||||||
|
|
||||||
if (*T_CCS != NUL) /* cursor relative to region */
|
if (*T_CCS != NUL) /* cursor relative to region */
|
||||||
cursor_row = row;
|
cursor_row = row;
|
||||||
else
|
else
|
||||||
@ -9939,7 +9943,7 @@ screen_ins_lines(
|
|||||||
}
|
}
|
||||||
|
|
||||||
screen_stop_highlight();
|
screen_stop_highlight();
|
||||||
windgoto(cursor_row, 0);
|
windgoto(cursor_row, cursor_col);
|
||||||
if (clear_attr != 0)
|
if (clear_attr != 0)
|
||||||
screen_start_highlight(clear_attr);
|
screen_start_highlight(clear_attr);
|
||||||
|
|
||||||
@ -9958,7 +9962,7 @@ screen_ins_lines(
|
|||||||
if (type == USE_T_AL)
|
if (type == USE_T_AL)
|
||||||
{
|
{
|
||||||
if (i && cursor_row != 0)
|
if (i && cursor_row != 0)
|
||||||
windgoto(cursor_row, 0);
|
windgoto(cursor_row, cursor_col);
|
||||||
out_str(T_AL);
|
out_str(T_AL);
|
||||||
}
|
}
|
||||||
else /* type == USE_T_SR */
|
else /* type == USE_T_SR */
|
||||||
@ -9975,7 +9979,7 @@ screen_ins_lines(
|
|||||||
{
|
{
|
||||||
for (i = 0; i < line_count; ++i)
|
for (i = 0; i < line_count; ++i)
|
||||||
{
|
{
|
||||||
windgoto(off + i, 0);
|
windgoto(off + i, cursor_col);
|
||||||
out_str(T_CE);
|
out_str(T_CE);
|
||||||
screen_start(); /* don't know where cursor is now */
|
screen_start(); /* don't know where cursor is now */
|
||||||
}
|
}
|
||||||
@ -10011,6 +10015,7 @@ screen_del_lines(
|
|||||||
int i;
|
int i;
|
||||||
unsigned temp;
|
unsigned temp;
|
||||||
int cursor_row;
|
int cursor_row;
|
||||||
|
int cursor_col = 0;
|
||||||
int cursor_end;
|
int cursor_end;
|
||||||
int result_empty; /* result is empty until end of region */
|
int result_empty; /* result is empty until end of region */
|
||||||
int can_delete; /* deleting line codes can be used */
|
int can_delete; /* deleting line codes can be used */
|
||||||
@ -10110,6 +10115,9 @@ screen_del_lines(
|
|||||||
&& gui.cursor_row < end + off);
|
&& gui.cursor_row < end + off);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (wp != NULL && wp->w_wincol != 0 && *T_CSV != NUL && *T_CCS == NUL)
|
||||||
|
cursor_col = wp->w_wincol;
|
||||||
|
|
||||||
if (*T_CCS != NUL) /* cursor relative to region */
|
if (*T_CCS != NUL) /* cursor relative to region */
|
||||||
{
|
{
|
||||||
cursor_row = row;
|
cursor_row = row;
|
||||||
@ -10172,13 +10180,13 @@ screen_del_lines(
|
|||||||
redraw_block(row, end, wp);
|
redraw_block(row, end, wp);
|
||||||
else if (type == USE_T_CD) /* delete the lines */
|
else if (type == USE_T_CD) /* delete the lines */
|
||||||
{
|
{
|
||||||
windgoto(cursor_row, 0);
|
windgoto(cursor_row, cursor_col);
|
||||||
out_str(T_CD);
|
out_str(T_CD);
|
||||||
screen_start(); /* don't know where cursor is now */
|
screen_start(); /* don't know where cursor is now */
|
||||||
}
|
}
|
||||||
else if (type == USE_T_CDL)
|
else if (type == USE_T_CDL)
|
||||||
{
|
{
|
||||||
windgoto(cursor_row, 0);
|
windgoto(cursor_row, cursor_col);
|
||||||
term_delete_lines(line_count);
|
term_delete_lines(line_count);
|
||||||
screen_start(); /* don't know where cursor is now */
|
screen_start(); /* don't know where cursor is now */
|
||||||
}
|
}
|
||||||
@ -10189,7 +10197,7 @@ screen_del_lines(
|
|||||||
*/
|
*/
|
||||||
else if (type == USE_NL)
|
else if (type == USE_NL)
|
||||||
{
|
{
|
||||||
windgoto(cursor_end - 1, 0);
|
windgoto(cursor_end - 1, cursor_col);
|
||||||
for (i = line_count; --i >= 0; )
|
for (i = line_count; --i >= 0; )
|
||||||
out_char('\n'); /* cursor will remain on same line */
|
out_char('\n'); /* cursor will remain on same line */
|
||||||
}
|
}
|
||||||
@ -10199,12 +10207,12 @@ screen_del_lines(
|
|||||||
{
|
{
|
||||||
if (type == USE_T_DL)
|
if (type == USE_T_DL)
|
||||||
{
|
{
|
||||||
windgoto(cursor_row, 0);
|
windgoto(cursor_row, cursor_col);
|
||||||
out_str(T_DL); /* delete a line */
|
out_str(T_DL); /* delete a line */
|
||||||
}
|
}
|
||||||
else /* type == USE_T_CE */
|
else /* type == USE_T_CE */
|
||||||
{
|
{
|
||||||
windgoto(cursor_row + i, 0);
|
windgoto(cursor_row + i, cursor_col);
|
||||||
out_str(T_CE); /* erase a line */
|
out_str(T_CE); /* erase a line */
|
||||||
}
|
}
|
||||||
screen_start(); /* don't know where cursor is now */
|
screen_start(); /* don't know where cursor is now */
|
||||||
@ -10219,7 +10227,7 @@ screen_del_lines(
|
|||||||
{
|
{
|
||||||
for (i = line_count; i > 0; --i)
|
for (i = line_count; i > 0; --i)
|
||||||
{
|
{
|
||||||
windgoto(cursor_end - i, 0);
|
windgoto(cursor_end - i, cursor_col);
|
||||||
out_str(T_CE); /* erase a line */
|
out_str(T_CE); /* erase a line */
|
||||||
screen_start(); /* don't know where cursor is now */
|
screen_start(); /* don't know where cursor is now */
|
||||||
}
|
}
|
||||||
|
@ -761,6 +761,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
58,
|
||||||
/**/
|
/**/
|
||||||
57,
|
57,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user