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)
diff --git a/src/buffer.c b/src/buffer.c
index 4b79840..0e13e1f 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2930,18 +2930,34 @@
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 892da50..5e817de 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -45,11 +45,17 @@
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 ae154b4..40746fe 100644
--- a/src/version.c
+++ b/src/version.c
@@ -763,6 +763,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1651,
+/**/
1650,
/**/
1649,