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. 나는 살펴보았다레인저 코드(파이썬)sys.stdin.isatty()표준 입력에 TTY가 있는지 확인하기 위해 일반적인 검사를 수행합니다 . stdin이 올바르게 설정되도록 zle 위젯을 어떻게 수정합니까?

답변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. 나는 그것이 추악하다는 것을 알고 있지만 작동합니다.

관련 정보