summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-06-16 16:20:52 +0200
committerBram Moolenaar <Bram@vim.org>2018-06-16 16:20:52 +0200
commitbfa4246768e28335ed9b98f83019ea58b480158e (patch)
treed2efedd2f1a2cda24e3e4f25a9b611c8e7f52484
parent6ba3ec1bace67513a352326864cebc16b3c5bc56 (diff)
downloadvim-git-bfa4246768e28335ed9b98f83019ea58b480158e.tar.gz
patch 8.1.0058: display problem with margins and scrollingv8.1.0058
Problem: Display problem with margins and scrolling. Solution: Place the cursor in the right column. (Kouichi Iwamoto, closes #3016)
-rw-r--r--src/screen.c26
-rw-r--r--src/version.c2
2 files changed, 19 insertions, 9 deletions
diff --git a/src/screen.c b/src/screen.c
index cd2931592..5ffc357d7 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -9797,6 +9797,7 @@ screen_ins_lines(
int j;
unsigned temp;
int cursor_row;
+ int cursor_col = 0;
int type;
int result_empty;
int can_ce = can_clear(T_CE);
@@ -9893,6 +9894,9 @@ screen_ins_lines(
gui_dont_update_cursor(row + off <= gui.cursor_row);
#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 */
cursor_row = row;
else
@@ -9939,7 +9943,7 @@ screen_ins_lines(
}
screen_stop_highlight();
- windgoto(cursor_row, 0);
+ windgoto(cursor_row, cursor_col);
if (clear_attr != 0)
screen_start_highlight(clear_attr);
@@ -9958,7 +9962,7 @@ screen_ins_lines(
if (type == USE_T_AL)
{
if (i && cursor_row != 0)
- windgoto(cursor_row, 0);
+ windgoto(cursor_row, cursor_col);
out_str(T_AL);
}
else /* type == USE_T_SR */
@@ -9975,7 +9979,7 @@ screen_ins_lines(
{
for (i = 0; i < line_count; ++i)
{
- windgoto(off + i, 0);
+ windgoto(off + i, cursor_col);
out_str(T_CE);
screen_start(); /* don't know where cursor is now */
}
@@ -10011,6 +10015,7 @@ screen_del_lines(
int i;
unsigned temp;
int cursor_row;
+ int cursor_col = 0;
int cursor_end;
int result_empty; /* result is empty until end of region */
int can_delete; /* deleting line codes can be used */
@@ -10110,6 +10115,9 @@ screen_del_lines(
&& gui.cursor_row < end + off);
#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 */
{
cursor_row = row;
@@ -10172,13 +10180,13 @@ screen_del_lines(
redraw_block(row, end, wp);
else if (type == USE_T_CD) /* delete the lines */
{
- windgoto(cursor_row, 0);
+ windgoto(cursor_row, cursor_col);
out_str(T_CD);
screen_start(); /* don't know where cursor is now */
}
else if (type == USE_T_CDL)
{
- windgoto(cursor_row, 0);
+ windgoto(cursor_row, cursor_col);
term_delete_lines(line_count);
screen_start(); /* don't know where cursor is now */
}
@@ -10189,7 +10197,7 @@ screen_del_lines(
*/
else if (type == USE_NL)
{
- windgoto(cursor_end - 1, 0);
+ windgoto(cursor_end - 1, cursor_col);
for (i = line_count; --i >= 0; )
out_char('\n'); /* cursor will remain on same line */
}
@@ -10199,12 +10207,12 @@ screen_del_lines(
{
if (type == USE_T_DL)
{
- windgoto(cursor_row, 0);
+ windgoto(cursor_row, cursor_col);
out_str(T_DL); /* delete a line */
}
else /* type == USE_T_CE */
{
- windgoto(cursor_row + i, 0);
+ windgoto(cursor_row + i, cursor_col);
out_str(T_CE); /* erase a line */
}
screen_start(); /* don't know where cursor is now */
@@ -10219,7 +10227,7 @@ screen_del_lines(
{
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 */
screen_start(); /* don't know where cursor is now */
}
diff --git a/src/version.c b/src/version.c
index f4ecfe755..f7c5f2efa 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 58,
+/**/
57,
/**/
56,