Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
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)
- Loading branch information
Showing
with
32 additions
and
8 deletions.
-
+6
−6
runtime/doc/windows.txt
-
+18
−2
src/buffer.c
-
+6
−0
src/testdir/test_terminal.vim
-
+2
−0
src/version.c
|
|
@@ -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 |
|
|
|
@@ -2930,18 +2930,34 @@ 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) |
|
|
|| (vim_strchr(eap->arg, '+') |
|
|
&& ((buf->b_flags & BF_READERR) || !bufIsChanged(buf))) |
|
|
|| (vim_strchr(eap->arg, 'a') |
|
|
&& (buf->b_ml.ml_mfp == NULL || buf->b_nwindows == 0)) |
|
|
&& (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)) |
|
|
&& (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, |
|
|
/**/ |
|
|