]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.0.1651: cannot filter :ls output for terminal buffers v8.0.1651
authorBram Moolenaar <Bram@vim.org>
Thu, 29 Mar 2018 14:37:16 +0000 (16:37 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 29 Mar 2018 14:37:16 +0000 (16:37 +0200)
Problem:    Cannot filter :ls output for terminal buffers.
Solution:   Add flags for terminal buffers. (Marcin Szamotulski, closes #2751)

runtime/doc/windows.txt
src/buffer.c
src/testdir/test_terminal.vim
src/version.c

index 1c25392ccd622df42420237a3b54c90020967347..c5021cd48c0b79385122d09d392238212af7631e 100644 (file)
@@ -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
index 4b79840cb5640706ba5625f35512d8ea6c047b92..0e13e1f5d4384ff4595fc87cd98568a94a3ffb10 100644 (file)
@@ -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))
index 892da50d13441fe7bb177dfb133d3dbfe019ec43..5e817dee04e5a8d511afaa8202537cb3392d7ff2 100644 (file)
@@ -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
index ae154b4e1a4123d6171c448b701140ddde6e9e00..40746fe2e1e981322895e771421b5cf48e755ada 100644 (file)
@@ -762,6 +762,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1651,
 /**/
     1650,
 /**/