m/fzf
1
0
mirror of https://github.com/junegunn/fzf.git synced 2025-11-17 15:53:39 -05:00

Updated Examples (completion) (markdown)

Junegunn Choi
2020-03-11 18:34:17 +09:00
parent 93db943a5a
commit e28d1b39f8

@@ -4,68 +4,7 @@ _**Custom completion API is experimental and subject to change**_
Writing custom fuzzy completion
-------------------------------
First define `_fzf_complete_COMMAND` function using `_fzf_complete` helper.
```sh
# Custom fuzzy completion for "doge" command
# e.g. doge **<TAB>
_fzf_complete_doge() {
_fzf_complete "--multi --reverse" "$@" < <(
echo very
echo wow
echo such
echo doge
)
}
```
The first argument to `_fzf_complete` is the options to fzf. The second argument is the usual arguments passed to the completion function, you can simply pass `"$@"` here.
You can see that the output of some arbitrary commands (4 echos) are fed into the function using process substitution `< <(...)`. The output lines of the enclosed commands become the completion candidates.
zsh will automatically pick up the command using the naming convention but in bash you have to connect the function to the command using `complete` command.
```sh
[ -n "$BASH" ] && complete -F _fzf_complete_doge -o default -o bashdefault doge
```
### Post-processing
If you need to post-process the output from fzf, define `_fzf_complete_COMMAND_post` as follows.
```sh
_fzf_complete_foo() {
_fzf_complete "--multi --reverse --header-lines=3" "$@" < <(
ls -al
)
}
_fzf_complete_foo_post() {
awk '{print $NF}'
}
[ -n "$BASH" ] && complete -F _fzf_complete_foo -o default -o bashdefault foo
```
Examples
--------
### [pass](http://www.passwordstore.org/)
```sh
# pass completion suggested by @d4ndo (#362)
_fzf_complete_pass() {
_fzf_complete '+m' "$@" < <(
pwdir=${PASSWORD_STORE_DIR-~/.password-store/}
stringsize="${#pwdir}"
find "$pwdir" -name "*.gpg" -print |
cut -c "$((stringsize + 1))"- |
sed -e 's/\(.*\)\.gpg/\1/'
)
}
[ -n "$BASH" ] && complete -F _fzf_complete_pass -o default -o bashdefault pass
```
See https://github.com/junegunn/fzf#custom-fuzzy-completion
### [ZSH] Complete hg update/hg merge
@@ -75,7 +14,7 @@ If you need to add branch name completion for a subset of hg commands, e.g. hg u
_fzf_complete_hg() {
ARGS="$@"
if [[ $ARGS == 'hg merge'* ]] || [[ $ARGS == 'hg up'* ]]; then
_fzf_complete "--no-sort" "$@" < <(
_fzf_complete --no-sort -- "$@" < <(
{ hg branches & hg tags }
)
else
@@ -98,7 +37,7 @@ _fzf_complete_git() {
local branches
branches=$(git branch -vv --all)
if [[ $ARGS == 'git co'* ]]; then
_fzf_complete "--reverse --multi" "$@" < <(
_fzf_complete --reverse --multi -- "$@" < <(
echo $branches
)
else
@@ -112,6 +51,7 @@ _fzf_complete_git_post() {
```
### Custom trigger-less completion
If you want to remove the `**` trigger just for certain completions, you can achieve this like so:
```