From f5bdc7786840c548fba6ced03980abd6d7bfce1b Mon Sep 17 00:00:00 2001 From: lapcca Date: Mon, 18 Apr 2016 06:18:43 -0400 Subject: [PATCH] add incr plugin --- custom/plugins/incr/incr.plugin.zsh | 141 ++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 custom/plugins/incr/incr.plugin.zsh diff --git a/custom/plugins/incr/incr.plugin.zsh b/custom/plugins/incr/incr.plugin.zsh new file mode 100644 index 000000000..1a3ae6570 --- /dev/null +++ b/custom/plugins/incr/incr.plugin.zsh @@ -0,0 +1,141 @@ + +autoload -U compinit +zle -N self-insert self-insert-incr +zle -N vi-cmd-mode-incr +zle -N vi-backward-delete-char-incr +zle -N backward-delete-char-incr +zle -N expand-or-complete-prefix-incr +compinit + +bindkey -M viins '^[' vi-cmd-mode-incr +bindkey -M viins '^h' vi-backward-delete-char-incr +bindkey -M viins '^?' vi-backward-delete-char-incr +bindkey -M viins '^i' expand-or-complete-prefix-incr +bindkey -M emacs '^h' backward-delete-char-incr +bindkey -M emacs '^?' backward-delete-char-incr +bindkey -M emacs '^i' expand-or-complete-prefix-incr + +unsetopt automenu +compdef -d scp +compdef -d tar +compdef -d make +compdef -d java +compdef -d svn +compdef -d cvs + + + +now_predict=0 + +function limit-completion +{ + if ((compstate[nmatches] <= 1)); then + zle -M "" + elif ((compstate[list_lines] > 6)); then + compstate[list]="" + zle -M "too many matches." + fi +} + +function correct-prediction +{ + if ((now_predict == 1)); then + if [[ "$BUFFER" != "$buffer_prd" ]] || ((CURSOR != cursor_org)); then + now_predict=0 + fi + fi +} + +function remove-prediction +{ + if ((now_predict == 1)); then + BUFFER="$buffer_org" + now_predict=0 + fi +} + +function show-prediction +{ + + if + ((PENDING == 0)) && + ((CURSOR > 1)) && + [[ "$PREBUFFER" == "" ]] && + [[ "$BUFFER[CURSOR]" != " " ]] + then + cursor_org="$CURSOR" + buffer_org="$BUFFER" + comppostfuncs=(limit-completion) + zle complete-word + cursor_prd="$CURSOR" + buffer_prd="$BUFFER" + if [[ "$buffer_org[1,cursor_org]" == "$buffer_prd[1,cursor_org]" ]]; then + CURSOR="$cursor_org" + if [[ "$buffer_org" != "$buffer_prd" ]] || ((cursor_org != cursor_prd)); then + now_predict=1 + fi + else + BUFFER="$buffer_org" + CURSOR="$cursor_org" + fi + echo -n "\e[32m" + else + zle -M "" + fi +} + +function preexec +{ + echo -n "\e[39m" +} + +function vi-cmd-mode-incr +{ + correct-prediction + remove-prediction + zle vi-cmd-mode +} + +function self-insert-incr +{ + correct-prediction + remove-prediction + if zle .self-insert; then + show-prediction + fi +} + +function vi-backward-delete-char-incr +{ + correct-prediction + remove-prediction + if zle vi-backward-delete-char; then + show-prediction + fi +} + +function expand-or-complete-prefix-incr +{ + correct-prediction + if ((now_predict == 1)); then + CURSOR="$cursor_prd" + now_predict=0 + comppostfuncs=(limit-completion) + zle list-choices + else + remove-prediction + zle expand-or-complete-prefix-prefix + fi +} + + +function backward-delete-char-incr +{ + correct-prediction + remove-prediction + if zle backward-delete-char; then + show-prediction + fi +} + +