Como ligar um atalho de teclado em zsh a um programa que requer stdin?

0

Esta é uma continuação da pergunta : estou tentando criar um atalho de teclado para o gerenciador de arquivos de terminal ranger , para pular do prompt zsh para o gerenciador de arquivos com um único pressionamento de tecla. Eu estava seguindo a resposta vinculada, adicionando isso ao meu .zshrc :

run_ranger () { echo; ranger; zle redisplay }
zle -N run_ranger
bindkey '^f' run_ranger

A própria ligação de chave funciona, no entanto, o ranger não inicia com Error: Must run ranger from terminal . Eu dei uma olhada no código do ranger (Python) e ele executa a verificação comum sys.stdin.isatty() para verificar se tem um stdin TTY. Como posso modificar o widget zle para que stdin seja configurado corretamente?

    
por bluenote10 13.10.2018 / 23:02

1 resposta

0

@ 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
    
por 14.10.2018 / 01:43