diff options
Diffstat (limited to 'Src/Zle/zle_params.c')
-rw-r--r-- | Src/Zle/zle_params.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/Src/Zle/zle_params.c b/Src/Zle/zle_params.c index 74f905ef4..7e15d3d8b 100644 --- a/Src/Zle/zle_params.c +++ b/Src/Zle/zle_params.c @@ -65,6 +65,8 @@ static struct zleparam { zleunsetfn, NULL }, { "LASTWIDGET", PM_SCALAR | PM_READONLY, NULL, FN(get_lwidget), zleunsetfn, NULL }, + { "keys", PM_ARRAY | PM_READONLY, NULL, FN(get_keys), + zleunsetfn, NULL }, { NULL, 0, NULL, NULL, NULL, NULL } }; @@ -216,3 +218,29 @@ get_lwidget(Param pm) { return (lbindk ? lbindk->nam : ""); } + +/**/ +static char ** +get_keys(Param pm) +{ + char **r, **q, *p, *k, c; + + r = (char **) halloc((strlen(keybuf) + 1) * sizeof(char *)); + for (q = r, p = keybuf; (c = *p); q++, p++) { + k = *q = (char *) halloc(5); + if (c & 0x80) { + *k++ = 'M'; + *k++ = '-'; + c &= 0x7f; + } + if (c < 32 || c == 0x7f) { + *k++ = '^'; + c ^= 64; + } + *k++ = c; + *k = '\0'; + } + *q = NULL; + + return r; +} |