summaryrefslogtreecommitdiffstats
path: root/shell
AgeCommit message (Collapse)Author
2024-03-13Add walker options and replace 'find' with the built-in walker (#3649)Junegunn Choi
2024-03-13[bash] Fix regression in dynamic completionJunegunn Choi
Fix #3674
2024-03-10[bash] Update orig_complete after _completion_loaderKoichi Murase
2024-03-10[bash] Refactor access to "_fzf_orig_complete_${cmd//[^A-Za-z0-9_]/_}"Koichi Murase
In the current codebase, for the original completion settings, the pieces of the codes to determine the variable name and to access the stored data are scattered. In this patch, we define functions to access these variables. Those functions will be used in a coming patch. * This patch also resolves an inconsistent escaping of "$cmd": $cmd is escaped as ${...//[^A-Za-z0-9_]/_} in some places, but it is escaped as ${...//[^A-Za-z0-9_=]/_} in some other places. The latter leaves the character "=" in the command name, which causes an issue because "=" cannot be a part of a variable name. For example, the following test case produces an error message: $ COMP_WORDBREAKS=${COMP_WORDBREAKS//=} $ _test1() { COMPREPLY=(); } $ complete -vF _test1 cmd.v=1.0 $ _fzf_setup_completion path cmd.v=1.0 $ cmd.v=1.0 [TAB] bash: _fzf_orig_completion_cmd_v=1_0: invalid variable name The behavior of leaving "=" was present from the beginning when saving the original completion is introduced in commit 91401514, and this does not seem to be a specific reasoning. In this patch, we replace "=" as well as the other non-identifier characters. * Note: In this patch, the variable REPLY is used to return values from functions. This design is to make it useful with the value substitutions, a new Bash feature of the next release 5.3, which is taken from mksh.
2024-01-20[zsh] Handle '*' suffix in history line numbersJunegunn Choi
Fix #3591
2024-01-05[zsh] Make CTRL-R compatible with accept-or-print-query (#3557)danztran
Fix #3556 Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
2023-10-29[completion] Handle all hostaliases in /etc/hosts (#3495)akdevservices
* Fix #3488 * Handle inline comments in hosts file
2023-10-19[bash] Preserve existing completion for sshJunegunn Choi
Fix #3484
2023-10-14[zsh] Fix 'emulate: unknown argument -o' error on old zsh (#3465)LangLangBart
Fix #2094
2023-10-13[fish] exit as well when called from non-interactive shell (#3467)Christoph Anton Mitterer
Just like with the other shells, exit fish to, if called from a non-interactive shell. We cannot use `return`, as older versions of fish (namely < 3.4.0) did not support to use `return` in `.`-scripts (this was only added with fish commit 3359e5d2e9bcbf19d1652636c8e448a6889302ae). Unlike in POSIX, fish’s `exit` is however documented to no cause the calling shell to exit when executed in a sourced script (see: https://github.com/fish-shell/fish-shell/blob/0f70b2c0d310d97b5956b5360ad6cbc548baf72d/doc_src/cmds/exit.rst?plain=1#L20 ) Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name> Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
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-07[bash] Improve mawk detection (#3463)step
* Use the all-compatible mawk `-W version` option. https://github.com/junegunn/fzf/pull/3313#issuecomment-1747934690. * Run the command and not a function consistently with #3462. The version check bash code relies on the following mawk source code, extracted from mawk 1.3.4 20230322. ``` version.c: 18- #include "init.h" 19- #include "patchlev.h" 20- 21: #define VERSION_STRING \ 22- "mawk %d.%d%s %s\n\ 23- Copyright 2008-2022,2023, Thomas E. Dickey\n\ 24- Copyright 1991-1996,2014, Michael D. Brennan\n\n" .... 30- void 31- print_version(FILE *fp) 32- { 33: fprintf(fp, VERSION_STRING, PATCH_BASE, PATCH_LEVEL, PATCH_STRING, DATE_STRING); 34- fflush(fp); 35- 36- #define SHOW_RANDOM "random-funcs:" patchlev.h: 13- /* 14- * $MawkId: patchlev.h,v 1.128 2023/03/23 00:23:57 tom Exp $ 15- */ 16: #define PATCH_BASE 1 17- #define PATCH_LEVEL 3 18- #define PATCH_STRING ".4" 19- #define DATE_STRING "20230322" ``` Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
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-27[bash] CTRL-R on bash 3: Use backticks to avoid delayJunegunn Choi
https://github.com/junegunn/fzf/commit/e0b29e437be458066fca4dab39b282dfc11466f6
2023-09-24[shell] don’t needlessly escape `.` in shell patternChristoph Anton Mitterer
`find`’s `-path`-option is described to use shell patterns (i.e. POSIX’ pattern matching notation). In that, `.` is not a special character, thus escaping it shouldn’t be necessary. Signed-off-by: Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>
2023-09-22[bash] History, use perl if installed otherwise awk (#3313)step
While awk is POSIX, perl isn't pre-installed on all *nix flavors. This commit eliminates the mandatory dependency on perl by using awk when perl is not available. Related: #3295, #3309, #3310. Test suite passed: * `make error` all test sections 'PASS' * `make docker-test` 215 runs, 1884 assertions, 0 failures, 0 errors, 0 skips. Manually tested in the following environments: * Linux amd64 with bash 3.2, 4.4, 5.2; gawk -P, one true awk, mawk, busybox awk. * macOS Catalina, bash 3.2, macOS awk 20070501. **Performance comparison:** Mawk turned out the fastest, then perl. One true awk's implementation should be the closest to macOS awk. Test data: 230 KB history, 15102 entries, including multi-line and duplicates. Linux, bash 4.4. Times in milliseconds. | Command | Mean | Min | Max | Relative | | :--- | ---: | ---: | ---: | -------: | | `mawk 1.3.4` | 22.9 | 22.3 | 25.6 | **1.00** | | `perl 5.26.1` | 34.3 | 33.6 | 35.1 | 1.49 | | `one true awk 20221215` | 41.9 | 40.6 | 46.3 | 1.83 | | `gawk 5.1.0` | 46.1 | 44.4 | 50.3 | 2.01 | | `busybox awk 1.27.0` | 64.8 | 63.2 | 70.0 | 2.82 | **Other Notes** A bug affects bash, which fails restoring a saved multi-line history entry as a single entry. Bug fixed in version 5.0.[^1] While developing this PR I discovered two unsubmitted issues affecting the current perl script. The output stream ends with `$'\n\0000'` instead of `$'\0000'`. Because of this, the script does not deduplicate a duplicated entry located at the end of the history list; therefore fzf displays two identical (not necessarily adjacent) entries. A minor point about the first issue is that the top fzf entry ends with a dangling line feed symbol, which is visible in the terminal. [^1]: https://github.com/bminor/bash/blob/ec8113b9861375e4e17b3307372569d429dec814/CHANGES#L1511 To enable: `shopt -s cmdhist lithist; HISTTIMEFORMAT='%F %T '`.
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-08-18[bash] Disable pipefail in command substitutionJunegunn Choi
Fix #3382
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-20[fish] Do not use `builtin cd`Junegunn Choi
`builtin cd` of fish doesn't support `cd -` Close #2967
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-28Add --scheme=[default|path|history] option to choose scoring schemeJunegunn Choi
Close #2909 Close #2930
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-08-02[zsh] Make awk regex compatible with both GNU and macOS (#2906)kissge
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-20[zsh] Replace perl with awk (#2777)Jakub Jirutka
Unlike awk, which is even defined in POSIX, perl is not pre-installed on all *nix systems. This awk command is functionally equivalent to the original perl command.
2022-07-15[bash] Fix `fzf-tmux` to have `fzf`'s completion (#2871)Jonathan Zacsh
2022-04-29[bash] Make complex commands slightly more friendly to work with (#2784)Jan Warchoł
- extract logical parts to separate variables (e.g. $opts) - put options in $opts in similar order - move +/-m into $opts (at the end, so they won't be overridden) - split pipelines into multiple lines - remove "echo" that seems to be redundant All this should help with readability and also result in cleaner diffs when changes are made.
2022-04-22[shell] ALT-C: Use builtin cd to avoid conflicts (#2799)Ajeet D'Souza
2022-04-06[bash] Allow passing args to __fzf_select__ via fzf-file-widget (#2783)Jan Warchoł
This makes it easier to make customizations, for example instead of bind -x '"\C-o\C-i": FZF_CTRL_T_COMMAND="fasd -Rl" FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS --tiebreak=index " fzf-file-widget' it's enough to just bind -x '"\C-o\C-i": FZF_CTRL_T_COMMAND="fasd -Rl" fzf-file-widget --tiebreak=index'
2022-02-23[zsh] Set up bindings for all three keymaps: emacs, vicmd, and viinsJunegunn Choi
Fix #2694
2021-11-19[shell] Use cd -- (#2659)zsugabubus
Otherwise directories starting with '-' may treated as options.
2021-11-03[bash] Suppress error message from 'bind'Junegunn Choi
Fix #2618