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 чтобы получить ввод от пользователя.

Другие вопросы по тегам