You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

174 lines
5.4 KiB

# 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 --color=always --exclude .git --exclude .PlayOnLinux --exclude \"PlayOnLinux\'s virtual drives\""
export FZF_DEFAULT_OPTS="--reverse --ansi --height 40%"
export FZF_CTRL_R_OPTS=""
# this is the argument completeion optionm, use the same command
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_CTRL_T_OPTS="$FZF_DEFAULT_OPTS --ansi --preview \"bat --style=numbers --color=always {}\""
sourced="False"
if [ -e /usr/share/fzf/key-bindings.zsh ]; then
source /usr/share/fzf/key-bindings.zsh
source /usr/share/fzf/completion.zsh
sourced="True"
elif [ -e /usr/share/doc/fzf/examples/key-bindings.zsh ]; then
source /usr/share/doc/fzf/examples/key-bindings.zsh
source /usr/share/doc/fzf/examples/completion.zsh
sourced="True"
fi
if [ "$sourced" = "True" ]; then
# jhComplete(){
# local comp=$(echo $1 | cut -d':' -f1)
# local prompt=$(echo $1 | cut -d':' -f2)
# local currentProject=$(project current --path)
# find "$HOME/.local/share/snippets/" -name \*.func | while read line; do
# source "$line"
# done
# case "${comp}" in
# ip)
# if [ -n "$currentProject" ]; then
# project hosts ip --fzf
# fi
# ;;
# myip)
# ip route | grep -oE '(dev|src) [^ ]+' | sed 'N;s/\n/,/;s/src //' | awk -F',' '{print $2 " " $1}' | sort -u | fzf --no-preview | cut -d' ' -f1
# ;;
# pf)
# if [ -n "$currentProject" ]; then
# find "$currentProject" -type f | fzf
# fi
# ;;
# pd)
# if [ -n "$currentProject" ]; then
# find "$currentProject" -type d | fzf --no-preview
# fi
# ;;
# wl|wordlist)
# __fsel_wordlist
# ;;
# snip)
# snippets
# ;;
# network-interface|int)
# ip -o link show | cut -d' ' -f2- | sed -E 's/[^:]+(UP|DOWN).*/\1/' | tr ':' ' ' | fzf --preview="interface=\$(echo {} | cut -f1 -d' ');ip address show \$interface" | cut -d' ' -f1
# ;;
# *)
# if command -v "jhcomplete::$comp" > /dev/null; then
# "jhcomplete::$comp"
# else
# echo ""
# fi
# esac
# }
# on_word_replace(){
# setopt localoptions noshwordsplit noksh_arrays noposixbuiltins
# local word="${LBUFFER##* }${RBUFFER%% *}"
# if [ -n "$word" ]; then
# local changeto=$(jhswap "$word" )
# local lastWord="$changeto"
# local LWORDS=$(echo $LBUFFER | tr ' ' '\n' | wc -l)
# local RWORDS=$(echo $RBUFFER | tr ' ' '\n' | wc -l)
# if [ "$LWORDS" -gt "1" ]; then
# LBUFFER="${LBUFFER% *} $lastWord"
# else
# LBUFFER="$lastWord"
# fi
# if [ "$RWORDS" -gt "1" ]; then
# RBUFFER=" ${RBUFFER#* }"
# else
# RBUFFER=""
# fi
# zle reset-prompt
# zle -R
# return 0
# fi
# }
# Prompts the user to select a wordlist from the wordlists folder
wordlistSelect() {
fd -a --type f --hidden --follow --color=always --exclude .git --exclude \*.md --exclude \*.gif --exclude \*.jpg --exclude \*.png --exclude \*.lua --exclude \*.jar --exclude \*.pl '' /usr/share/wordlists/ | fzf --preview 'bat --color=always {}'
}
word_replace(){
local ret=1
local word="$1"
local cmd="$2"
case "$word" in
wl) wordlistSelect; return 0 ;;
myip) ip route | grep -oE '(dev|src) [^ ]+' | sed 'N;s/\n/,/;s/src //;s/dev //' | awk -F',' '{print $2 " " $1}' | sort -u | fzf -1 --no-preview | cut -d' ' -f1; return 0 ;;
esac
return "$ret"
}
jh_tabcomplete(){
local tokens cmd swap ret=1 lastWord
# http://zsh.sourceforge.net/FAQ/zshfaq03.html
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags
# Use zsh's shell parsing to split lbuffer into items
# This takes into account quoting and escaping
tokens=(${(z)LBUFFER})
# If there isn't anythng typed, fall back to old tab binding
if [ ${#tokens} -lt 1 ]; then
zle ${jhcomplete_default_completion:-expand-or-complete}
return
fi
# Assume the first element
# TODO: make this work for multiple commands chained with | or > or && etc.
# TODO: make this work when command prepended with variables eg a=2 foo bar
# foo is the command name
cmd="${tokens[1]}"
lastWord="${tokens[-1]}"
# This part checks to see if the whole "word" is replaceable
if [ "${LBUFFER[-1]}" != " " ]; then
swap="$(word_replace "$lastWord" "$cmd")"
ret="$?"
fi
# This part checks if the part after an = is completable
if [ "$ret" -ne "0" ]; then
local afterEqual="${lastWord##*=}"
local beforeEqual="${lastWord%=*}"
# If they are different, there is an equals in the word
if [ "$afterEqual" != "$lastWord" ]; then
swap="${beforeEqual}=$(word_replace "$afterEqual" "$cmd")"
ret="$?"
fi
fi
if [ "$ret" -eq "0" ]; then
if [ -n "$swap" ]; then
tokens[-1]="$swap"
LBUFFER="${tokens[@]}"
fi
zle reset-prompt
return 0
else
zle ${jhcomplete_default_completion:-expand-or-complete}
# Redrawing here means I can use fzf in my completion functions
# This is not ideal, I would preferably run this after fzf in the completion functions but can't because they are not widgets.
zle reset-prompt
return
fi
}
# Record what ctrl+i is currently set to
# That way we can call it if jhcompletion doesn't result in anything
[ -z "$jhcomplete_default_completion" ] && {
binding=$(bindkey '^I')
[[ $binding =~ 'undefined-key' ]] || jhcomplete_default_completion=$binding[(s: :w)2]
unset binding
}
zle -N jh_tabcomplete
bindkey '^I' jh_tabcomplete
fi