Work on snippets for zsh
This commit is contained in:
parent
28b1933253
commit
eb594ac79b
3 changed files with 105 additions and 41 deletions
18
bin/.bin/snippets
Executable file
18
bin/.bin/snippets
Executable file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
SNIPPETS="$HOME/.local/share/snippets/"
|
||||||
|
|
||||||
|
function get_commands(){
|
||||||
|
cat "$1" | grep -Ev '^#' | grep -Ev '^$' | awk "{print \"$1\\t\" \$0}" | sed 's/ # /\t/'
|
||||||
|
}
|
||||||
|
export -f get_commands
|
||||||
|
|
||||||
|
function do_preview(){
|
||||||
|
local file=$(echo "$1" | cut -d' ' -f1)
|
||||||
|
local command=$(echo "$1" | cut -d' ' -f2)
|
||||||
|
cat "$file" | awk -v RS="\n\n" -v ORS="\n\n" '{if ($0 ~ "'"$command"'" ) print $0}' | sed -n '/^#/p' | sed -E 's/# ?//' | bat --color always -l markdown
|
||||||
|
}
|
||||||
|
export -f do_preview
|
||||||
|
|
||||||
|
find "$SNIPPETS" -name '*.snip' -exec /bin/bash -c 'get_commands "$0"' {} \; | fzf --preview="/bin/bash -c 'do_preview \"\$0\"' {}" --delimiter "\t" --with-nth 2,3 | cut -d' ' -f 2
|
||||||
|
|
|
@ -53,7 +53,7 @@ ZSH_CUSTOM=$HOME/.dotfiles/shells/zsh/oh-my-zsh-custom
|
||||||
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
|
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
|
||||||
# Example format: plugins=(rails git textmate ruby lighthouse)
|
# Example format: plugins=(rails git textmate ruby lighthouse)
|
||||||
# Add wisely, as too many plugins slow down shell startup.
|
# Add wisely, as too many plugins slow down shell startup.
|
||||||
plugins=(navi git zsh-better-npm-completion zsh-autosuggestions)
|
plugins=(git zsh-better-npm-completion zsh-autosuggestions)
|
||||||
|
|
||||||
|
|
||||||
source $ZSH/oh-my-zsh.sh
|
source $ZSH/oh-my-zsh.sh
|
||||||
|
|
|
@ -48,11 +48,91 @@ if [ -e /usr/share/fzf/key-bindings.zsh ]; then
|
||||||
#bindkey '^P' fzf-ip-widget
|
#bindkey '^P' fzf-ip-widget
|
||||||
|
|
||||||
|
|
||||||
|
jhComplete(){
|
||||||
|
local comp=$(echo $1 | cut -d':' -f1)
|
||||||
|
local prompt=$(echo $1 | cut -d':' -f2)
|
||||||
|
case "${comp}" in
|
||||||
|
ip)
|
||||||
|
if [ -n "$currentProject" ]; then
|
||||||
|
project hosts ip --fzf
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
pf)
|
||||||
|
if [ -n "$currentProject" ]; then
|
||||||
|
find "$currentProject" -type f | fzf
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
pd)
|
||||||
|
if [ -n "$currentProject" ]; then
|
||||||
|
find "$currentProject" -type d | fzf --no-preview
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
wl|wordlist)
|
||||||
|
__fsel_wordlist
|
||||||
|
;;
|
||||||
|
snip)
|
||||||
|
snippets
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Fall back to fzf completion
|
||||||
|
echo ""
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
jhswap(){
|
||||||
|
local orig="$1"
|
||||||
|
local inside=$(echo "$orig" | grep -Eo '<[^>]+>' | tr -d '<>')
|
||||||
|
local new=$(jhComplete "$inside")
|
||||||
|
echo "${orig/$inside/$new}" | tr -d '<>'
|
||||||
|
}
|
||||||
|
|
||||||
|
on_word_replace(){
|
||||||
|
setopt localoptions noshwordsplit noksh_arrays noposixbuiltins
|
||||||
|
local word="${LBUFFER##* }${RBUFFER%% *}"
|
||||||
|
if [ -n "$word" ]; then
|
||||||
|
local changeto=$(jhswap "$word" )
|
||||||
|
if [ -n "$changeto" ]; then
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
# I want my tab complete to be based on "current" word I am typing sometimes, before the command
|
# I want my tab complete to be based on "current" word I am typing sometimes, before the command
|
||||||
custom_tabcomplete(){
|
custom_tabcomplete(){
|
||||||
local tokens cmd prefix trigger tail fzf matches lbuf d_cmds
|
local tokens cmd prefix trigger tail fzf matches lbuf d_cmds
|
||||||
setopt localoptions noshwordsplit noksh_arrays noposixbuiltins
|
setopt localoptions noshwordsplit noksh_arrays noposixbuiltins
|
||||||
|
|
||||||
|
if [ -n "$RBUFFER" ]; then
|
||||||
|
if [[ "${RBUFFER[1]}" != " " ]]; then
|
||||||
|
on_word_replace
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# http://zsh.sourceforge.net/FAQ/zshfaq03.html
|
# http://zsh.sourceforge.net/FAQ/zshfaq03.html
|
||||||
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags
|
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags
|
||||||
tokens=(${(z)LBUFFER})
|
tokens=(${(z)LBUFFER})
|
||||||
|
@ -71,52 +151,18 @@ if [ -e /usr/share/fzf/key-bindings.zsh ]; then
|
||||||
|
|
||||||
|
|
||||||
# Some of my completions should only work when in a project
|
# Some of my completions should only work when in a project
|
||||||
if [ -n "$currentProject" ]; then
|
|
||||||
if [[ "${LBUFFER[-1]}" == " " ]]; then
|
if [[ "${LBUFFER[-1]}" == " " ]]; then
|
||||||
fzf-completion
|
fzf-completion
|
||||||
else
|
else
|
||||||
case "${tokens[-1]}" in
|
local new=$(jhComplete "${tokens[-1]}")
|
||||||
ip)
|
if [ -n "$new" ]; then
|
||||||
LBUFFER="${newLBuffer}$(project hosts ip --fzf) "
|
LBUFFER="${newLBuffer}${new} "
|
||||||
local ret=$?
|
local ret=$?
|
||||||
zle reset-prompt
|
zle reset-prompt
|
||||||
return $ret
|
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
|
else
|
||||||
case "${tokens[-1]}" in
|
|
||||||
wl)
|
|
||||||
LBUFFER="${newLBuffer}$(__fsel_wordlist)"
|
|
||||||
local ret=$?
|
|
||||||
zle reset-prompt
|
|
||||||
return $ret
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# Fall back to fzf completion
|
|
||||||
fzf-completion
|
fzf-completion
|
||||||
esac
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
zle -N custom_tabcomplete
|
zle -N custom_tabcomplete
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue