Zsh читать ввод в ZLE виджете
Я пытаюсь реализовать пользовательскую версию поиска истории Zsh при нажатии ctrl-r
(хотя моя функция будет отображаться на другой ярлык).
До сих пор я пытался использовать read
, vared
а также read-command
читать ввод после того, как пользователь нажмет на заказ ярлык. Мой код выглядит так:
# Bind \eg to `git status`
function _cust-hist {
zle -I
local line
read -r line
echo $line
zle accept-line
}
zle -N _cust-hist
bindkey '\eg' _cust-hist
Но, похоже, ничего не работает. Я должен пропустить что-то очевидное, это возможно с Zsh?
0 ответов
Да, это определенно возможно.
Это должно помочь вам начать:
function _cust-hist {
local REPLY
autoload -Uz read-from-minibuffer
# Create a sub-prompt, pre-populated with the current contents of the command line.
read-from-minibuffer 'History search: ' $LBUFFER $RBUFFER
# Use the modified input to search history & update the command line with it.
LBUFFER=$(echo "$(fc -ln $REPLY $REPLY)" )
RBUFFER=''
# Put some informational text below the command line.
zle -M "History result for '$REPLY'."
}
zle -N _cust-hist
bindkey '\eg' _cust-hist
Если вам интересно, как
read-from-minibuffer
работает, вы можете найти его исходный код здесь. Как видите, он использует
read -k
или же
zle recursive-edit
чтобы получить ввод от пользователя.