Mercurial > vim
changeset 14081:45c595c0ddaf v8.1.0058
patch 8.1.0058: display problem with margins and scrolling
commit https://github.com/vim/vim/commit/bfa4246768e28335ed9b98f83019ea58b480158e
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jun 16 16:20:52 2018 +0200
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)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 16 Jun 2018 16:30:06 +0200 |
parents | 965f722253b3 |
children | b8e782b6477e |
files | src/screen.c src/version.c |
diffstat | 2 files changed, 19 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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 */ }