mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.0.1651: cannot filter :ls output for terminal buffers
Problem: Cannot filter :ls output for terminal buffers. Solution: Add flags for terminal buffers. (Marcin Szamotulski, closes #2751)
This commit is contained in:
parent
0c72fe4ed8
commit
0751f51a5b
@ -1,4 +1,4 @@
|
||||
*windows.txt* For Vim version 8.0. Last change: 2017 Sep 25
|
||||
*windows.txt* For Vim version 8.0. Last change: 2018 Mar 29
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -731,8 +731,7 @@ can also get to them with the buffer list commands, like ":bnext".
|
||||
the current window.
|
||||
{cmd} can contain '|' to concatenate several commands.
|
||||
{cmd} must not open or close windows or reorder them.
|
||||
{not in Vi} {not available when compiled without the
|
||||
|+listcmds| feature}
|
||||
{not in Vi}
|
||||
Also see |:tabdo|, |:argdo|, |:bufdo|, |:cdo|, |:ldo|,
|
||||
|:cfdo| and |:lfdo|
|
||||
|
||||
@ -760,8 +759,7 @@ can also get to them with the buffer list commands, like ":bnext".
|
||||
autocommand event is disabled by adding it to
|
||||
'eventignore'. This considerably speeds up editing
|
||||
each buffer.
|
||||
{not in Vi} {not available when compiled without the
|
||||
|+listcmds| feature}
|
||||
{not in Vi}
|
||||
Also see |:tabdo|, |:argdo|, |:windo|, |:cdo|, |:ldo|,
|
||||
|:cfdo| and |:lfdo|
|
||||
|
||||
@ -974,7 +972,6 @@ is no word under the cursor, and a few other things: >
|
||||
A hidden buffer is not displayed in a window, but is still loaded into memory.
|
||||
This makes it possible to jump from file to file, without the need to read or
|
||||
write the file every time you get another buffer in a window.
|
||||
{not available when compiled without the |+listcmds| feature}
|
||||
|
||||
*:buffer-!*
|
||||
If the option 'hidden' ('hid') is set, abandoned buffers are kept for all
|
||||
@ -1049,6 +1046,9 @@ list of buffers. |unlisted-buffer|
|
||||
x buffers with a read error
|
||||
% current buffer
|
||||
# alternate buffer
|
||||
R terminal buffers with a running job
|
||||
F terminal buffers with a finished job
|
||||
? terminal buffers without a job: `:terminal NONE`
|
||||
Combining flags means they are "and"ed together, e.g.:
|
||||
h+ hidden buffers which are modified
|
||||
a+ active buffers which are modified
|
||||
|
16
src/buffer.c
16
src/buffer.c
@ -2930,9 +2930,17 @@ buflist_list(exarg_T *eap)
|
||||
int i;
|
||||
int ro_char;
|
||||
int changed_char;
|
||||
#ifdef FEAT_TERMINAL
|
||||
int job_running;
|
||||
int job_none_open;
|
||||
#endif
|
||||
|
||||
for (buf = firstbuf; buf != NULL && !got_int; buf = buf->b_next)
|
||||
{
|
||||
#ifdef FEAT_TERMINAL
|
||||
job_running = term_job_running(buf->b_term);
|
||||
job_none_open = job_running && term_none_open(buf->b_term);
|
||||
#endif
|
||||
/* skip unlisted buffers, unless ! was used */
|
||||
if ((!buf->b_p_bl && !eap->forceit && !vim_strchr(eap->arg, 'u'))
|
||||
|| (vim_strchr(eap->arg, 'u') && buf->b_p_bl)
|
||||
@ -2942,6 +2950,14 @@ buflist_list(exarg_T *eap)
|
||||
&& (buf->b_ml.ml_mfp == NULL || buf->b_nwindows == 0))
|
||||
|| (vim_strchr(eap->arg, 'h')
|
||||
&& (buf->b_ml.ml_mfp == NULL || buf->b_nwindows != 0))
|
||||
#ifdef FEAT_TERMINAL
|
||||
|| (vim_strchr(eap->arg, 'R')
|
||||
&& (!job_running || (job_running && job_none_open)))
|
||||
|| (vim_strchr(eap->arg, '?')
|
||||
&& (!job_running || (job_running && !job_none_open)))
|
||||
|| (vim_strchr(eap->arg, 'F')
|
||||
&& (job_running || buf->b_term == NULL))
|
||||
#endif
|
||||
|| (vim_strchr(eap->arg, '-') && buf->b_p_ma)
|
||||
|| (vim_strchr(eap->arg, '=') && !buf->b_p_ro)
|
||||
|| (vim_strchr(eap->arg, 'x') && !(buf->b_flags & BF_READERR))
|
||||
|
@ -45,11 +45,17 @@ func Test_terminal_basic()
|
||||
call assert_equal('t', mode())
|
||||
call assert_equal('yes', b:done)
|
||||
call assert_match('%aR[^\n]*running]', execute('ls'))
|
||||
call assert_match('%aR[^\n]*running]', execute('ls R'))
|
||||
call assert_notmatch('%[^\n]*running]', execute('ls F'))
|
||||
call assert_notmatch('%[^\n]*running]', execute('ls ?'))
|
||||
|
||||
call Stop_shell_in_terminal(buf)
|
||||
call term_wait(buf)
|
||||
call assert_equal('n', mode())
|
||||
call assert_match('%aF[^\n]*finished]', execute('ls'))
|
||||
call assert_match('%aF[^\n]*finished]', execute('ls F'))
|
||||
call assert_notmatch('%[^\n]*finished]', execute('ls R'))
|
||||
call assert_notmatch('%[^\n]*finished]', execute('ls ?'))
|
||||
|
||||
" closing window wipes out the terminal buffer a with finished job
|
||||
close
|
||||
|
@ -762,6 +762,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1651,
|
||||
/**/
|
||||
1650,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user