Melhor maneira de ler uma linha de entrada do usuário no zsh? (por exemplo, com zle?)

11

O Zsh, readpor algum motivo, está ecoando ^M, em vez de aceitá-los como <Enter>pressionamentos de tecla. (Se -destiver definido, eles são reconhecidos como <Enter>'s, mas ainda ecoam.) Também não suporta noções básicas como a tecla backspace.

Eu posso contornar isso invadindo / executando bash,

> a=$(bash -c 'read -e -p "What would you like to do?: " tmp; echo $tmp')
What would you like to do?: eat cake
> echo $a                                                                
eat cake

mas estou me perguntando se existe uma maneira mais limpa.

Nicholas Tung
fonte
Não é possível confirmar em uma nova zshinstalação do 4.3.10; % read afunciona bem aqui.
User1686
Isso está usando o iterm no OS X; readfunciona em máquinas Linux.
Nicholas Tung

Respostas:

19

Para inserir uma linha de texto confortavelmente em zsh, use vared. Usar em varedvez de readchama zle , que é o equivalente a passar -eno bash para chamar readline.

vared -p 'What would you like to do?: ' -c tmp

O comportamento descrito com simplicidade readparece um terminal mal configurado, e não um problema de shell. Execute stty -apara mostrar suas configurações de terminal e verifique se eolestá definido como ^Me erasepara o que sua Backspacechave envia. Dependendo do sistema operacional, de como está configurado e do terminal, Backspaceenvia ^Hou ^?. A configuração de backspace geralmente dá errado por causa de algum arquivo de configuração que tenta defini-la manualmente. Portanto, a primeira coisa que você deve fazer é rastrear e remover qualquer configuração incorreta. Se você não encontrar nenhum, revise as configurações do emulador de terminal para verificar se ele não está definido em algum modo de compatibilidade histórica. Se tudo mais falhar, adicione algo assim ao seu ~/.zshrc:

if [[ $(ps -o comm= $PPID) = iterm ]]; then
  stty erase '^?'
fi
Gilles 'SO- parar de ser mau'
fonte
11
vared -p 'O que você gostaria de fazer ?:' -c tmp
zzapper
Tão legal! Não sabia sobre o varedbuiltin. Acontece zshzleque a página de manual definitivamente vale pelo menos a folhear.
ratijas