vim-patch:7.4.1997

Problem:    Cannot easily scroll the quickfix window.
Solution:   Add ":cbottom".

dcb1700186
This commit is contained in:
James McCoy 2016-12-14 14:36:38 -05:00
parent f613c61dae
commit f224f3fbf1
No known key found for this signature in database
GPG Key ID: DFE691AE331BA3DB
5 changed files with 59 additions and 16 deletions

View File

@ -428,6 +428,12 @@ EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
:lw[indow] [height] Same as ":cwindow", except use the window showing the
location list for the current window.
:cbo[ttom] Put the cursor in the last line of the quickfix window
and scroll to make it visible. This is useful for
when errors are added by an asynchronous callback.
Only call it once in a while if there are many
updates to avoid a lot of redrawing.
Normally the quickfix window is at the bottom of the screen. If there are
vertical splits, it's at the bottom of the rightmost column of windows. To
make it always occupy the full width: >

View File

@ -357,6 +357,12 @@ return {
addr_type=ADDR_LINES,
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),

View File

@ -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;
}

View File

@ -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

View File

@ -443,7 +443,7 @@ static int included_patches[] = {
// 2000,
// 1999,
// 1998 NA
// 1997,
1997,
// 1996,
// 1995 NA
// 1994,