summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-03-29 16:37:16 +0200
committerBram Moolenaar <Bram@vim.org>2018-03-29 16:37:16 +0200
commit0751f51a5b428805a8c1e9fe529693d032bec991 (patch)
tree73b25f3f4b0b3fc37e03ee5e3e84b64da6fe844d
parent0c72fe4ed8430db41f43c5878e6ee60265dc49e9 (diff)
patch 8.0.1651: cannot filter :ls output for terminal buffersv8.0.1651
Problem: Cannot filter :ls output for terminal buffers. Solution: Add flags for terminal buffers. (Marcin Szamotulski, closes #2751)
-rw-r--r--runtime/doc/windows.txt12
-rw-r--r--src/buffer.c20
-rw-r--r--src/testdir/test_terminal.vim6
-rw-r--r--src/version.c2
4 files changed, 32 insertions, 8 deletions
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
index 1c25392ccd..c5021cd48c 100644
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -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
diff --git a/src/buffer.c b/src/buffer.c
index 4b79840cb5..0e13e1f5d4 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -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))
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 892da50d13..5e817dee04 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -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
diff --git a/src/version.c b/src/version.c
index ae154b4e1a..40746fe2e1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -763,6 +763,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1651,
+/**/
1650,
/**/
1649,