summaryrefslogtreecommitdiff
path: root/shell/completion.bash
AgeCommit message (Collapse)Author
2023-10-13[bash] Remove implicit bash-completion dependencyJunegunn Choi
2023-10-12[bash] statically define __fzf_list_hosts() with either methodChristoph Anton Mitterer
When bash-completion (and thus `_known_hosts_real()`) is / is not available this will typically not change during the lifetime of a shell. The only exception is if the user would unset `_known_hosts_real()`, but well, that would be his problem. So we can easily define `__fzf_list_hosts()` either using `_known_hosts_real()` or using the old code, and avoid checking every time whether `_known_hosts_real()` is defined. Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
2023-10-12[bash] try to use bash-completions’s _known_hosts_real() for getting hostnamesChristoph Anton Mitterer
If defined, use bash-completions’s `_known_hosts_real()`-function to create the list of hostnames. This obviously requires bash-completion to be sourced before fzf. If not defined, fall back to the previous code. Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
2023-10-12[shell] make `__fzf_list_hosts()` definable by the userChristoph Anton Mitterer
Just like it’s already done for `_fzf_compgen_path()` and `_fzf_compgen_dir()` allow a user to easily define his own version of `__fzf_list_hosts()`. Also add some documentation on the expected “interface” of such custom function. Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
2023-10-12[shell] move username prefixing code where neededChristoph Anton Mitterer
`__fzf_list_hosts()` seems like a function a user may want to override with some custom code. For that reason it should be kept as simple as possible, that is printing only hostnames, one per line, optionally in some sorting. The handling of adding a `username@` (which is then the same for each line), if any, would unnecessarily complicate that for people who want to override the function. Therefore this commit moves that to the places where it's actually used (as of now only `_fzf_complete_ssh()`). This also saves any such handling for `_fzf_host_completion()`, where this isn’t needed at all. Right now it comes at a cost, namely an extra invocation of `awk` in the `_fzf_complete_ssh()`-case. However, it should be easily possible to improve `__fzf_list_hosts()` to no longer need the final `awk` in the pipeline there. Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
2023-10-12[shell] don’t print error on non-existent SSH filesChristoph Anton Mitterer
Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
2023-10-11[bash] Use `command` to “protect” further commands (#3462)Christoph Anton Mitterer
This commit causes all simple commands that are not built-ins or functions to be invoked via `command` in order to protect them from alias substitution or from accidentally taking functions of the same name. It was decided to not “protect” `fzf` and `fzf-tmux` for now. Maybe a better solution should be implemented for that in the future. Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
2023-10-11[bash] bring fzf’s own bash completion up to date (#3471)Christoph Anton Mitterer
* [bash] bring fzf’s own bash completion up to date This orders and groups completed options and values in just as they appear in the code respectively, for some option values, as they’d be printed in the `--help`-output. It does not add support for completion of `:` right after values that support an optional `:some-further-value` postfix. Neither does it add support for the `--option=value`-style. Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name> * [bash] drop unnecessary code in handling `history` Presumably, the dropped code is not needed for any effect, thus drop it. Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name> --------- Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
2023-10-09Improve interactiveness checks (#3449)Christoph Anton Mitterer
* [bash] return instead of not executing an if-block, when non-interactive This should keep the code more readable, be less error prone (accidentally doing something outside the if-block and aligns the code with what’s already done for zsh. `0` is returned, because it shall not be considered an error when the script is (accidentally) sourced from a non-interactive shell. If executed as a script (rather than sourced), the results are not specified by POSIX but depend on the shell, with bash giving an error in that case. Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name> * [shell] exit immediately when called from non-interactive shell The shell execution environment shouldn’t be modified at all, when called from a non-interactive shell. It shall be noted that the current check may become error prone for bash, namely in case there should ever be a differentiation between `i` and `I` in the special variable `-` and bash’s `nocasematch`-shell-option be used. Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
2023-10-04[shell] Avoid side-effects during eval (#3459)Junegunn Choi
Take two. * Avoid eval if the prefix contains `:=` * This is not to evaluate variable assignment. e.g. ${FOO:=BAR} * [zsh] Prevent `>(...)` form * Suppress error message from prefix evaluation * Stop completion when prefix evaluation failed Thanks to @calestyo
2023-10-02[bash] Don’t print function definition when checking for existence (#3448)Christoph Anton Mitterer
When just checking whether a function is already defined or not, it’s not necessary to print out it’s definition (should it be defined). bash’s `declare` provides the `-F`-option (which implies `-f`), which should give a minor performance improvement Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
2023-10-02[completion] Prevent running a command during 'eval'Junegunn Choi
Do not attempt to provide fuzzy completion if the prefix contains a pattern that may start an arbitraty command. * $(...) * `...` * <(...) Close #3459
2023-09-19[shell] Use --scheme=path when appropriateJunegunn Choi
Without the option, you may get suboptimal results if you have many paths with spaces in their names. e.g. https://github.com/junegunn/fzf/issues/2909#issuecomment-1207690770 Close #3433
2023-09-18Basic context-aware completion for ssh command (#3424)Timofei Bredov
Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
2023-04-01[shell] Update kill completionJunegunn Choi
* Explicitly specify the list of fields for consistent experience * Add fallback command for BusyBox (Close #3219) * Apply `--header-lines=1` to show the column header
2023-03-27Add bat to bash autocomplete commands (#3223)Sten Arthur Laane
Bat is a common alternative to cat, it's even referenced multiple times in fzf docs. This makes `bat **` work by default.
2023-02-12[bash] Enable environment variable completion for printenvJunegunn Choi
Close #3145
2023-01-23Add Helix editor to bash autocompletion (#3137)Nachum Barcohen
2022-10-16[shell] Make bash/zsh completion and bindings work with 'set -u' (#2999)John Fred Fadrigalan
Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
2022-09-10[bash] Fix completion of var or alias containing newlines (#2952)knutze
* Fix bash completion var or aliase containing newlines * Support for various bash declare options Co-authored-by: knutze <shakte@gmail.com>
2022-08-22[completion] Remove extra trailing slash on directory completionJunegunn Choi
Fix #2931
2022-08-03[completion] ssh: Remove values with '%' (#2548)lbesnard
Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
2022-07-29[bash] Fix 'possible retry loop' problem of bash-completion (#2891)Bob Matcuk
Close #2474 Close #2583
2022-07-21[shell] 'kill' completion will now require trigger sequence (**)Junegunn Choi
'kill **<tab>' instead of 'kill <tab>' just like any other completions. Close #2716 Close #385
2022-07-15[bash] Fix `fzf-tmux` to have `fzf`'s completion (#2871)Jonathan Zacsh
2021-11-03[bash] Suppress error message from 'bind'Junegunn Choi
Fix #2618
2021-08-15always use [[ ... ]] and not [ ... ] in bash completionsa1346054
2021-01-01[shell] Disable CTRL-ZJunegunn Choi
Fix #2289
2020-11-14[bash-completion] Fix endless loop when completion.bash sourced twiceTomas Janousek
I forgot to add the "not _fzf" check into __fzf_orig_completion, so invoking it twice would rewrite the _fzf_orig_completion_xxx variables and then cause an endless loop when completion is requested. Fixes: ef2c29d5d497 ("[bash-completion] Optimize __fzf_orig_completion_filter")
2020-11-13[bash-completion] Unexport _fzf_orig_completion_* variablesTomas Janousek
2020-11-13[bash-completion] Optimize __fzf_orig_completion_filterTomas Janousek
Commit d4ad4a25 slowed loading of completion.bash significantly (on my laptop from 10 ms to 30 ms), then 54891d11 improved that (to 20 ms) but it still stands out as the heavy part of my .bashrc. Rewriting __fzf_orig_completion_filter to pure bash without forking to sed/awk brings this back under 10 ms. before: $ HISTFILE=/tmp/bashhist hyperfine 'bash --rcfile shell/completion.bash -i' Benchmark #1: bash --rcfile shell/completion.bash -i Time (mean ± σ): 21.2 ms ± 0.3 ms [User: 24.9 ms, System: 6.4 ms] Range (min … max): 20.7 ms … 23.3 ms 132 runs after: $ HISTFILE=/tmp/bashhist hyperfine 'bash --rcfile shell/completion.bash -i' Benchmark #1: bash --rcfile shell/completion.bash -i Time (mean ± σ): 9.6 ms ± 0.3 ms [User: 8.0 ms, System: 2.2 ms] Range (min … max): 9.3 ms … 11.4 ms 298 runs Fixes: d4ad4a25db5f ("[bash-completion] Fix default alias/variable completion") Fixes: 54891d11e09d ("[bash-completion] Minor optimization")
2020-11-13[bash-completion] Move -F/_fzf filter to __fzf_orig_completion_filterTomas Janousek
This prevents mistakes like the one fixed by the previous commit, and also speeds bash startup a tiny bit: before: $ HISTFILE=/tmp/bashhist hyperfine 'bash --rcfile shell/completion.bash -i' Benchmark #1: bash --rcfile shell/completion.bash -i Time (mean ± σ): 22.4 ms ± 0.6 ms [User: 28.7 ms, System: 7.8 ms] Range (min … max): 21.7 ms … 25.2 ms 123 runs after: $ HISTFILE=/tmp/bashhist hyperfine 'bash --rcfile shell/completion.bash -i' Benchmark #1: bash --rcfile shell/completion.bash -i Time (mean ± σ): 21.2 ms ± 0.3 ms [User: 24.9 ms, System: 6.4 ms] Range (min … max): 20.7 ms … 23.3 ms 132 runs
2020-11-13[bash-completion] Avoid empty _a, _v completionsTomas Janousek
This doesn't look right: $ complete | grep ' _.$' complete _a complete _v The __fzf_orig_completion_filter invocation in _fzf_setup_completion needs the /-F/ filter, just like all the other invocations. Fixes: d4ad4a25db5f ("[bash-completion] Fix default alias/variable completion")
2020-10-06[completion] Make host completion handle source files without EOLElvan Owen
2020-04-18Remove dead codeJunegunn Choi
2020-04-18[completion] Make kill completion more consistent with the othersJunegunn Choi
Support both ordinary completion trigger and empty trigger kill <tab> kill foo**<tab> Close #1988 Close #385
2020-04-03[fzf-tmux] Fall back to plain fzf when split failedJunegunn Choi
2020-04-03[fzf-tmux] Add option to start fzf in tmux popup windowJunegunn Choi
Requires latest tmux built from source (e.g. brew install tmux --HEAD) Examples: # 50%/50% width and height on the center of the screen fzf-tmux -p # 80%/80% fzf-tmux -p80% # 80%/40% fzf-tmux -p80%,40% # Separate -w and -h fzf-tmux -w80% -h40% # 80%/40% at position (0, 0) fzf-tmux -w80% -h40% -x0 -y0 You can configure key bindings and fuzzy completion to open in tmux popup window like so: FZF_TMUX_OPTS='-p 80%'
2020-03-11Change custom fuzzy completion APIJunegunn Choi
To make it easier to write more complex fzf options. Although this does not break backward compatibility, users are encouraged to update their code accordingly. # Before _fzf_complete "FZF_ARG1 FZF_ARG2..." "$@" < <( # Print candidates ) # After _fzf_complete FZF_ARG1 FZF_ARG2... -- "$@" < <( # Print candidates )
2020-03-07[completion] Use file redirection instead of pipeJunegunn Choi
This change allows the completion system of bash and zsh to return before the input process completes. Related #1887
2020-02-20[bash] Strip trailing whitespace on kill completionJunegunn Choi
2020-02-20[completion] Allow users to customize fzf options via _fzf_comprunJunegunn Choi
Related #1809 #1850
2020-02-19[bash-completion] Minor optimizationJunegunn Choi
2020-02-17Make pointer and multi-select marker customizable (#1844)Hiroki Konishi
Add --pointer and --marker option which can provide additional context to the user
2019-12-20[bash-completion] Fix default alias/variable completionJunegunn Choi
Fix #1795
2019-12-06[ssh completion] Skip only aliases matching * (#1788)Henré Botha
This commit fixes a bug where lines that declare multiple hostnames get omitted from completion entirely if one of the hostnames matches *. For example: Host foo.com bar.dev baz.*
2019-12-06[completion] Add support for HostName lines in ~/.ssh/config (#1785)David Gray
Close #1783
2019-12-05[completion] Ignore hg repos (#1777)John Purnell
* Update completion.bash * Update completion.zsh
2019-09-29[bash-completion] Properly handle exit eventJunegunn Choi
Related #1704
2019-08-09[bash-completion] _fzf_setup_completion to retain previous optionsJunegunn Choi