aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2016-12-14 14:36:38 -0500
committerJames McCoy <jamessan@jamessan.com>2016-12-27 14:10:27 -0500
commitf224f3fbf11ffd3095843c597045ca95c8241fcf (patch)
treea2785280c42bdfb94ea0f9c86c34093c6a203ebf /src
parentf613c61dae7be1c4f9eadc223a77684a128508b0 (diff)
downloadrneovim-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.lua6
-rw-r--r--src/nvim/quickfix.c48
-rw-r--r--src/nvim/testdir/test_quickfix.vim13
-rw-r--r--src/nvim/version.c2
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,