summaryrefslogtreecommitdiff
path: root/Src/Zle/zle_thingy.c
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@gmail.com>2015-09-29 06:11:24 +0200
committerMikael Magnusson <mikachu@gmail.com>2015-10-01 03:51:44 +0200
commita855d7bd246ef44d5393c3088aae8214d41d2b85 (patch)
treea54873d853f8ef2c1d652788fb142dfd53bdb1c3 /Src/Zle/zle_thingy.c
parenta90cf551efc92184ab25da25b837296d1c4edc8a (diff)
downloadzsh-a855d7bd246ef44d5393c3088aae8214d41d2b85.tar.gz
zsh-a855d7bd246ef44d5393c3088aae8214d41d2b85.zip
36709: zle -f from inside widget to set flags and make yank start/end zle params writable
Diffstat (limited to 'Src/Zle/zle_thingy.c')
-rw-r--r--Src/Zle/zle_thingy.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/Src/Zle/zle_thingy.c b/Src/Zle/zle_thingy.c
index da3a6d458..3963d7eaf 100644
--- a/Src/Zle/zle_thingy.c
+++ b/Src/Zle/zle_thingy.c
@@ -352,6 +352,7 @@ bin_zle(char *name, char **args, Options ops, UNUSED(int func))
{ 'U', bin_zle_unget, 1, 1 },
{ 'K', bin_zle_keymap, 1, 1 },
{ 'I', bin_zle_invalidate, 0, 0 },
+ { 'f', bin_zle_flags, 1, -1 },
{ 'F', bin_zle_fd, 0, 2 },
{ 'T', bin_zle_transform, 0, 2},
{ 0, bin_zle_call, 0, -1 },
@@ -625,6 +626,44 @@ bin_zle_complete(char *name, char **args, UNUSED(Options ops), UNUSED(char func)
/**/
static int
+bin_zle_flags(char *name, char **args, UNUSED(Options ops), UNUSED(char func))
+{
+ char **flag;
+
+ if (!zle_usable()) {
+ zwarnnam(name, "can only set flags from a widget");
+ return 1;
+ }
+
+ if (bindk) {
+ Widget w = bindk->widget;
+ if (w) {
+ for (flag = args; *flag; flag++) {
+ if (!strcmp(*flag, "yank")) {
+ w->flags |= ZLE_YANKAFTER;
+ } else if (!strcmp(*flag, "yankbefore"))
+ w->flags |= ZLE_YANKBEFORE;
+ else if (!strcmp(*flag, "kill"))
+ w->flags |= ZLE_KILL;
+ /*
+ * These won't do anything yet, because of how execzlefunc
+ * handles user widgets
+ } else if (!strcmp(*flag, "menucmp"))
+ w->flags |= ZLE_MENUCMP;
+ else if (!strcmp(*flag, "linemove"))
+ w->flags |= ZLE_LINEMOVE;
+ else if (!strcmp(*flag, "keepsuffix"))
+ w->flags |= ZLE_KEEPSUFFIX;
+ */
+ else
+ zwarnnam(name, "invalid flag `%s' given to zle -f", *flag);
+ }
+ }
+ }
+}
+
+/**/
+static int
zle_usable()
{
return zleactive && !incompctlfunc && !incompfunc