# HG changeset patch # User Christian Brabandt # Date 1529159406 -7200 # Node ID 45c595c0ddaf352733294779657ca754c466656d # Parent 965f722253b30140f1c2114e8cdee48d2faaf4fc patch 8.1.0058: display problem with margins and scrolling commit https://github.com/vim/vim/commit/bfa4246768e28335ed9b98f83019ea58b480158e Author: Bram Moolenaar 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) diff --git a/src/screen.c b/src/screen.c --- 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 --- 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,