@ O comentário do llua foi realmente o truque para resolver o problema stdin, obrigado!
Meu caso de uso exigiu mais um desvio da pergunta vinculada. Estou usando o ranger para alterar o diretório de trabalho (usando esse truque ). Nesse caso, o zle redisplay
deve ser substituído por zle reset-prompt
para alterar corretamente o prompt ( consulte esta questão ). A solução completa se torna:
run_ranger () {
echo
ranger --choosedir=$HOME/.rangerdir < $TTY
LASTDIR='cat $HOME/.rangerdir'
cd "$LASTDIR"
zle reset-prompt
}
zle -N run_ranger
bindkey '^f' run_ranger