zshのキーボードショートカットをstdinを必要とするプログラムにどのようにバインドするのですか?

zshのキーボードショートカットをstdinを必要とするプログラムにどのようにバインドするのですか?

フォローアップです。この問題:ターミナルファイルマネージャのキーボードショートカットを作成しようとしています。森林単一のキーストロークでzshプロンプトからファイルマネージャに移動します。私はリンクされた答えに従い、それを私の答えに追加しています.zshrc

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

キーバインディング自体は機能しますが、Rangerは実行されませんError: Must run ranger from terminal。私は見ましたレンジャーコード(Python)sys.stdin.isatty()標準入力にTTYがあるかどうかを確認するために一般的な検査を行います。 stdinが正しく設定されるようにzleウィジェットをどのように変更しますか?

ベストアンサー1

@lluaのコメントは実際にstdin問題を解決するためのヒントです。ありがとうございます!

私のユースケースでは、リンクされた問題から別の偏差が必要です。私は作業ディレクトリを変更するためにRangerを使用しています。このトリック)。この場合、プロンプトは正しい変更zle redisplayzle reset-promptこの質問を見ました。)。完全な解決策は次のとおりです。

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

おすすめ記事