summaryrefslogtreecommitdiffstats
path: root/shell/completion.bash
diff options
context:
space:
mode:
Diffstat (limited to 'shell/completion.bash')
-rw-r--r--shell/completion.bash125
1 files changed, 51 insertions, 74 deletions
diff --git a/shell/completion.bash b/shell/completion.bash
index 5786d046..9cd5b217 100644
--- a/shell/completion.bash
+++ b/shell/completion.bash
@@ -4,10 +4,12 @@
# / __/ / /_/ __/
# /_/ /___/_/ completion.bash
#
-# - $FZF_TMUX (default: 0)
-# - $FZF_TMUX_OPTS (default: empty)
-# - $FZF_COMPLETION_TRIGGER (default: '**')
-# - $FZF_COMPLETION_OPTS (default: empty)
+# - $FZF_TMUX (default: 0)
+# - $FZF_TMUX_OPTS (default: empty)
+# - $FZF_COMPLETION_TRIGGER (default: '**')
+# - $FZF_COMPLETION_OPTS (default: empty)
+# - $FZF_COMPLETION_PATH_OPTS (default: empty)
+# - $FZF_COMPLETION_DIR_OPTS (default: empty)
if [[ $- =~ i ]]; then
@@ -32,6 +34,14 @@ if [[ $- =~ i ]]; then
# To redraw line after fzf closes (printf '\e[5n')
bind '"\e[0n": redraw-current-line' 2> /dev/null
+__fzf_defaults() {
+ # $1: Prepend to FZF_DEFAULT_OPTS_FILE and FZF_DEFAULT_OPTS
+ # $2: Append to FZF_DEFAULT_OPTS_FILE and FZF_DEFAULT_OPTS
+ echo "--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore $1"
+ command cat "${FZF_DEFAULT_OPTS_FILE-}" 2> /dev/null
+ echo "${FZF_DEFAULT_OPTS-} $2"
+}
+
__fzf_comprun() {
if [[ "$(type -t _fzf_comprun 2>&1)" = function ]]; then
_fzf_comprun "$@"
@@ -92,128 +102,77 @@ _fzf_opts_completion() {
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="
-h --help
- -x --extended
-e --exact
- --extended-exact
+x --no-extended
- +e --no-exact
-q --query
-f --filter
--literal
- --no-literal
- --algo
--scheme
--expect
- --no-expect
- --enabled --no-phony
- --disabled --phony
+ --disabled
--tiebreak
--bind
--color
- --toggle-sort
-d --delimiter
-n --nth
--with-nth
- -s --sort
+s --no-sort
--track
- --no-track
--tac
- --no-tac
- -i
- +i
+ -i --ignore-case
+ +i --no-ignore-case
-m --multi
- +m --no-multi
--ansi
- --no-ansi
--no-mouse
+c --no-color
- +2 --no-256
- --black
- --no-black
- --bold
--no-bold
--layout
--reverse
- --no-reverse
--cycle
- --no-cycle
--keep-right
- --no-keep-right
- --hscroll
--no-hscroll
--hscroll-off
--scroll-off
--filepath-word
- --no-filepath-word
--info
- --no-info
- --inline-info
- --no-inline-info
--separator
--no-separator
- --scrollbar
--no-scrollbar
--jump-labels
-1 --select-1
- +1 --no-select-1
-0 --exit-0
- +0 --no-exit-0
--read0
- --no-read0
--print0
- --no-print0
--print-query
- --no-print-query
--prompt
--pointer
--marker
--sync
- --no-sync
- --async
- --no-history
--history
--history-size
- --no-header
- --no-header-lines
--header
--header-lines
--header-first
- --no-header-first
--ellipsis
--preview
- --no-preview
--preview-window
--height
--min-height
- --no-height
- --no-margin
- --no-padding
- --no-border
--border
- --no-border-label
--border-label
--border-label-pos
- --no-preview-label
--preview-label
--preview-label-pos
--no-unicode
- --unicode
--margin
--padding
--tabstop
--listen
- --no-listen
- --clear
--no-clear
--version
--"
case "${prev}" in
- --algo)
- COMPREPLY=( $(compgen -W "v1 v2" -- "$cur") )
- return 0
- ;;
--scheme)
COMPREPLY=( $(compgen -W "default path history" -- "$cur") )
return 0
@@ -335,13 +294,19 @@ __fzf_generic_path_completion() {
[[ -z "$dir" ]] && dir='.'
[[ "$dir" != "/" ]] && dir="${dir/%\//}"
matches=$(
- unset FZF_DEFAULT_COMMAND
- export FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --scheme=path --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_COMPLETION_OPTS-} $2"
+ export FZF_DEFAULT_OPTS=$(__fzf_defaults "--reverse --scheme=path" "${FZF_COMPLETION_OPTS-} $2")
+ unset FZF_DEFAULT_COMMAND FZF_DEFAULT_OPTS_FILE
if declare -F "$1" > /dev/null; then
eval "$1 $(printf %q "$dir")" | __fzf_comprun "$4" -q "$leftover"
else
- [[ $1 =~ dir ]] && walker=dir,follow || walker=file,dir,follow,hidden
- __fzf_comprun "$4" -q "$leftover" --walker "$walker" --walker-root="$dir"
+ if [[ $1 =~ dir ]]; then
+ walker=dir,follow
+ rest=${FZF_COMPLETION_DIR_OPTS-}
+ else
+ walker=file,dir,follow,hidden
+ rest=${FZF_COMPLETION_PATH_OPTS-}
+ fi
+ __fzf_comprun "$4" -q "$leftover" --walker "$walker" --walker-root="$dir" $rest
fi | while read -r item; do
printf "%q " "${item%$3}$3"
done
@@ -399,7 +364,10 @@ _fzf_complete() {
if [[ "$cur" == *"$trigger" ]] && [[ $cur != *'$('* ]] && [[ $cur != *':='* ]] && [[ $cur != *'`'* ]]; then
cur=${cur:0:${#cur}-${#trigger}}
- selected=$(FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse --bind=ctrl-z:ignore ${FZF_DEFAULT_OPTS-} ${FZF_COMPLETION_OPTS-} $str_arg" __fzf_comprun "${rest[0]}" "${args[@]}" -q "$cur" | $post | command tr '\n' ' ')
+ selected=$(
+ FZF_DEFAULT_OPTS=$(__fzf_defaults "--reverse" "${FZF_COMPLETION_OPTS-} $str_arg") \
+ FZF_DEFAULT_OPTS_FILE='' \
+ __fzf_comprun "${rest[0]}" "${args[@]}" -q "$cur" | $post | command tr '\n' ' ')
selected=${selected% } # Strip trailing space not to repeat "-o nospace"
if [[ -n "$selected" ]]; then
COMPREPLY=("$selected")
@@ -503,8 +471,11 @@ complete -o default -F _fzf_opts_completion fzf
# fzf-tmux specific options (like `-w WIDTH`) are left as a future patch.
complete -o default -F _fzf_opts_completion fzf-tmux
-d_cmds="${FZF_COMPLETION_DIR_COMMANDS:-cd pushd rmdir}"
-a_cmds="
+d_cmds="${FZF_COMPLETION_DIR_COMMANDS-cd pushd rmdir}"
+
+# NOTE: $FZF_COMPLETION_PATH_COMMANDS and $FZF_COMPLETION_VAR_COMMANDS are
+# undocumented and subject to change in the future.
+a_cmds="${FZF_COMPLETION_PATH_COMMANDS-"
awk bat cat diff diff3
emacs emacsclient ex file ftp g++ gcc gvim head hg hx java
javac ld less more mvim nvim patch perl python ruby
@@ -512,10 +483,11 @@ a_cmds="
basename bunzip2 bzip2 chmod chown curl cp dirname du
find git grep gunzip gzip hg jar
ln ls mv open rm rsync scp
- svn tar unzip zip"
+ svn tar unzip zip"}"
+v_cmds="${FZF_COMPLETION_VAR_COMMANDS-export unset printenv}"
# Preserve existing completion
-__fzf_orig_completion < <(complete -p $d_cmds $a_cmds ssh 2> /dev/null)
+__fzf_orig_completion < <(complete -p $d_cmds $a_cmds $v_cmds unalias kill ssh 2> /dev/null)
if type _comp_load > /dev/null 2>&1; then
# _comp_load was added in bash-completion 2.12 to replace _completion_loader.
@@ -551,10 +523,21 @@ for cmd in $d_cmds; do
__fzf_defc "$cmd" _fzf_dir_completion "-o bashdefault -o nospace -o dirnames"
done
+# Variables
+for cmd in $v_cmds; do
+ __fzf_defc "$cmd" _fzf_var_completion "-o default -o nospace -v"
+done
+
+# Aliases
+__fzf_defc unalias _fzf_alias_completion "-a"
+
+# Processes
+__fzf_defc kill _fzf_proc_completion "-o default -o bashdefault"
+
# ssh
__fzf_defc ssh _fzf_complete_ssh "-o default -o bashdefault"
-unset cmd d_cmds a_cmds
+unset cmd d_cmds a_cmds v_cmds
_fzf_setup_completion() {
local kind fn cmd
@@ -576,10 +559,4 @@ _fzf_setup_completion() {
done
}
-# Environment variables / Aliases / Hosts / Process
-_fzf_setup_completion 'var' export unset printenv
-_fzf_setup_completion 'alias' unalias
-_fzf_setup_completion 'host' telnet
-_fzf_setup_completion 'proc' kill
-
fi