mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 7.4.1997
Problem: Cannot easily scroll the quickfix window. Solution: Add ":cbottom".
This commit is contained in:
@@ -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
|
:lw[indow] [height] Same as ":cwindow", except use the window showing the
|
||||||
location list for the current window.
|
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
|
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
|
vertical splits, it's at the bottom of the rightmost column of windows. To
|
||||||
make it always occupy the full width: >
|
make it always occupy the full width: >
|
||||||
|
@@ -259,6 +259,9 @@ EX(CMD_catch, "catch", ex_catch,
|
|||||||
EX(CMD_cbuffer, "cbuffer", ex_cbuffer,
|
EX(CMD_cbuffer, "cbuffer", ex_cbuffer,
|
||||||
BANG|RANGE|NOTADR|WORD1|TRLBAR,
|
BANG|RANGE|NOTADR|WORD1|TRLBAR,
|
||||||
ADDR_LINES),
|
ADDR_LINES),
|
||||||
|
EX(CMD_cbottom, "cbottom", ex_cbottom,
|
||||||
|
TRLBAR,
|
||||||
|
ADDR_LINES),
|
||||||
EX(CMD_cc, "cc", ex_cc,
|
EX(CMD_cc, "cc", ex_cc,
|
||||||
RANGE|NOTADR|COUNT|TRLBAR|BANG,
|
RANGE|NOTADR|COUNT|TRLBAR|BANG,
|
||||||
ADDR_LINES),
|
ADDR_LINES),
|
||||||
|
@@ -129,6 +129,7 @@ static int getargopt(exarg_T *eap);
|
|||||||
# define ex_cclose ex_ni
|
# define ex_cclose ex_ni
|
||||||
# define ex_copen ex_ni
|
# define ex_copen ex_ni
|
||||||
# define ex_cwindow ex_ni
|
# define ex_cwindow ex_ni
|
||||||
|
# define ex_cbottom ex_ni
|
||||||
#endif
|
#endif
|
||||||
#if !defined(FEAT_QUICKFIX) || !defined(FEAT_EVAL)
|
#if !defined(FEAT_QUICKFIX) || !defined(FEAT_EVAL)
|
||||||
# define ex_cexpr ex_ni
|
# 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_cwindow(exarg_T *eap);
|
||||||
void ex_cclose(exarg_T *eap);
|
void ex_cclose(exarg_T *eap);
|
||||||
void ex_copen(exarg_T *eap);
|
void ex_copen(exarg_T *eap);
|
||||||
|
void ex_cbottom(exarg_T *eap);
|
||||||
linenr_T qf_current_entry(win_T *wp);
|
linenr_T qf_current_entry(win_T *wp);
|
||||||
int bt_quickfix(buf_T *buf);
|
int bt_quickfix(buf_T *buf);
|
||||||
int bt_nofile(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 */
|
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
|
* Return the number of the current entry (line number in the quickfix
|
||||||
* window).
|
* window).
|
||||||
@@ -2844,27 +2879,17 @@ qf_win_pos_update(
|
|||||||
&& qf_index <= win->w_buffer->b_ml.ml_line_count
|
&& qf_index <= win->w_buffer->b_ml.ml_line_count
|
||||||
&& old_qf_index != qf_index)
|
&& old_qf_index != qf_index)
|
||||||
{
|
{
|
||||||
win_T *old_curwin = curwin;
|
|
||||||
|
|
||||||
curwin = win;
|
|
||||||
curbuf = win->w_buffer;
|
|
||||||
if (qf_index > old_qf_index)
|
if (qf_index > old_qf_index)
|
||||||
{
|
{
|
||||||
curwin->w_redraw_top = old_qf_index;
|
win->w_redraw_top = old_qf_index;
|
||||||
curwin->w_redraw_bot = qf_index;
|
win->w_redraw_bot = qf_index;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
curwin->w_redraw_top = qf_index;
|
win->w_redraw_top = qf_index;
|
||||||
curwin->w_redraw_bot = old_qf_index;
|
win->w_redraw_bot = old_qf_index;
|
||||||
}
|
}
|
||||||
curwin->w_cursor.lnum = qf_index;
|
qf_win_goto(win, 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;
|
|
||||||
}
|
}
|
||||||
return win != NULL;
|
return win != NULL;
|
||||||
}
|
}
|
||||||
|
@@ -1414,3 +1414,16 @@ echo string(loc_two)
|
|||||||
call delete('Xone', 'rf')
|
call delete('Xone', 'rf')
|
||||||
call delete('Xtwo', 'rf')
|
call delete('Xtwo', 'rf')
|
||||||
endfunc
|
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[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1997,
|
||||||
/**/
|
/**/
|
||||||
1996,
|
1996,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user