Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: [Feature Request] Re: Can one detect that Zsh/Zle is in recursive-edit?
- X-seq: zsh-workers 43294
- From: Peter Stephenson <p.stephenson@xxxxxxxxxxx>
- To: Zsh hackers' list <zsh-workers@xxxxxxx>
- Subject: Re: [Feature Request] Re: Can one detect that Zsh/Zle is in recursive-edit?
- Date: Tue, 14 Aug 2018 18:06:56 +0100
- Cms-type: 201P
- Dkim-filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20180814170659euoutp01ba7e0ecb9e61eb2c74fd56a207041e56~Kzy4EORWU1632616326euoutp01e
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1534266419; bh=Uf4+Gdzd6fkCzIf1sFgkWI3quA9TxtliC0UCTVfI0EU=; h=Date:From:To:Subject:In-Reply-To:References:From; b=Vj1GEfEPhYClbBCSUf2WtDzjrAyZ1kbg1AVgdbWC5p4KI/MfP4jOEgFUTT70JFP6k uP4uZ5Bbxe3T0PUk+wKt2h27i3Q2zAHBmAokf3p7pDby+2pFsBQWKwo6quyoXsUHOm /CFf4KFIrM9Ad+VPV1JLufguXCN0Mi/g3NRZYGY8=
- In-reply-to: <CAKc7PVBsSGqW1m5hKTPYDFTmi+=EqvWAJExCWzBkHW8OjHO_zQ@mail.gmail.com>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- List-unsubscribe: <mailto:zsh-workers-unsubscribe@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- Organization: SCSC
- References: <CAKc7PVC_i6fvhLSoWqFdNa0egtXj+Sfoou0FUQmjU+TXexyOFA@mail.gmail.com> <CGME20180814161906epcas3p37378a9a3eb58ea9a526c3b9fadd91531@epcas3p3.samsung.com> <CAKc7PVBsSGqW1m5hKTPYDFTmi+=EqvWAJExCWzBkHW8OjHO_zQ@mail.gmail.com>
On Tue, 14 Aug 2018 18:17:36 +0200
Sebastian Gniazdowski <sgniazdowski@xxxxxxxxx> wrote:
> If there currently is no method of detecting .recursive-edit
> "session", then could a feature request be responded positively:
> please add an indicator that Zsh is in .recursive-edit state
> ("session").
It's certainly easy to do (although probably not hard to add at
the user level as calls to recursive-edit ought to be explicit).
diff --git a/Doc/Zsh/zle.yo b/Doc/Zsh/zle.yo
index b72606c..6ae4863 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 7ec8afe..db70e7d 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 20735e6..9f4fb5a 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 }
};
@@ -528,6 +531,13 @@ get_pending(UNUSED(Param pm))
/**/
static zlong
+get_recursive(UNUSED(Param pm))
+{
+ return zle_recursive;
+}
+
+/**/
+static zlong
get_yankstart(UNUSED(Param pm))
{
return yankb;
Messages sorted by:
Reverse Date,
Date,
Thread,
Author