From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 23758 invoked from network); 17 Sep 2023 21:55:43 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 17 Sep 2023 21:55:43 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1694987743; b=BdC0mdsoiKqDyEBHGsYihpjTX25/73/YyKPJiafE3OFyX7fyvCdeGcomLc0bdrZeP7dbVF8WYb PD0C+01TdOyEV3g6BKX02u7n6PvN8tgvjmWlkfj0nevSZbQjMmL6GzpPr4KuWBya5UqAI82BSC 4nVyTtxv/Wkbs5AeFG7LGo4oICPDzibSvamItF+BuoQp3uVFY3UincYvlKsaJtWNX8QtPEtU0I DTBjZzTcM7f82RQdmynNjD6LdsAFRj26HUqhq+HqonJ2GVMMTZSwbo1AlA3KUXAxjHVEXUD728 tvG5irOFWfuZf6Hqqitk8C/897dzM3vmbtTmca8vXrMjnA==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-ej1-f43.google.com) smtp.remote-ip=209.85.218.43; dkim=pass header.d=brasslantern-com.20230601.gappssmtp.com header.s=20230601 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1694987743; bh=84neQo3kNbI6Qe57dP582EHxR4wGpJ/l5xU9hjRjx94=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:MIME-Version: DKIM-Signature:DKIM-Signature; b=BmpQVwl6X+OS8IBU7h9Wa7Ub5+e/LMUpdPIz67hM7IbFiDUfqphP28ZR19Wyw32HBDlVvgp3gy ahNFr6v5hOygzOftuR5n0LcKe0598jSfyDD6HB0kXsiVLbU7zlUfj8XyJb57J71rKLj5tZsUjl +9h4Bqn68rodLxDAlWgCIOmgX/1qPppvQ7wzXIAd/B3fDdnzE+XNkkXBWBB58few6uw13/2fNd NUC7iasxF0VPFCIvGJWn7Aq149hpE9M0z1qw1bLXcpHtJAKIpEBB/WUqpx5QwFw3T8exu1Ukhg yZiL1tEuYDlGNcCZnIFEFjY/yS4CqbwMjBsy3Uox8u8l6Q==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:To:Subject:Message-ID: Date:From:MIME-Version:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=G1ychUxeRI7ub9WxLL4zJebyNa2s+SlR9HnXB0PYh+w=; b=K3LkfZvBFfceE1oy+Unso+L6ac xsAYu+7xXOY6Nj/HtkwjqWisiYfQBk0zlzhVjgepZCMVlTZBe1dGAU5MQDnuF7shVpxlNyqvFqhia BD7I60m/RrdUvEmRk9ICJOEHyIkbfpCPtAApGj2WPI6ITOrl+EAx17P2gCaEG6/V2orLeykOWxkkR aaKQIHn7goD7CMVP0y9ms2cReOiyuVN/V1iRXCUMirZlUdGQqonVztf8fCAzjWA5JEtz9t08JJj93 gsokyPXDtmdSEfTMUfsfVhE0FPTBCYgSuBDzps2hu2QWLH2rzjU62mrBFiFIENQOHj1MNhs94Dyzj zH5xlnvw==; Received: by zero.zsh.org with local id 1qhzjy-0000L7-LK; Sun, 17 Sep 2023 21:55:42 +0000 Authentication-Results: zsh.org; iprev=pass (mail-ej1-f43.google.com) smtp.remote-ip=209.85.218.43; dkim=pass header.d=brasslantern-com.20230601.gappssmtp.com header.s=20230601 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none Received: from mail-ej1-f43.google.com ([209.85.218.43]:47505) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1qhzji-00003x-AI; Sun, 17 Sep 2023 21:55:27 +0000 Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-9ad8a33fd0dso487946466b.3 for ; Sun, 17 Sep 2023 14:55:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20230601.gappssmtp.com; s=20230601; t=1694987725; x=1695592525; darn=zsh.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=G1ychUxeRI7ub9WxLL4zJebyNa2s+SlR9HnXB0PYh+w=; b=wQEnuu2wcxeGFeRuxG99BCvq7KhY0zDjQh/KBGCrWZReX9OAv9tSjZy2cfuv8nCkMB 71lum3132I5aitfqevA5QGZkKi7maPnVoSuOmupsA7NaGlyNsPYTqb8gUwrvBmDMihLq epop5tDn7h2fucqw355125MwKvjA+ZQoA+CiG3tHy7mWfYZuXTXKK9shEbPZK/Y5Fj7Y UBiYGTbj/pE1jBUNp+2IAHVzmZxg+3Bzty2S5O1MNK55fvWGKAsQeR25Dw0G38tCtAyB YcRmJvfjYmYdohSALCKW+p3Ydqulz2jZLF5lDcMolaHOrBxA9YuGRYaLsCP3GjLq6gOW zfKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694987725; x=1695592525; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=G1ychUxeRI7ub9WxLL4zJebyNa2s+SlR9HnXB0PYh+w=; b=J3+j28jSZoaxUJhvT9wIDg51Adi4RtKw0SwnSAgtl+Ei57T8wxM6FN8Bijx3VIHLLJ KnXVZ5wlKgCD5qrmjtTrDvoKv7uki0E9oSWlI+EPsCmQxb6bSiiLpf0/d5fe+TrW3wuL zMzNtV+9hkLaTsAhTLN4awxwfKj6nx3ayTfGXXZfC87x8ZEZOyV7D4Nt11akL9wwkkge DB8Ky3HqEpXPDXnp3YRYAN0aoCkkVeYj7Nrt/gV5sLl2fgJFn2OeBkIoNccU0zTUKUwa 7jcj4iTHE/lru6auw+OtSe8FbNligDsjvp1QlYPZFaqumnjz9KHwJbxNDUFshQHWHIvZ SSWA== X-Gm-Message-State: AOJu0Yxp2Bcm661TBq9lzUpbMZ6SE0oyJ6AGIZ2PpQv3SsfvwbB1CpKi oPxGa5g2z2tn17v4GZzqURzQNfrEhRWDIKbVx3TcFHUng9cZTV4U X-Google-Smtp-Source: AGHT+IHJHyrHIhXaDsbT3VGn1LKf25UC+dKVpWDYhLAE5siU5oyVvnbSI9+z+h4Vjv4pBrxuWWSf8tNSPEwS87s+QMw= X-Received: by 2002:a17:906:3045:b0:9a1:680e:8c54 with SMTP id d5-20020a170906304500b009a1680e8c54mr6280627ejd.71.1694987725296; Sun, 17 Sep 2023 14:55:25 -0700 (PDT) MIME-Version: 1.0 From: Bart Schaefer Date: Sun, 17 Sep 2023 14:55:14 -0700 Message-ID: Subject: [PATCH] User-defined widgets can continue past push-line-or-edit To: Zsh hackers list Content-Type: multipart/mixed; boundary="000000000000440146060595150e" X-Seq: 52157 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: --000000000000440146060595150e Content-Type: text/plain; charset="UTF-8" This one is going to need some real-life testing. Before the appended patch, either "zle push-line-or-edit" had to be last thing done by any user-defined widget, or it had to be special-cased for PREBUFFER because at the PS2 prompt it effectively executed a send-break to force the parser to return to the PS1 prompt. With this patch, the current user-defined widget may continue executing through to either normal return or until another widget that ends the ZLE session (such as accept-line) is called. However, this is not transitive, that is, if user-defined widget X uses "zle Y" and Y is a user-defined widget that calls push-line-or-edit, then X will stop immediately after Y returns. It may be possible to change that, but: one thing at a time. Although push-line-or-edit clears the current BUFFER, the already-parsed PREBUFFER won't be discarded (from the parser state) until ZLE finishes. This means that if a widget such as accept-line is called in this circumstance (e.g., at PS2 prompt) the entire parser state up to that point is accepted. This has the probably-unwanted effect of restarting the parser at the end of "$PREBUFFER$BUFFFER" instead of at PS1, thereby potentially duplicating what was just pushed (with anything new in BUFFER in between). Of course, you can stuff something into BUFFER that finishes the expression represented by PREBUFFER, which will then execute that and restart with the pushed state. The foregoing all applies to "zle push-input" which is implemented by call to pushlineoredit(). --000000000000440146060595150e Content-Type: text/plain; charset="US-ASCII"; name="pushlineoredit.txt" Content-Disposition: attachment; filename="pushlineoredit.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lmnzx1k20 ZGlmZiAtLWdpdCBhL1NyYy9abGUvemxlX2hpc3QuYyBiL1NyYy9abGUvemxlX2hpc3QuYwppbmRl eCAwZmRhZDcwZDkuLjM4ZjJlMGZjYyAxMDA2NDQKLS0tIGEvU3JjL1psZS96bGVfaGlzdC5jCisr KyBiL1NyYy9abGUvemxlX2hpc3QuYwpAQCAtODcxLDggKzg3MSwxMSBAQCBwdXNobGluZW9yZWRp dChjaGFyICoqYXJncykKICAgICB9CiAgICAgcmV0ID0gcHVzaGxpbmUoYXJncyk7CiAgICAgaWYg KCFpc2ZpcnN0bG4pIHsKLQllcnJmbGFnIHw9IEVSUkZMQUdfRVJST1J8RVJSRkxBR19JTlQ7Ci0J ZG9uZSA9IDE7CisJaWYgKHNmY29udGV4dCAhPSBTRkNfV0lER0VUKSB7CisJICAgIGVycmZsYWcg fD0gRVJSRkxBR19FRElUOworCSAgICBkb25lID0gMTsKKwl9IGVsc2UKKwkgICAgZG9uZSA9IDI7 CiAgICAgfQogICAgIGNsZWFybGlzdCA9IDE7CiAgICAgcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBh L1NyYy9abGUvemxlX21haW4uYyBiL1NyYy9abGUvemxlX21haW4uYwppbmRleCAxYWZiMWJmNTgu LjY5MDA4YmJiZCAxMDA2NDQKLS0tIGEvU3JjL1psZS96bGVfbWFpbi5jCisrKyBiL1NyYy9abGUv emxlX21haW4uYwpAQCAtMTUzMiw2ICsxNTMyLDEwIEBAIGV4ZWN6bGVmdW5jKFRoaW5neSBmdW5j LCBjaGFyICoqYXJncywgaW50IHNldF9iaW5kaywgaW50IHNldF9sYmluZGspCiAJICAgIHNmY29u dGV4dCA9IFNGQ19XSURHRVQ7CiAJICAgIG9wdHNbWFRSQUNFXSA9IDA7CiAJICAgIHJldCA9IGRv c2hmdW5jKHNoZiwgbGFyZ3MsIDEpOworCSAgICBpZiAoZG9uZSA9PSAyKSB7CisJCWVycmZsYWcg fD0gRVJSRkxBR19FRElUOworCQlkb25lID0gMTsKKwkgICAgfQogCSAgICBvcHRzW1hUUkFDRV0g PSBveHQ7CiAJICAgIHNmY29udGV4dCA9IG9zYzsKIAkgICAgZW5kcGFyYW1zY29wZSgpOwpkaWZm IC0tZ2l0IGEvU3JjL2lucHV0LmMgYi9TcmMvaW5wdXQuYwppbmRleCA4ZDdmNDRkN2MuLmNmZmY1 ODZlMyAxMDA2NDQKLS0tIGEvU3JjL2lucHV0LmMKKysrIGIvU3JjL2lucHV0LmMKQEAgLTQzMCw3 ICs0MzAsOCBAQCBpbnB1dGxpbmUodm9pZCkKICAgICB9CiAgICAgaWYgKGVycmZsYWcpIHsKIAlm cmVlKGluZ2V0Y2xpbmUpOwotCWVycmZsYWcgfD0gRVJSRkxBR19FUlJPUjsKKwlpZiAoZXJyZmxh ZyAhPSBFUlJGTEFHX0VESVQpCisJICAgIGVycmZsYWcgfD0gRVJSRkxBR19FUlJPUjsKIAlyZXR1 cm4gbGV4c3RvcCA9IDE7CiAgICAgfQogICAgIGlmIChpc3NldChWRVJCT1NFKSkgewpkaWZmIC0t Z2l0IGEvU3JjL3pzaC5oIGIvU3JjL3pzaC5oCmluZGV4IGEwMjQzZTk4ZS4uMDllNjU2ZDk5IDEw MDY0NAotLS0gYS9TcmMvenNoLmgKKysrIGIvU3JjL3pzaC5oCkBAIC0yOTc3LDcgKzI5NzcsMTEg QEAgZW51bSBlcnJmbGFnX2JpdHMgewogICAgICAqIGhhdmUgZXhpdGVkLiAgVGhpcyBpcyByZXNl dCBieSAiZXJyZmxhZyA9IDAiIGluCiAgICAgICogbG9vcCh0b3BsZXZlbCA9IDEsIC4uLikuCiAg ICAgICovCi0gICAgRVJSRkxBR19IQVJEID0gNAorICAgIEVSUkZMQUdfSEFSRCA9IDQsCisgICAg LyoKKyAgICAgKiBFZGl0aW5nIGVycm9yLiAgTGlrZSB1c2VyIGludGVycnVwdCwgYnV0IGxlc3Mg dmlvbGVudC4KKyAgICAgKi8KKyAgICBFUlJGTEFHX0VESVQgPSA4CiB9OwogCiAvKioqKioqKioq KiovCg== --000000000000440146060595150e--