这是后续这个问题:我正在尝试为终端文件管理器创建键盘快捷键护林员,以便通过一次按键从 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 小部件以便正确设置 stdin?
答案1
@llua 的评论确实是解决 stdin 问题的技巧,谢谢!
我的用例需要另一个偏离链接问题的偏差。我正在使用 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
答案2
这可能并不适用于所有人。但我正在使用tmux
,我只是采取以下措施:
tmux send-keys "ranger" Enter
它用于tmux
发送单词ranger
,然后按Enter
。我知道很难看,但它有效。