これは この質問 のフォローアップです:zshプロンプトからにジャンプするために、ターミナルファイルマネージャーのキーボードショートカットを作成しようとしています レンジャー 1回のキーストロークでファイルマネージャー。私はリンクされた答えに従い、これを私の_.zshrc
_に追加しました:
_run_ranger () { echo; ranger; zle redisplay }
zle -N run_ranger
bindkey '^f' run_ranger
_
キーバインディング自体は機能しますが、レンジャーは_Error: Must run ranger from terminal
_で開始できません。 レンジャーコード(Python) を調べたところ、一般的なチェックsys.stdin.isatty()
を実行して、TTYstdinがあることを確認しました。 stdinが正しく設定されるようにzleウィジェットを変更するにはどうすればよいですか?
@lluaのコメントは、確かにstdinの問題を解決するための秘訣でした。ありがとう!
私のユースケースでは、リンクされた質問からさらに別の逸脱が必要でした。レンジャーを使用して作業ディレクトリを変更しています( このトリック を使用)。この場合、プロンプトを適切に変更するには、zle redisplay
をzle 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