Zsh

如何將 zsh 中的鍵盤快捷鍵綁定到需要標準輸入的程序?

  • October 13, 2018

這是這個問題的後續:我正在嘗試為終端文件管理器ranger創建一個鍵盤快捷鍵,以便通過一次擊鍵從 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 標準輸入。如何修改 zle 小元件以便正確設置標準輸入?

@llua 的評論確實是解決標準輸入問題的訣竅,謝謝!

我的案例需要與連結問題的另一個偏差。我正在使用 ranger 來更改工作目錄(使用這個技巧)。在這種情況下,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

引用自:https://unix.stackexchange.com/questions/475310