쉘에서 현재 tmux 창 번호를 얻는 방법은 무엇입니까?

쉘에서 현재 tmux 창 번호를 얻는 방법은 무엇입니까?

표시 공간 한 줄을 절약하기 위해 하단 상태 표시줄을 숨기고 쉘 프롬프트에 현재 tmux 창 번호를 넣어 현재 위치를 더 쉽게 알 수 있도록 하고 싶습니다.

GNU 화면에는 환경 변수가 있는데 WINDOWtmux에는 그런 변수가 없는 것 같은데 쉘에서 현재 창 번호를 가져올 수 있는 방법이 있나요?

시도해 보았지만 TMUX_PANE창(또는 창)을 닫고 새 창을 열 때와 같이 계속 증가합니다. TMUX_PANE쉘이 tmux 창에서 실행 중인지 감지하기 위해 존재 여부를 확인합니다 .

답변1

tmux의 용어에는 "창 번호"가 없습니다. "창 인덱스"와 고유한 "창 ID"가 있습니다. 기본 상태 줄에는 각 창의 이전 내용이 표시되므로 "window_index"를 의미한다고 가정합니다.

tmux display-message -p -F '#{window_index}'

창 인덱스에 대한 정보는 활성 창에서 가져오므로 활성 창에서 위의 명령만 입력하면 충분합니다. 일반적으로 모든 창에서 작동하고 자체 창을 결정하는 유사한 명령이 필요할 수 있습니다.

tmux display-message -p -F '#{window_index}' -t "$TMUX_PANE"

display-message녹음됨여기. #{variables}사용할 수 있는 다른 콘텐츠를 표시합니다.여기.

PS1:

PS1="\$(tmux display-message -p -F '#{window_index}' -t \"\$TMUX_PANE\") \u@\h:\w$ "

노트:

  • 창을 다른 창으로 이동하면(예를 들어 를 사용하여 tmux swap-pane …) 인쇄된 프롬프트가 업데이트되지 않고 이전 창 색인이 표시되므로 오해할 수 있습니다. 인쇄 팁뒤쪽에창을 이동하면 새 창 색인이 표시됩니다.

    귀하의 쉘은 현재 프롬프트를 업데이트하는 메커니즘을 지원할 수도 있고 지원하지 않을 수도 있습니다(예를 들어zsh). 모든 이전 프롬프트(화면과 창 기록에 여전히 표시되는 프롬프트)를 업데이트하는 것은 매우 까다로우며 간단한 해결책이 존재할 것으로 기대하지 않습니다.

  • 의 백슬래시는 할당 중에 평가되는 \$(tmux …)것을 방지합니다 . 프롬프트는 인쇄될 때마다 개별적으로 평가됩니다. 백슬래시가 없으면 할당 중에 얻은 창 인덱스가 포함됩니다. 그런 다음 창을 다른 창으로 이동하면 새로 인쇄된 프롬프트에도 이전 창 색인이 표시됩니다.$(…)PS1PS1

관련 정보