diff options
Diffstat (limited to 'Functions')
-rw-r--r-- | Functions/Zle/down-line-or-beginning-search | 21 | ||||
-rw-r--r-- | Functions/Zle/up-line-or-beginning-search | 20 |
2 files changed, 41 insertions, 0 deletions
diff --git a/Functions/Zle/down-line-or-beginning-search b/Functions/Zle/down-line-or-beginning-search new file mode 100644 index 000000000..fbd2c3341 --- /dev/null +++ b/Functions/Zle/down-line-or-beginning-search @@ -0,0 +1,21 @@ +# Like down-line-or-search, but uses the whole line prefix up to the +# cursor position for searching forwards. + +emulate -L zsh + +if [[ ${+NUMERIC} -eq 0 && + ( $LASTWIDGET = $__searching || $RBUFFER != *$'\n'* ) ]] +then + [[ $LASTWIDGET = $__searching ]] && CURSOR=$__savecursor + __searching=$WIDGET + __savecursor=$CURSOR + if zle .history-beginning-search-forward; then + [[ $RBUFFER = *$'\n'* ]] || + zstyle -T ':zle:down-line-or-beginning-search' leave-cursor && + zle .end-of-line + return + fi + [[ $RBUFFER = *$'\n'* ]] || return +fi +__searching='' +zle .down-line-or-history diff --git a/Functions/Zle/up-line-or-beginning-search b/Functions/Zle/up-line-or-beginning-search new file mode 100644 index 000000000..5348e7ad3 --- /dev/null +++ b/Functions/Zle/up-line-or-beginning-search @@ -0,0 +1,20 @@ +# Like up-line-or-search, but uses the whole line prefix up to the +# cursor position for searching backwards. + +emulate -L zsh + +if [[ $LBUFFER == *$'\n'* ]]; then + zle .up-line-or-history + __searching='' +elif [[ -n $PREBUFFER ]] && + zstyle -t ':zle:up-line-or-beginning-search' edit-buffer +then + zle .push-line-or-edit +else + [[ $LASTWIDGET = $__searching ]] && CURSOR=$__savecursor + __savecursor=$CURSOR + __searching=$WIDGET + zle .history-beginning-search-backward + zstyle -T ':zle:up-line-or-beginning-search' leave-cursor && + zle .end-of-line +fi |