mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-04 04:31:14 -03:00
This uses jj's dynamic completions when possible.
This avoids an annoying problem. After 04a4e5c4, jj's dynamic
completions (see the second paragraph of
<https://jj-vcs.github.io/jj/latest/install-and-setup/#command-line-completion>)
do not work very well in fish if the user puts `COMPLETE=fish jj |
source` in their `~/.config/fish/config.fish`. When the user types `jj
<TAB>`, they are instead overridden by fish's built-in non-dynamic
completions.
The difference is subtle. One problem I saw is that `jj new <TAB>` works
as expected (and shows revisions) while `jj new -A <TAB>` becomes broken
(and shows files).
If the user puts `COMPLETE=fish jj | source` in
`~/.config/fish/completions/jj.fish` there is no problem. However, users
might be confused if they run `COMPLETE=fish jj | source` or put it in
their config and it works in a broken fashion. I certainly was.
Meanwhile, I checked that if the user has `jj completion fish | source`
in their `config.fish`, executing `COMPLETE=fish jj
__this_command_does_not_exist | source` afterwards still works
correctly.
Let me know if there's a better approach to this problem.
11 lines
517 B
Fish
11 lines
517 B
Fish
# The reason for `__this-command-does-not-exist` is that, if dynamic completion
|
|
# is not implemented, we'd like to get an error reliably. However, the
|
|
# behavior of `jj` without arguments depends on the value of a config, see
|
|
# https://jj-vcs.github.io/jj/latest/config/#default-command
|
|
if set -l completion (COMPLETE=fish jj __this-command-does-not-exist 2>/dev/null)
|
|
# jj is new enough for dynamic completions to be implemented
|
|
printf %s\n $completion | source
|
|
else
|
|
jj util completion fish | source
|
|
end
|