diff options
author | James McCoy <jamessan@jamessan.com> | 2016-12-14 14:36:38 -0500 |
---|---|---|
committer | James McCoy <jamessan@jamessan.com> | 2016-12-27 14:10:27 -0500 |
commit | f224f3fbf11ffd3095843c597045ca95c8241fcf (patch) | |
tree | a2785280c42bdfb94ea0f9c86c34093c6a203ebf /src | |
parent | f613c61dae7be1c4f9eadc223a77684a128508b0 (diff) | |
download | rneovim-f224f3fbf11ffd3095843c597045ca95c8241fcf.tar.gz rneovim-f224f3fbf11ffd3095843c597045ca95c8241fcf.tar.bz2 rneovim-f224f3fbf11ffd3095843c597045ca95c8241fcf.zip |
vim-patch:7.4.1997
Problem: Cannot easily scroll the quickfix window.
Solution: Add ":cbottom".
https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/ex_cmds.lua | 6 | ||||
-rw-r--r-- | src/nvim/quickfix.c | 48 | ||||
-rw-r--r-- | src/nvim/testdir/test_quickfix.vim | 13 | ||||
-rw-r--r-- | src/nvim/version.c | 2 |
4 files changed, 53 insertions, 16 deletions
diff --git a/src/nvim/ex_cmds.lua b/src/nvim/ex_cmds.lua index b056fff667..e39e374e2e 100644 --- a/src/nvim/ex_cmds.lua +++ b/src/nvim/ex_cmds.lua @@ -358,6 +358,12 @@ return { func='ex_cbuffer', }, { + command='cbottom', + flags=bit.bor(TRLBAR), + addr_type=ADDR_LINES, + func='ex_cbottom', + }, + { command='cc', flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG), addr_type=ADDR_LINES, diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index f4654628fb..c40b7173c5 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -2431,6 +2431,34 @@ void ex_copen(exarg_T *eap) update_topline(); /* scroll to show the line */ } +// Move the cursor in the quickfix window to "lnum". +static void qf_win_goto(win_T *win, linenr_T lnum) +{ + win_T *old_curwin = curwin; + + curwin = win; + curbuf = win->w_buffer; + curwin->w_cursor.lnum = lnum; + curwin->w_cursor.col = 0; + curwin->w_cursor.coladd = 0; + curwin->w_curswant = 0; + update_topline(); // scroll to show the line + redraw_later(VALID); + curwin->w_redr_status = true; // update ruler + curwin = old_curwin; + curbuf = curwin->w_buffer; +} + +// :cbottom command. +void ex_cbottom(exarg_T *eap) +{ + win_T *win = qf_find_win(&ql_info); + + if (win != NULL && win->w_cursor.lnum != win->w_buffer->b_ml.ml_line_count) { + qf_win_goto(win, win->w_buffer->b_ml.ml_line_count); + } +} + /* * Return the number of the current entry (line number in the quickfix * window). @@ -2467,24 +2495,14 @@ qf_win_pos_update ( if (win != NULL && qf_index <= win->w_buffer->b_ml.ml_line_count && old_qf_index != qf_index) { - win_T *old_curwin = curwin; - - curwin = win; - curbuf = win->w_buffer; if (qf_index > old_qf_index) { - curwin->w_redraw_top = old_qf_index; - curwin->w_redraw_bot = qf_index; + win->w_redraw_top = old_qf_index; + win->w_redraw_bot = qf_index; } else { - curwin->w_redraw_top = qf_index; - curwin->w_redraw_bot = old_qf_index; + win->w_redraw_top = qf_index; + win->w_redraw_bot = old_qf_index; } - curwin->w_cursor.lnum = qf_index; - curwin->w_cursor.col = 0; - update_topline(); /* scroll to show the line */ - redraw_later(VALID); - curwin->w_redr_status = TRUE; /* update ruler */ - curwin = old_curwin; - curbuf = curwin->w_buffer; + qf_win_goto(win, qf_index); } return win != NULL; } diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim index a91e65df6c..7b141f17a4 100644 --- a/src/nvim/testdir/test_quickfix.vim +++ b/src/nvim/testdir/test_quickfix.vim @@ -1396,3 +1396,16 @@ echo string(loc_two) call delete('Xone', 'rf') call delete('Xtwo', 'rf') endfunc + +function Test_cbottom() + call setqflist([{'filename': 'foo', 'lnum': 42}]) + copen + let wid = win_getid() + call assert_equal(1, line('.')) + wincmd w + call setqflist([{'filename': 'var', 'lnum': 24}], 'a') + cbottom + call win_gotoid(wid) + call assert_equal(2, line('.')) + cclose +endfunc diff --git a/src/nvim/version.c b/src/nvim/version.c index b5168f565b..9a273dd66c 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -443,7 +443,7 @@ static int included_patches[] = { // 2000, // 1999, // 1998 NA - // 1997, + 1997, // 1996, // 1995 NA // 1994, |