diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2021-01-21 23:43:49 -0500 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2021-01-22 09:03:44 -0500 |
commit | 30ef922f3908edae9511c029da294b92f342a1cc (patch) | |
tree | c05ec57189d0780cea9029aa2ae3c141f882b808 /src/nvim/normal.c | |
parent | b8ea076ad116ff2639bebbde3283ac025fb9acb3 (diff) | |
download | rneovim-30ef922f3908edae9511c029da294b92f342a1cc.tar.gz rneovim-30ef922f3908edae9511c029da294b92f342a1cc.tar.bz2 rneovim-30ef922f3908edae9511c029da294b92f342a1cc.zip |
vim-patch:8.2.2385: "gj" and "gk" do not work correctly when inside a fold
Problem: "gj" and "gk" do not work correctly when inside a fold.
Solution: Move check for folding. (closes vim/vim#7724, closes vim/vim#4095)
https://github.com/vim/vim/commit/e71996bd0865659bde5450f466bc3e53e83431b2
Diffstat (limited to 'src/nvim/normal.c')
-rw-r--r-- | src/nvim/normal.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/src/nvim/normal.c b/src/nvim/normal.c index 4e955667dc..8f22243348 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -3978,16 +3978,19 @@ static bool nv_screengo(oparg_T *oap, int dir, long dist) curwin->w_curswant -= width2; } else { // to previous line + + // Move to the start of a closed fold. Don't do that when + // 'foldopen' contains "all": it will open in a moment. + if (!(fdo_flags & FDO_ALL)) { + (void)hasFolding(curwin->w_cursor.lnum, + &curwin->w_cursor.lnum, NULL); + } if (curwin->w_cursor.lnum == 1) { retval = false; break; } - --curwin->w_cursor.lnum; - /* Move to the start of a closed fold. Don't do that when - * 'foldopen' contains "all": it will open in a moment. */ - if (!(fdo_flags & FDO_ALL)) - (void)hasFolding(curwin->w_cursor.lnum, - &curwin->w_cursor.lnum, NULL); + curwin->w_cursor.lnum--; + linelen = linetabsize(get_cursor_line_ptr()); if (linelen > width1) { int w = (((linelen - width1 - 1) / width2) + 1) * width2; @@ -6708,11 +6711,8 @@ static void nv_g_cmd(cmdarg_T *cap) */ case 'j': case K_DOWN: - /* with 'nowrap' it works just like the normal "j" command; also when - * in a closed fold */ - if (!curwin->w_p_wrap - || hasFolding(curwin->w_cursor.lnum, NULL, NULL) - ) { + // with 'nowrap' it works just like the normal "j" command. + if (!curwin->w_p_wrap) { oap->motion_type = kMTLineWise; i = cursor_down(cap->count1, oap->op_type == OP_NOP); } else @@ -6723,11 +6723,8 @@ static void nv_g_cmd(cmdarg_T *cap) case 'k': case K_UP: - /* with 'nowrap' it works just like the normal "k" command; also when - * in a closed fold */ - if (!curwin->w_p_wrap - || hasFolding(curwin->w_cursor.lnum, NULL, NULL) - ) { + // with 'nowrap' it works just like the normal "k" command. + if (!curwin->w_p_wrap) { oap->motion_type = kMTLineWise; i = cursor_up(cap->count1, oap->op_type == OP_NOP); } else |