summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Doc/Zsh/zle.yo22
-rw-r--r--Src/Zle/zle_params.c19
3 files changed, 37 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 946995c59..d65cbe194 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-09-10 Peter Stephenson <pws@csr.com>
+
+ * 20348: Doc/Zsh/zle.yo, Src/Zle/zle_params.c: Rejig WIDGETSTYLE
+ and add WIDGETFUNC.
+
2004-09-09 Peter Stephenson <pws@csr.com>
* 20332: Src/Zle/zle_params.c, Doc/Zsh/zle.yo: add WIDGETSTYLE zle
diff --git a/Doc/Zsh/zle.yo b/Doc/Zsh/zle.yo
index 036c0284c..9af41e820 100644
--- a/Doc/Zsh/zle.yo
+++ b/Doc/Zsh/zle.yo
@@ -732,15 +732,21 @@ vindex(WIDGET)
item(tt(WIDGET) (scalar))(
The name of the widget currently being executed; read-only.
)
+vindex(WIDGETFUNC)
+item(tt(WIDGETFUNC) (scalar))(
+The name of the shell function that implements a widget defined with
+either tt(zle -N) or tt(zle -C). In the former case, this is the second
+argument to the tt(zle -N) command that defined the widget, or
+the first argument if there was no second argument. In the latter case
+this is the the third argument to the tt(zle -C) command that defined the
+widget. Read-only.
+)
vindex(WIDGETSTYLE)
-item(tt(WIDGET) (scalar))(
-Describes the implementation behind the widget currently being executed;
-the second argument that followed tt(zle -C) or tt(zle -N) when the widget
-was defined, if any. If the widget was defined with tt(zle -N) and there was
-no second argument this is the same as the first argument. Hence for
-tt(zle -N) this gives the name of the function that implements the widget,
-and for tt(zle -C) this gives the internal completion widget that defines
-the type of completion. Read-only.
+item(tt(WIDGETSTYLE) (scalar))(
+Describes the implementation behind the completion widget currently being
+executed; the second argument that followed tt(zle -C) when the widget was
+defined. This is the name of a builtin completion widget. For widgets
+defined with tt(zle -N) this is set to the empty string. Read-only.
)
enditem()
diff --git a/Src/Zle/zle_params.c b/Src/Zle/zle_params.c
index efbad97f5..d5fa6dd26 100644
--- a/Src/Zle/zle_params.c
+++ b/Src/Zle/zle_params.c
@@ -93,6 +93,8 @@ static struct zleparam {
zleunsetfn, NULL },
{ "WIDGET", PM_SCALAR | PM_READONLY, NULL, FN(get_widget),
zleunsetfn, NULL },
+ { "WIDGETFUNC", PM_SCALAR | PM_READONLY, NULL, FN(get_widgetfunc),
+ zleunsetfn, NULL },
{ "WIDGETSTYLE", PM_SCALAR | PM_READONLY, NULL, FN(get_widgetstyle),
zleunsetfn, NULL },
{ NULL, 0, NULL, NULL, NULL, NULL }
@@ -282,6 +284,21 @@ get_widget(UNUSED(Param pm))
/**/
static char *
+get_widgetfunc(UNUSED(Param pm))
+{
+ Widget widget = bindk->widget;
+ int flags = widget->flags;
+
+ if (flags & WIDGET_INT)
+ return ".internal"; /* Don't see how this can ever be returned... */
+ else if (flags & WIDGET_NCOMP)
+ return widget->u.comp.func;
+ else
+ return widget->u.fnnam;
+}
+
+/**/
+static char *
get_widgetstyle(UNUSED(Param pm))
{
Widget widget = bindk->widget;
@@ -292,7 +309,7 @@ get_widgetstyle(UNUSED(Param pm))
else if (flags & WIDGET_NCOMP)
return widget->u.comp.wid;
else
- return widget->u.fnnam;
+ return "";
}
/**/