diff src/buffer.c @ 6945:957a3bb312fa v7.4.791

patch 7.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)
author Bram Moolenaar <bram@vim.org>
date Tue, 21 Jul 2015 15:03:06 +0200
parents 62ba356c2d4e
children 7b5f9313f40b
line wrap: on
line diff
--- 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)