From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5657 invoked by alias); 14 Aug 2018 17:14:15 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 43294 Received: (qmail 10412 invoked by uid 1010); 14 Aug 2018 17:14:15 -0000 X-Qmail-Scanner-Diagnostics: from mailout1.w1.samsung.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(210.118.77.11):SA:0(-6.9/5.0):. Processed in 3.042511 secs); 14 Aug 2018 17:14:15 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, SPF_HELO_PASS,SPF_PASS,T_DKIMWL_WL_HIGH,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | 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= X-AuditID: cbfec7f4-835ff700000010c6-fb-5b730c320d41 Date: Tue, 14 Aug 2018 18:06:56 +0100 From: Peter Stephenson To: Zsh hackers' list Subject: Re: [Feature Request] Re: Can one detect that Zsh/Zle is in recursive-edit? In-Reply-To: Organization: SCSC X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.30; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrHIsWRmVeSWpSXmKPExsWy7djP87pGPMXRBv+mqlkcbH7I5MDoserg B6YAxigum5TUnMyy1CJ9uwSujPbpvewFyyUqGqb3MjcwPhTuYuTkkBAwkfjW9puti5GLQ0hg BaPE3GW3mCGcPiaJ5WsmsEA4vUwSq4+sAMpwgLXsmSQNEV/OKNGy8jsTXNG3J1vZIZwzjBLL PixnhHAuMEpsOTmJGWQji4CqxNSXb1hBbDYBQ4mpm2YzgtgiAtoSnz6fZgNZISwQJvFgegFI mFMgUGLxu4UsIGF+ASGJC822EHfbSxzdc5IJxOYVEJQ4OfMJC4jNLCAvsf3tHLAXJAQ+s0ls Pf0dqqhMYuWBqcwQzS4STx5/ZIWwhSVeHd/CDmHLSPzfOZ8JormdUWLNpNfsEE4Po8Smo3cY IaqsJfpuX2QEuYhZQFNi/S59iLCjxM8pxxkhQcQnceOtIMRBfBKTtk2HhhyvREebEES1msSO pq2MExiVZyF5YRaSF2YhzF/AyLyKUTy1tDg3PbXYKC+1XK84Mbe4NC9dLzk/dxMjMBWc/nf8 yw7GXX+SDjEKcDAq8fAGXCqKFmJNLCuuzD3EKMHBrCTCK8NYHC3Em5JYWZValB9fVJqTWnyI UZqDRUmcl08rLVpIID2xJDU7NbUgtQgmy8TBKdXAKGb9wc5aZMaECrUFgYWGjg1nH9Wx9tbL Pl8xuyEnbFpiyE0BOQMN7d2CN4T1P7xe65Me/I/lmtWChasUHkUFzF+4/UCWNIOKbuDawI+5 02qDmgW+2rzZ9Pnlt/RQM8+7Xc7rtszeGJ045/LMML4zr2Qv/P13s1Qi9coM2zdusXkTpIuV so54K7EUZyQaajEXFScCACMjAecBAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFuphkeLIzCtJLcpLzFFi42I5/e/4XV1DnuJogx3/VCwONj9kcmD0WHXw A1MAY5SeTVF+aUmqQkZ+cYmtUrShhZGeoaWFnpGJpZ6hsXmslZGpkr6dTUpqTmZZapG+XYJe Rvv0XvaC5RIVDdN7mRsYHwp3MXJwSAiYSOyZJN3FyMUhJLCUUeL+3BbWLkZOoLiMxKcrH9kh bGGJP9e62CCKupkkbn/8xgThnGGUaDg6jRXCucAoMXtfExtIC4uAqsTUl2/ARrEJGEpM3TSb EcQWEdCW+PT5NBvIamGBMIkH0wtAwrwCzhJz9j9lArE5BQIlFr9byAIx8zWjRP/kvawg9fwC QhIXmm0hLrKXOLrnJBNEr6DEyZlPWEBsZgEdiROrjjFD2PIS29/OYZ7AKDwLSdksJGWzkJQt YGRexSiSWlqcm55bbKhXnJhbXJqXrpecn7uJERgT24793LyD8dLG4EOMAhyMSjy8AZeKooVY E8uKK3MPMUpwMCuJ8MowFkcL8aYkVlalFuXHF5XmpBYfYjQFhsVEZinR5HxgvOaVxBuaGppb WBqaG5sbm1koifOeN6iMEhJITyxJzU5NLUgtgulj4uCUamDUMQ/sm5VQ9o6ddYfkFUsWafsT kbttTyQrbTeUaat/yvPyiBf37ve6mh/ta/ZmNji2tVTlO3/TOLf8MFfnlfZPh35kLDiYkOCS 1iW+QjVJtzvmaIj9+x9M3IsEs8o5fBT7JgfUCxZ/PS7Wkt9k+fRWbt8Neytl3pP5WTsn5UaW JX4+8S7BS4mlOCPRUIu5qDgRADGRr2yfAgAA Message-Id: <20180814170657eucas1p1b9864da7e9086c27fa499e99152e14cb~Kzy2ccSm-2262422624eucas1p1t@eucas1p1.samsung.com> X-CMS-MailID: 20180814170657eucas1p1b9864da7e9086c27fa499e99152e14cb X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20180814161906epcas3p37378a9a3eb58ea9a526c3b9fadd91531 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180814161906epcas3p37378a9a3eb58ea9a526c3b9fadd91531 References: On Tue, 14 Aug 2018 18:17:36 +0200 Sebastian Gniazdowski 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;