From a6135f6114697c7755590b26062668d18f267d2b Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 1 Jun 2017 17:56:14 +0100 Subject: 41191: Check for immortal thingies when checking for specific thingies --- Src/Zle/textobjects.c | 9 +++++---- Src/Zle/zle.h | 7 +++++++ Src/Zle/zle_keymap.c | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) (limited to 'Src') diff --git a/Src/Zle/textobjects.c b/Src/Zle/textobjects.c index 3db0781ff..bf83906f2 100644 --- a/Src/Zle/textobjects.c +++ b/Src/Zle/textobjects.c @@ -48,9 +48,10 @@ int selectword(UNUSED(char **args)) { int n = zmult; - int all = (bindk == t_selectaword || bindk == t_selectablankword); - int (*viclass)(ZLE_CHAR_T) = (bindk == t_selectaword || - bindk == t_selectinword) ? wordclass : blankwordclass; + int all = IS_THINGY(bindk, selectaword) || + IS_THINGY(bindk, selectablankword); + int (*viclass)(ZLE_CHAR_T) = (IS_THINGY(bindk, selectaword) || + IS_THINGY(bindk, selectinword)) ? wordclass : blankwordclass; int sclass = viclass(zleline[zlecs]); int doblanks = all && sclass; @@ -288,7 +289,7 @@ selectargument(UNUSED(char **args)) free(stringaszleline(linein, wstarts[wcur], &zlecs, &tmpsz, &mark)); free(linein); - if (bindk == t_selectinshellword) { + if (IS_THINGY(bindk, selectinshellword)) { ZLE_CHAR_T *match = ZWS("`\'\""); ZLE_CHAR_T *lmatch = ZWS("\'({"), *rmatch = ZWS("\')}"); ZLE_CHAR_T *ematch = match, *found; diff --git a/Src/Zle/zle.h b/Src/Zle/zle.h index 8f92e5611..07b310180 100644 --- a/Src/Zle/zle.h +++ b/Src/Zle/zle.h @@ -230,6 +230,13 @@ struct thingy { /* DISABLED is (1<<0) */ #define TH_IMMORTAL (1<<1) /* can't refer to a different widget */ +/* + * Check if bindk refers to named thingy (a set of bare characters), + * also checking the special .thingy widget. + */ +#define IS_THINGY(bindk, name) \ + ((bindk) == t_ ## name || (bindk) == t_D ## name) + /* command modifier prefixes */ struct modifier { diff --git a/Src/Zle/zle_keymap.c b/Src/Zle/zle_keymap.c index 04eb70675..2e96ac780 100644 --- a/Src/Zle/zle_keymap.c +++ b/Src/Zle/zle_keymap.c @@ -961,7 +961,7 @@ bin_bindkey_meta(char *name, char *kmname, Keymap km, UNUSED(char **argv), UNUSE m[0] = i; metafy(m, 1, META_NOALLOC); fn = keybind(km, m, &str); - if(fn == t_selfinsert || fn == t_undefinedkey) + if(IS_THINGY(fn, selfinsert) || fn == t_undefinedkey) bindkey(km, m, refthingy(Th(metabind[i - 128])), NULL); } return 0; -- cgit 1.4.1