about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2011-11-04 14:14:26 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2011-11-04 14:14:26 +0000
commit45faf8f5b2758a638e0958928262ca9d26980885 (patch)
treef8ce41f5256066c0badafad6a561218007dc5804
parentfdb00982f5405a869392e0dfea6a76e044af212a (diff)
downloadzsh-45faf8f5b2758a638e0958928262ca9d26980885.tar.gz
zsh-45faf8f5b2758a638e0958928262ca9d26980885.tar.xz
zsh-45faf8f5b2758a638e0958928262ca9d26980885.zip
29891: make zle -lL with arguments work
-rw-r--r--ChangeLog7
-rw-r--r--Doc/Zsh/zle.yo15
-rw-r--r--Src/Zle/zle_thingy.c12
3 files changed, 27 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 84e92c328..d2a18fd80 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-11-04  Peter Stephenson  <pws@csr.com>
+
+	* 29891: Doc/Zsh/zle.yo, Src/Zle/zle_thingy.c: allow "zle -lL"
+	with arguments to list in -L format.
+
 2011-10-31  Peter Stephenson  <pws@csr.com>
 
 	* Jun T: 29883: Src/Builtins/rlimits.c, Src/Modules/zftp.c: cast
@@ -15533,5 +15538,5 @@
 
 *****************************************************
 * This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.5491 $
+* $Revision: 1.5492 $
 *****************************************************
diff --git a/Doc/Zsh/zle.yo b/Doc/Zsh/zle.yo
index 5f4d639d3..752247461 100644
--- a/Doc/Zsh/zle.yo
+++ b/Doc/Zsh/zle.yo
@@ -392,11 +392,16 @@ commands to create the widgets.
 When combined with the tt(-a) option, all widget names are listed,
 including the builtin ones. In this case the tt(-L) option is ignored.
 
-If at least one var(string) is given, nothing will be printed but the
-return status will be zero if all var(string)s are names of existing
-widgets (or of user-defined widgets if the tt(-a) flag is not given)
-and non-zero if at least one var(string) is not a name of an defined
-widget.
+If at least one var(string) is given, and tt(-a) is present or tt(-L) is
+not used, nothing will be printed.  The return status will be zero if
+all var(string)s are names of existing widgets and non-zero if at least one
+var(string) is not a name of a defined widget.  If tt(-a) is also
+present, all widget names are used for the comparison including builtin
+widgets, else only user-defined widgets are used.
+
+If at least one var(string) is present and the tt(-L) option is used,
+user-defined widgets matching any var(string) are listed in the form of
+tt(zle) commands to create the widgets.
 )
 item(tt(-D) var(widget) ...)(
 Delete the named var(widget)s.
diff --git a/Src/Zle/zle_thingy.c b/Src/Zle/zle_thingy.c
index f712e1750..03e73b4ca 100644
--- a/Src/Zle/zle_thingy.c
+++ b/Src/Zle/zle_thingy.c
@@ -394,9 +394,13 @@ bin_zle_list(UNUSED(char *name), char **args, Options ops, UNUSED(char func))
 	Thingy t;
 
 	for (; *args && !ret; args++) {
-	    if (!(t = (Thingy) thingytab->getnode2(thingytab, *args)) ||
+	    HashNode hn = thingytab->getnode2(thingytab, *args);
+	    if (!(t = (Thingy) hn) ||
 		(!OPT_ISSET(ops,'a') && (t->widget->flags & WIDGET_INT)))
 		ret = 1;
+	    else if (OPT_ISSET(ops,'L')) {
+		scanlistwidgets(hn, 1);
+	    }
 	}
 	return ret;
     }
@@ -483,6 +487,12 @@ bin_zle_keymap(char *name, char **args, UNUSED(Options ops), UNUSED(char func))
     return selectkeymap(*args, 0);
 }
 
+/*
+ * List a widget.
+ * If list is negative, just print the name.
+ * If list is 0, use abbreviated format.
+ * If list is positive, output as a command.
+ */
 /**/
 static void
 scanlistwidgets(HashNode hn, int list)