diff options
-rw-r--r-- | src/nvim/edit.c | 2 | ||||
-rw-r--r-- | src/nvim/ex_cmds.c | 14 | ||||
-rw-r--r-- | src/nvim/ex_docmd.c | 2 | ||||
-rw-r--r-- | src/nvim/normal.c | 8 | ||||
-rw-r--r-- | src/nvim/screen.c | 2 | ||||
-rw-r--r-- | src/nvim/testdir/test_edit.vim | 23 | ||||
-rw-r--r-- | src/nvim/ui.c | 2 |
7 files changed, 41 insertions, 12 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 53fe164050..d0994d35f5 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -298,7 +298,7 @@ static void insert_enter(InsertState *s) // Check if the cursor line needs redrawing before changing State. If // 'concealcursor' is "n" it needs to be redrawn without concealing. - conceal_check_cursur_line(); + conceal_check_cursor_line(); // When doing a paste with the middle mouse button, Insstart is set to // where the paste started. diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index ac5b3af459..b700d780c7 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -2546,11 +2546,17 @@ int do_ecmd( } check_arg_idx(curwin); - // If autocommands change the cursor position or topline, we should keep - // it. Also when it moves within a line. + // If autocommands change the cursor position or topline, we should + // keep it. Also when it moves within a line. But not when it moves + // to the first non-blank. if (!equalpos(curwin->w_cursor, orig_pos)) { - newlnum = curwin->w_cursor.lnum; - newcol = curwin->w_cursor.col; + const char_u *text = get_cursor_line_ptr(); + + if (curwin->w_cursor.lnum != orig_pos.lnum + || curwin->w_cursor.col != (int)(skipwhite(text) - text)) { + newlnum = curwin->w_cursor.lnum; + newcol = curwin->w_cursor.col; + } } if (curwin->w_topline == topline) topline = 0; diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 03f1446265..6586d82fae 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -8735,7 +8735,7 @@ static char_u *arg_all(void) #ifndef BACKSLASH_IN_FILENAME || *p == '\\' #endif - ) { + || *p == '`') { // insert a backslash if (retval != NULL) { retval[len] = '\\'; diff --git a/src/nvim/normal.c b/src/nvim/normal.c index 09444ace0f..217bf4f876 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -6496,8 +6496,8 @@ void may_start_select(int c) */ static void n_start_visual_mode(int c) { - /* Check for redraw before changing the state. */ - conceal_check_cursur_line(); + // Check for redraw before changing the state. + conceal_check_cursor_line(); VIsual_mode = c; VIsual_active = true; @@ -6514,8 +6514,8 @@ static void n_start_visual_mode(int c) foldAdjustVisual(); setmouse(); - /* Check for redraw after changing the state. */ - conceal_check_cursur_line(); + // Check for redraw after changing the state. + conceal_check_cursor_line(); if (p_smd && msg_silent == 0) redraw_cmdline = true; /* show visual mode later */ diff --git a/src/nvim/screen.c b/src/nvim/screen.c index 8ad2145400..36942a1e78 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -478,7 +478,7 @@ int conceal_cursor_line(win_T *wp) /* * Check if the cursor line needs to be redrawn because of 'concealcursor'. */ -void conceal_check_cursur_line(void) +void conceal_check_cursor_line(void) { if (curwin->w_p_cole > 0 && conceal_cursor_line(curwin)) { need_cursor_line_redraw = TRUE; diff --git a/src/nvim/testdir/test_edit.vim b/src/nvim/testdir/test_edit.vim index 1effc8e12f..b1fce07f39 100644 --- a/src/nvim/testdir/test_edit.vim +++ b/src/nvim/testdir/test_edit.vim @@ -1338,6 +1338,14 @@ func! Test_edit_rightleft() bw! endfunc +func Test_edit_backtick() + next a\`b c + call assert_equal('a`b', expand('%')) + next + call assert_equal('c', expand('%')) + call assert_equal('a\`b c', expand('##')) +endfunc + func Test_edit_quit() edit foo.txt split @@ -1390,3 +1398,18 @@ func Test_edit_complete_very_long_name() endif set swapfile& endfunc + +func Test_edit_alt() + " Keeping the cursor line didn't happen when the first line has indent. + new + call setline(1, [' one', 'two', 'three']) + w XAltFile + $ + call assert_equal(3, line('.')) + e Xother + e # + call assert_equal(3, line('.')) + + bwipe XAltFile + call delete('XAltFile') +endfunc diff --git a/src/nvim/ui.c b/src/nvim/ui.c index e291111f82..87101c3b64 100644 --- a/src/nvim/ui.c +++ b/src/nvim/ui.c @@ -393,7 +393,7 @@ void ui_cursor_shape(void) mode_idx = new_mode_idx; pending_mode_update = true; } - conceal_check_cursur_line(); + conceal_check_cursor_line(); } /// Returns true if `widget` is externalized. |