mirror of
https://github.com/vim/vim.git
synced 2025-07-25 10:54:51 -04:00
patch 8.0.1386: cannot select modified buffers with getbufinfo()
Problem: Cannot select modified buffers with getbufinfo(). Solution: Add the "bufmodified" flag. (Yegappan Lakshmanan, closes #2431)
This commit is contained in:
parent
59eb016dff
commit
8e6a31df81
@ -4173,6 +4173,7 @@ getbufinfo([{dict}])
|
|||||||
be specified in {dict}:
|
be specified in {dict}:
|
||||||
buflisted include only listed buffers.
|
buflisted include only listed buffers.
|
||||||
bufloaded include only loaded buffers.
|
bufloaded include only loaded buffers.
|
||||||
|
bufmodified include only modified buffers.
|
||||||
|
|
||||||
Otherwise, {expr} specifies a particular buffer to return
|
Otherwise, {expr} specifies a particular buffer to return
|
||||||
information for. For the use of {expr}, see |bufname()|
|
information for. For the use of {expr}, see |bufname()|
|
||||||
|
@ -4137,6 +4137,7 @@ f_getbufinfo(typval_T *argvars, typval_T *rettv)
|
|||||||
int filtered = FALSE;
|
int filtered = FALSE;
|
||||||
int sel_buflisted = FALSE;
|
int sel_buflisted = FALSE;
|
||||||
int sel_bufloaded = FALSE;
|
int sel_bufloaded = FALSE;
|
||||||
|
int sel_bufmodified = FALSE;
|
||||||
|
|
||||||
if (rettv_list_alloc(rettv) != OK)
|
if (rettv_list_alloc(rettv) != OK)
|
||||||
return;
|
return;
|
||||||
@ -4159,6 +4160,10 @@ f_getbufinfo(typval_T *argvars, typval_T *rettv)
|
|||||||
di = dict_find(sel_d, (char_u *)"bufloaded", -1);
|
di = dict_find(sel_d, (char_u *)"bufloaded", -1);
|
||||||
if (di != NULL && get_tv_number(&di->di_tv))
|
if (di != NULL && get_tv_number(&di->di_tv))
|
||||||
sel_bufloaded = TRUE;
|
sel_bufloaded = TRUE;
|
||||||
|
|
||||||
|
di = dict_find(sel_d, (char_u *)"bufmodified", -1);
|
||||||
|
if (di != NULL && get_tv_number(&di->di_tv))
|
||||||
|
sel_bufmodified = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (argvars[0].v_type != VAR_UNKNOWN)
|
else if (argvars[0].v_type != VAR_UNKNOWN)
|
||||||
@ -4178,7 +4183,8 @@ f_getbufinfo(typval_T *argvars, typval_T *rettv)
|
|||||||
if (argbuf != NULL && argbuf != buf)
|
if (argbuf != NULL && argbuf != buf)
|
||||||
continue;
|
continue;
|
||||||
if (filtered && ((sel_bufloaded && buf->b_ml.ml_mfp == NULL)
|
if (filtered && ((sel_bufloaded && buf->b_ml.ml_mfp == NULL)
|
||||||
|| (sel_buflisted && !buf->b_p_bl)))
|
|| (sel_buflisted && !buf->b_p_bl)
|
||||||
|
|| (sel_bufmodified && !buf->b_changed)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
d = get_buffer_info(buf);
|
d = get_buffer_info(buf);
|
||||||
|
@ -20,6 +20,13 @@ function Test_getbufwintabinfo()
|
|||||||
call assert_equal('vim', l[0].variables.editor)
|
call assert_equal('vim', l[0].variables.editor)
|
||||||
call assert_notequal(-1, index(l[0].windows, bufwinid('%')))
|
call assert_notequal(-1, index(l[0].windows, bufwinid('%')))
|
||||||
|
|
||||||
|
" Test for getbufinfo() with 'bufmodified'
|
||||||
|
call assert_equal(0, len(getbufinfo({'bufmodified' : 1})))
|
||||||
|
call setbufline('Xtestfile1', 1, ["Line1"])
|
||||||
|
let l = getbufinfo({'bufmodified' : 1})
|
||||||
|
call assert_equal(1, len(l))
|
||||||
|
call assert_equal(bufnr('Xtestfile1'), l[0].bufnr)
|
||||||
|
|
||||||
if has('signs')
|
if has('signs')
|
||||||
call append(0, ['Linux', 'Windows', 'Mac'])
|
call append(0, ['Linux', 'Windows', 'Mac'])
|
||||||
sign define Mark text=>> texthl=Search
|
sign define Mark text=>> texthl=Search
|
||||||
|
@ -771,6 +771,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 */
|
||||||
|
/**/
|
||||||
|
1386,
|
||||||
/**/
|
/**/
|
||||||
1385,
|
1385,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user