forked from aniani/vim
patch 7.4.1997
Problem: Cannot easily scroll the quickfix window. Solution: Add ":cbottom".
This commit is contained in:
parent
1e5e1231ac
commit
dcb1700186
@ -437,6 +437,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: >
|
||||
|
@ -259,6 +259,9 @@ EX(CMD_catch, "catch", ex_catch,
|
||||
EX(CMD_cbuffer, "cbuffer", ex_cbuffer,
|
||||
BANG|RANGE|NOTADR|WORD1|TRLBAR,
|
||||
ADDR_LINES),
|
||||
EX(CMD_cbottom, "cbottom", ex_cbottom,
|
||||
TRLBAR,
|
||||
ADDR_LINES),
|
||||
EX(CMD_cc, "cc", ex_cc,
|
||||
RANGE|NOTADR|COUNT|TRLBAR|BANG,
|
||||
ADDR_LINES),
|
||||
|
@ -129,6 +129,7 @@ static int getargopt(exarg_T *eap);
|
||||
# define ex_cclose ex_ni
|
||||
# define ex_copen ex_ni
|
||||
# define ex_cwindow ex_ni
|
||||
# define ex_cbottom ex_ni
|
||||
#endif
|
||||
#if !defined(FEAT_QUICKFIX) || !defined(FEAT_EVAL)
|
||||
# define ex_cexpr ex_ni
|
||||
|
@ -9,6 +9,7 @@ void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long
|
||||
void ex_cwindow(exarg_T *eap);
|
||||
void ex_cclose(exarg_T *eap);
|
||||
void ex_copen(exarg_T *eap);
|
||||
void ex_cbottom(exarg_T *eap);
|
||||
linenr_T qf_current_entry(win_T *wp);
|
||||
int bt_quickfix(buf_T *buf);
|
||||
int bt_nofile(buf_T *buf);
|
||||
|
@ -2807,6 +2807,41 @@ 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;
|
||||
#ifdef FEAT_VIRTUALEDIT
|
||||
curwin->w_cursor.coladd = 0;
|
||||
#endif
|
||||
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 UNUSED)
|
||||
{
|
||||
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).
|
||||
@ -2844,27 +2879,17 @@ qf_win_pos_update(
|
||||
&& 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;
|
||||
}
|
||||
|
@ -1414,3 +1414,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
|
||||
|
@ -758,6 +758,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1997,
|
||||
/**/
|
||||
1996,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user