From 3c93497eb701d8f220bc32d38e1f12bfb534c390 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 16 Aug 2018 19:23:13 +0100 Subject: 43294: Add ZLE_RECURSIVE parameter. --- ChangeLog | 5 +++++ Doc/Zsh/zle.yo | 7 +++++++ Src/Zle/zle_main.c | 9 +++++++++ Src/Zle/zle_params.c | 10 ++++++++++ 4 files changed, 31 insertions(+) diff --git a/ChangeLog b/ChangeLog index 1565ea370..390324fe6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2018-08-16 Peter Stephenson + + * 43294: Doc/Zsh/zle.yo, Src/Zle/zle_main.c, + Src/Zle/zle_params.c: Add ZLE_RECURSIVE parameter. + 2018-08-15 dana * 43302: Completion/Unix/Command/_du: Change -B to -B+ diff --git a/Doc/Zsh/zle.yo b/Doc/Zsh/zle.yo index b72606c0b..6ae4863c6 100644 --- a/Doc/Zsh/zle.yo +++ b/Doc/Zsh/zle.yo @@ -1085,6 +1085,13 @@ wrappers of tt(bracketed-paste). See also tt(zle -f). tt(YANK_ACTIVE) is read-only. ) +vindex(ZLE_RECURSIVE) +item(tt(ZLE_RECURSIVE) (integer))( +Usually zero, but incremented inside any instance of +tt(recursive-edit). Hence indicates the current recursion level. + +tt(ZLE_RECURSIVE) is read-only. +) vindex(ZLE_STATE) item(tt(ZLE_STATE) (scalar))( Contains a set of space-separated words that describe the current tt(zle) diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c index 7ec8afeb6..db70e7d7e 100644 --- a/Src/Zle/zle_main.c +++ b/Src/Zle/zle_main.c @@ -58,6 +58,11 @@ mod_export int incompctlfunc; /**/ mod_export int hascompmod; +/* Increment for each nested recursive-edit */ + +/**/ +mod_export int zle_recursive; + /* ZLRF_* flags passed to zleread() */ /**/ @@ -1941,6 +1946,8 @@ recursiveedit(UNUSED(char **args)) int locerror; int q = queue_signal_level(); + ++zle_recursive; + /* zlecore() expects to be entered with signal queue disabled */ dont_queue_signals(); @@ -1950,6 +1957,8 @@ recursiveedit(UNUSED(char **args)) restore_queue_signals(q); + --zle_recursive; + locerror = errflag ? 1 : 0; errflag = done = eofsent = 0; diff --git a/Src/Zle/zle_params.c b/Src/Zle/zle_params.c index 20735e619..9f4fb5ac2 100644 --- a/Src/Zle/zle_params.c +++ b/Src/Zle/zle_params.c @@ -93,6 +93,8 @@ static const struct gsu_integer numeric_gsu = { get_numeric, set_numeric, unset_numeric }; static const struct gsu_integer pending_gsu = { get_pending, NULL, zleunsetfn }; +static const struct gsu_integer recursive_gsu = +{ get_recursive, NULL, zleunsetfn }; static const struct gsu_integer region_active_gsu = { get_region_active, set_region_active, zleunsetfn }; static const struct gsu_integer undo_change_no_gsu = @@ -180,6 +182,7 @@ static struct zleparam { { "SUFFIX_START", PM_INTEGER, GSU(suffixstart_gsu), NULL }, { "SUFFIX_END", PM_INTEGER, GSU(suffixend_gsu), NULL }, { "SUFFIX_ACTIVE", PM_INTEGER | PM_READONLY, GSU(suffixactive_gsu), NULL }, + { "ZLE_RECURSIVE", PM_INTEGER | PM_READONLY, GSU(recursive_gsu), NULL }, { "ZLE_STATE", PM_SCALAR | PM_READONLY, GSU(zle_state_gsu), NULL }, { NULL, 0, NULL, NULL } }; @@ -526,6 +529,13 @@ get_pending(UNUSED(Param pm)) return noquery(0); } +/**/ +static zlong +get_recursive(UNUSED(Param pm)) +{ + return zle_recursive; +} + /**/ static zlong get_yankstart(UNUSED(Param pm)) -- cgit 1.4.1