summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2015-07-21 15:03:06 +0200
committerBram Moolenaar <Bram@vim.org>2015-07-21 15:03:06 +0200
commitd51cb706a4e3ae99555bc214a64c83603c701139 (patch)
tree6914c0192b47519a6ff749d82405148a1ce811db
parentd113a80c77101e9f5723abb075882012753cf611 (diff)
patch 7.4.791v7.4.791
Problem: The buffer list can be very long. Solution: Add an argument to ":ls" to specify the type of buffer to list. (Marcin Szamotulski)
-rw-r--r--runtime/doc/windows.txt22
-rw-r--r--src/buffer.c15
-rw-r--r--src/ex_cmds.h6
-rw-r--r--src/version.c2
4 files changed, 38 insertions, 7 deletions
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
index 7f5d970eda..6d9aa0b4bf 100644
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -986,9 +986,10 @@ A buffer can also be unlisted. This means it exists, but it is not in the
list of buffers. |unlisted-buffer|
-:files[!] *:files*
-:buffers[!] *:buffers* *:ls*
-:ls[!] Show all buffers. Example:
+:files[!] [flags] *:files*
+:buffers[!] [flags] *:buffers* *:ls*
+:ls[!] [flags]
+ Show all buffers. Example:
1 #h "/test/text" line 1 ~
2u "asdf" line 0 ~
@@ -1014,6 +1015,21 @@ list of buffers. |unlisted-buffer|
+ a modified buffer
x a buffer with read errors
+ [flags] can be a combination of the following characters,
+ which restrict the buffers to be listed:
+ + modified buffers
+ - buffers with 'modifiable' off
+ = readonly buffers
+ a active buffers
+ u unloaded buffers (overrides the "!")
+ h hidden buffers
+ x buffers with a read error
+ % current buffer
+ # alternate buffer
+ Combining flags means they are "and"ed together, e.g.:
+ h+ hidden buffers which are modified
+ a+ active buffers which are modified
+
*:bad* *:badd*
:bad[d] [+lnum] {fname}
Add file name {fname} to the buffer list, without loading it.
diff --git a/src/buffer.c b/src/buffer.c
index c4d5e340ba..19df710e88 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2761,7 +2761,20 @@ buflist_list(eap)
for (buf = firstbuf; buf != NULL && !got_int; buf = buf->b_next)
{
/* skip unlisted buffers, unless ! was used */
- if (!buf->b_p_bl && !eap->forceit)
+ 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))
+ || (vim_strchr(eap->arg, 'h')
+ && (buf->b_ml.ml_mfp == NULL || buf->b_nwindows != 0))
+ || (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))
+ || (vim_strchr(eap->arg, '%') && buf != curbuf)
+ || (vim_strchr(eap->arg, '#')
+ && (buf == curbuf || curwin->w_alt_fnum != buf->b_fnum)))
continue;
msg_putchar('\n');
if (buf_spname(buf) != NULL)
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 21d42d55d4..7945956971 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -217,7 +217,7 @@ EX(CMD_browse, "browse", ex_wrongmodifier,
NEEDARG|EXTRA|NOTRLCOM|CMDWIN,
ADDR_LINES),
EX(CMD_buffers, "buffers", buflist_list,
- BANG|TRLBAR|CMDWIN,
+ BANG|EXTRA|TRLBAR|CMDWIN,
ADDR_LINES),
EX(CMD_bufdo, "bufdo", ex_listdo,
BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
@@ -526,7 +526,7 @@ EX(CMD_file, "file", ex_file,
RANGE|NOTADR|ZEROR|BANG|FILE1|TRLBAR,
ADDR_LINES),
EX(CMD_files, "files", buflist_list,
- BANG|TRLBAR|CMDWIN,
+ BANG|EXTRA|TRLBAR|CMDWIN,
ADDR_LINES),
EX(CMD_filetype, "filetype", ex_filetype,
EXTRA|TRLBAR|CMDWIN,
@@ -847,7 +847,7 @@ EX(CMD_lwindow, "lwindow", ex_cwindow,
RANGE|NOTADR|COUNT|TRLBAR,
ADDR_LINES),
EX(CMD_ls, "ls", buflist_list,
- BANG|TRLBAR|CMDWIN,
+ BANG|EXTRA|TRLBAR|CMDWIN,
ADDR_LINES),
EX(CMD_move, "move", ex_copymove,
RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY,
diff --git a/src/version.c b/src/version.c
index 18ba7d0ffe..2b288722fc 100644
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 791,
+/**/
790,
/**/
789,