diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-06-16 16:20:52 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-06-16 16:20:52 +0200 |
commit | bfa4246768e28335ed9b98f83019ea58b480158e (patch) | |
tree | d2efedd2f1a2cda24e3e4f25a9b611c8e7f52484 | |
parent | 6ba3ec1bace67513a352326864cebc16b3c5bc56 (diff) | |
download | vim-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.c | 26 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |