-
Notifications
You must be signed in to change notification settings - Fork 715
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
rc tools menu: work around ARG_MAX limit
when "menu" arguments exceed ~200k bytes, I get "execve failed: Argument list too long" (even though ARG_MAX is 2MB). This is because the shell process is passed the arguments to menu. Reproduce with evaluate-commands %exp{ menu asdf %sh{dd 2>/dev/null if=/dev/zero bs=1000 count=200 | sed s/././g} } I hit this with rust-analyzer which can send ~70 code actions to select from, each with a lengthy JSON object, so the :menu invocation can sometimes reach the effective limit. It can also become slow (0.5 seconds), maybe because we fork multiple times per argument. Fix this by passing arguments through $kak_response_fifo. The on-accept and on-change callbacks have the same problem (sh -c string too long), so move them to temporary files. This means we can get rid of some escaping. Note that there is currently no dedicated way to stop Kakoune from passing "$@" to the shell process, so define an extra command that doesn't take args. Since we serialize arguments into a single string (using "echo -quoting"), we need to deserialize them before doing anything else. We currently don't have an off-the-shelf solution for this. Perhaps this is an argument for "echo -quoting json" (which has been suggested before I believe).
- Loading branch information
Showing
1 changed file
with
132 additions
and
73 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters