[qfp] Add highlight command plugin

This commit is contained in:
qinfanpeng 2014-03-05 20:51:24 +08:00
parent 6b3c953775
commit 9b4316a92a
2 changed files with 40 additions and 0 deletions

View File

@ -0,0 +1,6 @@
_load_highlight_command() {
source $1/highlight-command.sh
}
[[ -f $ZSH_CUSTOM/plugins/highlight-command/highlight-command.plugin.zsh ]] && _load_highlight_command $ZSH_CUSTOM/plugins/highlight-command
[[ -f $ZSH/plugins/highlight-command/highlight-command.plugin.zsh ]] && _load_highlight_command $ZSH/plugins/highlight-command

View File

@ -0,0 +1,34 @@
setopt extended_glob
TOKENS_FOLLOWED_BY_COMMANDS=('|' '||' ';' '&' '&&' 'sudo' 'do' 'time' 'strace')
recolor-cmd() {
region_highlight=()
colorize=true
start_pos=0
for arg in ${(z)BUFFER}; do
((start_pos+=${#BUFFER[$start_pos+1,-1]}-${#${BUFFER[$start_pos+1,-1]## #}}))
((end_pos=$start_pos+${#arg}))
if $colorize; then
colorize=false
res=$(LC_ALL=C builtin type $arg 2>/dev/null)
case $res in
*'reserved word'*) style="fg=magenta,bold";;
*'alias for'*) style="fg=cyan,bold";;
*'shell builtin'*) style="fg=yellow,bold";;
*'shell function'*) style='fg=green,bold';;
*"$arg is"*)
[[ $arg = 'sudo' ]] && style="fg=red,bold" || style="fg=blue,bold";;
*) style='none,bold';;
esac
region_highlight+=("$start_pos $end_pos $style")
fi
[[ ${${TOKENS_FOLLOWED_BY_COMMANDS[(r)${arg//|/\|}]}:+yes} = 'yes' ]] && colorize=true
start_pos=$end_pos
done
}
check-cmd-self-insert() { zle .self-insert && recolor-cmd }
check-cmd-backward-delete-char() { zle .backward-delete-char && recolor-cmd }
zle -N self-insert check-cmd-self-insert
zle -N backward-delete-char check-cmd-backward-delete-char