]> granicus.if.org Git - vim/commitdiff
patch 8.1.0058: display problem with margins and scrolling v8.1.0058
authorBram Moolenaar <Bram@vim.org>
Sat, 16 Jun 2018 14:20:52 +0000 (16:20 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 16 Jun 2018 14:20:52 +0000 (16:20 +0200)
Problem:    Display problem with margins and scrolling.
Solution:   Place the cursor in the right column. (Kouichi Iwamoto,
            closes #3016)

src/screen.c
src/version.c

index cd293159243a1a7bf4774208167787a1241ed16f..5ffc357d7d0d2fea531b0fcb1919c4138933771b 100644 (file)
@@ -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 */
        }
index f4ecfe7558fc2cc24ec1cdb5208bbbca0d7d612c..f7c5f2efa1b42c91305c1591d18a31de1511bed2 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    58,
 /**/
     57,
 /**/