diff src/move.c @ 2693:0606065af0a0 v7.3.111

updated for version 7.3.111 Problem: Executing a :normal command in 'statusline' evaluation causes the cursor to move. (Dominique Pelle) Solution: When updating the cursor for 'cursorbind' allow the cursor beyond the end of the line. When evaluating 'statusline' temporarily reset 'cursorbind'.
author Bram Moolenaar <bram@vim.org>
date Tue, 01 Feb 2011 18:01:11 +0100
parents f016c3708ae3
children 320cc46d0eb0
line wrap: on
line diff
--- a/src/move.c
+++ b/src/move.c
@@ -2846,6 +2846,7 @@ do_check_cursorbind()
     colnr_T	col =  curwin->w_cursor.col;
     win_T	*old_curwin = curwin;
     buf_T	*old_curbuf = curbuf;
+    int		restart_edit_save;
 # ifdef FEAT_VISUAL
     int		old_VIsual_select = VIsual_select;
     int		old_VIsual_active = VIsual_active;
@@ -2875,8 +2876,12 @@ do_check_cursorbind()
 		curwin->w_cursor.lnum = line;
 	    curwin->w_cursor.col = col;
 
-	    /* Make sure the cursor is in a valid position. */
+	    /* Make sure the cursor is in a valid position.  Temporarily set
+	     * "restart_edit" to allow the cursor to be beyond the EOL. */
+	    restart_edit_save = restart_edit;
+	    restart_edit = TRUE;
 	    check_cursor();
+	    restart_edit = restart_edit_save;
 # ifdef FEAT_MBYTE
 	    /* Correct cursor for multi-byte character. */
 	    if (has_mbyte)