Improve auto completion for shell commands #12883
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This makes the very first argument of shell commands (like run-shell-command or pipe) auto complete programs instead of files.
This works relatively well for the commands themselves, however for the shell prompts (so the action pipe or pipe-to) this is pretty hard to do, because there the completions functions get the full line as input. This makes it impossible to figure out what argument you are editing, since you are missing the cursor position. (For command mode, this is handled by the command mode prompt itself, so the input for completion functions is just the argument which the user is editing right now.
Thinking about it, the pipe action might be able to be replaced using a macro that effectively does "@:pipe ", since the shell actions duplicate the commands from command mode.
For now, I handle this by basically completing the first argument to be a program and the rest are just seen as one big file. The previous behavior was to just see the entire prompt as a single big file, so I think this is sane.
shell-completion.mp4