[shell] make __fzf_list_hosts() definable by the user

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>
This commit is contained in:
Christoph Anton Mitterer 2023-09-26 20:37:04 +02:00 committed by Junegunn Choi
parent f1d306feab
commit 46ee9ac41c
2 changed files with 23 additions and 13 deletions

View File

@ -407,12 +407,17 @@ _fzf_proc_completion_post() {
command awk '{print $2}' command awk '{print $2}'
} }
__fzf_list_hosts() { # To use custom hostname lists, override __fzf_list_hosts.
command cat <(command tail -n +1 ~/.ssh/config ~/.ssh/config.d/* /etc/ssh/ssh_config 2> /dev/null | command grep -i '^\s*host\(name\)\? ' | command awk '{for (i = 2; i <= NF; i++) print $1 " " $i}' | command grep -v '[*?%]') \ # The function is expected to print hostnames, one per line as well as in the
<(command grep -oE '^[[a-z0-9.,:-]+' ~/.ssh/known_hosts 2> /dev/null | command tr ',' '\n' | command tr -d '[' | command awk '{ print $1 " " $1 }') \ # desired sorting and with any duplicates removed, to standard output.
<(command grep -v '^\s*\(#\|$\)' /etc/hosts 2> /dev/null | command grep -Fv '0.0.0.0') | if ! declare -F __fzf_list_hosts > /dev/null; then
command awk '{if (length($2) > 0) {print $2}}' | command sort -u __fzf_list_hosts() {
} command cat <(command tail -n +1 ~/.ssh/config ~/.ssh/config.d/* /etc/ssh/ssh_config 2> /dev/null | command grep -i '^\s*host\(name\)\? ' | command awk '{for (i = 2; i <= NF; i++) print $1 " " $i}' | command grep -v '[*?%]') \
<(command grep -oE '^[[a-z0-9.,:-]+' ~/.ssh/known_hosts 2> /dev/null | command tr ',' '\n' | command tr -d '[' | command awk '{ print $1 " " $1 }') \
<(command grep -v '^\s*\(#\|$\)' /etc/hosts 2> /dev/null | command grep -Fv '0.0.0.0') |
command awk '{if (length($2) > 0) {print $2}}' | command sort -u
}
fi
_fzf_host_completion() { _fzf_host_completion() {
_fzf_complete +m -- "$@" < <(__fzf_list_hosts) _fzf_complete +m -- "$@" < <(__fzf_list_hosts)

View File

@ -218,13 +218,18 @@ _fzf_complete() {
command rm -f "$fifo" command rm -f "$fifo"
} }
__fzf_list_hosts() { # To use custom hostname lists, override __fzf_list_hosts.
setopt localoptions nonomatch # The function is expected to print hostnames, one per line as well as in the
command cat <(command tail -n +1 ~/.ssh/config ~/.ssh/config.d/* /etc/ssh/ssh_config 2> /dev/null | command grep -i '^\s*host\(name\)\? ' | awk '{for (i = 2; i <= NF; i++) print $1 " " $i}' | command grep -v '[*?%]') \ # desired sorting and with any duplicates removed, to standard output.
<(command grep -oE '^[[a-z0-9.,:-]+' ~/.ssh/known_hosts 2> /dev/null | tr ',' '\n' | tr -d '[' | awk '{ print $1 " " $1 }') \ if ! declare -f __fzf_list_hosts > /dev/null; then
<(command grep -v '^\s*\(#\|$\)' /etc/hosts 2> /dev/null | command grep -Fv '0.0.0.0') | __fzf_list_hosts() {
awk '{if (length($2) > 0) {print $2}}' | sort -u setopt localoptions nonomatch
} command cat <(command tail -n +1 ~/.ssh/config ~/.ssh/config.d/* /etc/ssh/ssh_config 2> /dev/null | command grep -i '^\s*host\(name\)\? ' | awk '{for (i = 2; i <= NF; i++) print $1 " " $i}' | command grep -v '[*?%]') \
<(command grep -oE '^[[a-z0-9.,:-]+' ~/.ssh/known_hosts 2> /dev/null | tr ',' '\n' | tr -d '[' | awk '{ print $1 " " $1 }') \
<(command grep -v '^\s*\(#\|$\)' /etc/hosts 2> /dev/null | command grep -Fv '0.0.0.0') |
awk '{if (length($2) > 0) {print $2}}' | sort -u
}
fi
_fzf_complete_telnet() { _fzf_complete_telnet() {
_fzf_complete +m -- "$@" < <(__fzf_list_hosts) _fzf_complete +m -- "$@" < <(__fzf_list_hosts)