|
|
|
# this rg command will get a list of files that are not in gitignore or similar
|
|
|
|
export FZF_DEFAULT_COMMAND="fd --type f --hidden --follow --exclude .git"
|
|
|
|
export FZF_DEFAULT_OPTS="--preview '[[ \$(file -L --mime {}) =~ binary ]] && echo {} is a binary file || ( bat --style=numbers --color=always {} || cat {}) 2> /dev/null | head -500'"
|
|
|
|
export FZF_CTRL_R_OPTS="--no-preview"
|
|
|
|
# this is the argument completeion optionm, use the same command
|
|
|
|
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
|
|
|
if [ -e /usr/share/fzf/key-bindings.zsh ]; then
|
|
|
|
source /usr/share/fzf/key-bindings.zsh
|
|
|
|
source /usr/share/fzf/completion.zsh
|
|
|
|
|
|
|
|
# CTRL-W to select a wordlist
|
|
|
|
__fsel_wordlist() {
|
|
|
|
local cmd="$FZF_DEFAULT_COMMAND --exclude \*.md --exclude \*.gif --exclude \*.jpg --exclude \*.png --exclude \*.lua --exclude \*.jar --exclude \*.pl '' /usr/share/wordlists/ | sed 's#^/usr/share/wordlists/##'"
|
|
|
|
setopt localoptions pipefail 2> /dev/null
|
|
|
|
eval "$cmd" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS --preview 'bat --color=always /usr/share/wordlists/{}'" $(__fzfcmd) -m "$@" | while read item; do
|
|
|
|
echo -n "/usr/share/wordlists/${(q)item} "
|
|
|
|
done
|
|
|
|
local ret=$?
|
|
|
|
echo
|
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
|
|
|
|
fzf-wordlist-widget() {
|
|
|
|
LBUFFER="${LBUFFER}$(__fsel_wordlist)"
|
|
|
|
local ret=$?
|
|
|
|
zle reset-prompt
|
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
#zle -N fzf-wordlist-widget
|
|
|
|
#bindkey '^W' fzf-wordlist-widget
|
|
|
|
|
|
|
|
# CTRL-P to select an IP address from project host
|
|
|
|
__fsel_ip() {
|
|
|
|
setopt localoptions pipefail 2> /dev/null
|
|
|
|
project hosts ip --fzf
|
|
|
|
|
|
|
|
local ret=$?
|
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
|
|
|
|
fzf-ip-widget() {
|
|
|
|
LBUFFER="${LBUFFER}$(project hosts ip --fzf) "
|
|
|
|
local ret=$?
|
|
|
|
zle reset-prompt
|
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
#zle -N fzf-ip-widget
|
|
|
|
#bindkey '^P' fzf-ip-widget
|
|
|
|
|
|
|
|
|
|
|
|
# I want my tab complete to be based on "current" word I am typing sometimes, before the command
|
|
|
|
custom_tabcomplete(){
|
|
|
|
local tokens cmd prefix trigger tail fzf matches lbuf d_cmds
|
|
|
|
setopt localoptions noshwordsplit noksh_arrays noposixbuiltins
|
|
|
|
|
|
|
|
# http://zsh.sourceforge.net/FAQ/zshfaq03.html
|
|
|
|
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags
|
|
|
|
tokens=(${(z)LBUFFER})
|
|
|
|
if [ ${#tokens} -lt 1 ]; then
|
|
|
|
zle ${fzf_default_completion:-expand-or-complete}
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
cmd=${tokens[1]}
|
|
|
|
tail=${LBUFFER:$(( ${#LBUFFER} - ${#trigger} ))}
|
|
|
|
local currentProject=$(project current --path)
|
|
|
|
#local newLBuffer="${tokens:1:${#tokens[@]}-1}"
|
|
|
|
local newLBuffer
|
|
|
|
for i in $(seq 1 $((${#tokens[@]} - 1)) ); do
|
|
|
|
newLBuffer="${newLBuffer}${tokens[i]} "
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
# Some of my completions should only work when in a project
|
|
|
|
if [ -n "$currentProject" ]; then
|
|
|
|
if [[ "${LBUFFER[-1]}" == " " ]]; then
|
|
|
|
fzf-completion
|
|
|
|
else
|
|
|
|
case "${tokens[-1]}" in
|
|
|
|
ip)
|
|
|
|
LBUFFER="${newLBuffer}$(project hosts ip --fzf) "
|
|
|
|
local ret=$?
|
|
|
|
zle reset-prompt
|
|
|
|
return $ret
|
|
|
|
;;
|
|
|
|
pf)
|
|
|
|
LBUFFER="${newLBuffer}$(find "$currentProject" -type f | fzf) "
|
|
|
|
local ret=$?
|
|
|
|
zle reset-prompt
|
|
|
|
return $ret
|
|
|
|
;;
|
|
|
|
pd)
|
|
|
|
LBUFFER="${newLBuffer}$(find "$currentProject" -type d | fzf --no-preview) "
|
|
|
|
local ret=$?
|
|
|
|
zle reset-prompt
|
|
|
|
return $ret
|
|
|
|
;;
|
|
|
|
wl)
|
|
|
|
LBUFFER="${newLBuffer}$(__fsel_wordlist)"
|
|
|
|
local ret=$?
|
|
|
|
zle reset-prompt
|
|
|
|
return $ret
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
# Fall back to fzf completion
|
|
|
|
fzf-completion
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
case "${tokens[-1]}" in
|
|
|
|
wl)
|
|
|
|
LBUFFER="${newLBuffer}$(__fsel_wordlist)"
|
|
|
|
local ret=$?
|
|
|
|
zle reset-prompt
|
|
|
|
return $ret
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
# Fall back to fzf completion
|
|
|
|
fzf-completion
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
zle -N custom_tabcomplete
|
|
|
|
bindkey '^I' custom_tabcomplete
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fi
|