zsh-workers
 help / color / mirror / code / Atom feed
From: Peter Stephenson <p.stephenson@samsung.com>
To: Zsh hackers' list <zsh-workers@zsh.org>
Subject: Re: [Feature Request] Re: Can one detect that Zsh/Zle is in recursive-edit?
Date: Tue, 14 Aug 2018 18:06:56 +0100	[thread overview]
Message-ID: <20180814170657eucas1p1b9864da7e9086c27fa499e99152e14cb~Kzy2ccSm-2262422624eucas1p1t@eucas1p1.samsung.com> (raw)
In-Reply-To: <CAKc7PVBsSGqW1m5hKTPYDFTmi+=EqvWAJExCWzBkHW8OjHO_zQ@mail.gmail.com>

On Tue, 14 Aug 2018 18:17:36 +0200
Sebastian Gniazdowski <sgniazdowski@gmail.com> 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;


       reply	other threads:[~2018-08-14 17:14 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAKc7PVC_i6fvhLSoWqFdNa0egtXj+Sfoou0FUQmjU+TXexyOFA@mail.gmail.com>
     [not found] ` <CGME20180814161906epcas3p37378a9a3eb58ea9a526c3b9fadd91531@epcas3p3.samsung.com>
     [not found]   ` <CAKc7PVBsSGqW1m5hKTPYDFTmi+=EqvWAJExCWzBkHW8OjHO_zQ@mail.gmail.com>
2018-08-14 17:06     ` Peter Stephenson [this message]
2018-08-14 17:30       ` Bart Schaefer
2018-08-14 17:44       ` Sebastian Gniazdowski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='20180814170657eucas1p1b9864da7e9086c27fa499e99152e14cb~Kzy2ccSm-2262422624eucas1p1t@eucas1p1.samsung.com' \
    --to=p.stephenson@samsung.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).