tmux 창 제목이 있는 경우 사용자 정의로 설정하고, 그렇지 않으면 현재 작업 파일 또는 디렉터리로 설정합니다.

tmux 창 제목이 있는 경우 사용자 정의로 설정하고, 그렇지 않으면 현재 작업 파일 또는 디렉터리로 설정합니다.

tmux 2.6부터 tmux는 이제 창별 제목을 허용합니다. 를 통해 활성화할 수 있습니다 tmux set -g pane-border-status top. 이는 창당 10개 이상의 창을 실행할 때 매우 편리합니다. 또한 이름을 바꿀 수 있도록 헤더의 형식을 다음과 같이 지정했습니다.

set -g pane-border-format "#{pane_index} #{pane_title}"
# rename prompt
bind . command-prompt -p "(rename-pane)" -I "#T" "select-pane -T '%%'"

내가 싫어하는 유일한 점은 컴퓨터의 호스트 이름이 기본값으로 설정되는 대체 기본값입니다. 나는 다음을 선호합니다:

  • pane_title사용자가 설정한 경우 ( #{pane_title})를 사용합니다.
  • 그렇지 않으면 현재 작업 디렉터리( #{pane_current_path}) 를 사용합니다.

둘 중 하나는 그 자체로 간단합니다.

  • tmux set -g pane-border-format "#{pane_index} #{pane_title}"
  • tmux set -g pane-border-format "#{pane_index} #{pane_current_path}"

tmux의 형식화 부분(https://github.com/tmux/tmux/wiki/Formatspane_index)는 내가 원하는 대체 유형을 달성하기 위해 삼항 조건부 검사를 사용할 수 있다고 제안하지만, 설정하지 않으면 hostname창의 모든 명령이 기본값으로 설정되는 것처럼 보이기 때문에 모든 경우에 작동하도록 할 수는 없습니다. 생성되었습니다. 이것이 내가 현재 가지고 있는 것입니다:

tmux set -g pane-border-format "#{pane_index} #{?#{!=:#{pane_title},$(hostname)},#{pane_title},#{pane_current_path}}"

이는 사용자가 명시적으로 이름을 바꾼 Pod와 동일한 호스트 이름으로 생성된 Pod에 적용됩니다. 불행히도 내 작업 컴퓨터의 호스트 이름은 IP에 따라 변경되므로 위 명령이 너무 취약해 보입니다. 더 나쁜 것은 어떤 이유로든 tmux 구성에 넣지 않고(물론 tmux 접두사 없이) 창에서 직접 실행할 때만 작동한다는 것입니다. Pane_title이 설정되지 않았는지 확인하는 더 좋은 방법이 있습니까?

답변1

후크를 사용하여 새 창의 창 제목을 더 알아보기 쉬운 것으로 설정할 수 있습니다. 예를 들면 다음과 같습니다.

set-hook -g after-split-window 'selectp -T ""'
set-hook -g after-new-window 'selectp -T ""'
set-hook -g after-new-session 'selectp -T ""'

그런 다음 호스트 이름 대신 빈 헤더를 찾으십시오.

#{?pane_title,#{pane_title},#{pane_current_command}}

답변2

귀하의 모든 질문에 답할 수 있을지는 모르겠지만 몇 가지 질문에 대해 답변해 드릴 수는 있습니다.

내 구성에는 다음과 같은 괴물이 있습니다.

setw -g pane-border-format ' #{=/-20/…:pane_title} [#{=/-20/…:pane_current_command}] #(pgrep -P "#{pane_pid}" | tr "\n" " ")#{pane_current_path} #{?alternate_on,<Alt Mode> ,}'

(이 중 일부는 tmux ~3.1 기능에 따라 달라질 수 있음)

setw -g대신 set -gconfig.xml에서 작동하도록 하려면 of를 사용하세요 .

보시다시피, 제 접근 방식은 제가 알고 싶은 모든 것을 거기에 밀어넣는 것입니다. 왜냐하면 공간을 사용하지 않거나 공간에 인색하게 굴면 국경의 나머지 공간을 낭비하게 되기 때문입니다. 그래도. 터미널의 크기가 60열보다 작은 경우는 거의 없으므로 테두리 내용 선을 촘촘하게 유지하는 데 아무런 가치가 없습니다. 다소 깔끔한 모양을 유지하려면 테두리에 낮은 대비 색상을 사용하는 것이 중요합니다. 따라서 이는 필드에 표시되는 내용을 제어하려고 시도하는 어색함을 해결합니다. 표시되는 내용과 동시에 표시되는 내용을 제어하려고 시도하지 않는 것을 고려하십시오.

창 제목에 대한 또 다른 사항은 셸 및/또는 셸이 실행 중인 프로그램에 의해 "설정되어야 한다"는 것입니다. 문제를 해결했다는 것을 알았음에도 불구하고 지난 10월에 이로 인해 큰 두통이 생겼습니다. 현재로서는 내 두뇌나 git 로그 중 어느 것도 당신이 해야 할 올바른 일이 Pane_title 설정 방법을 제어하는 ​​것이라고 판단할 만큼 충분한 정보를 제공하지 않습니다. /zsh 이를 수행하도록 구성하십시오. 이것은 아마도 cwd 또는 활성 명령줄과 같은 더 유용한 것보다는 호스트 이름에 할당하는 역할을 담당할 것입니다.

:XT제대로 작동하려면 터미널 오버레이에 문자열을 추가 해야 한다고 생각합니다 . 바라보다https://unix.stackexchange.com/a/75382/12497

이 작업을 수행하는 데 오랜 시간이 걸렸습니다. 이는 지금까지 Pane_title이 창에서 실제로 실행 중인 프로그램을 확인할 수 있는 유일하고 신뢰할 수 있는 직접적인 방법이기 때문에 중요합니다. 내 상황에 맞는 tmux 키 바인딩(pane_title 값에 따라 결정됨)은 작업을 시작한 이후로 완벽하게 작동했습니다. zsh가 활성화되면 Pane_title은 zsh에 의해 마지막 명령 실행으로 설정되고 vim이 시작되면 다음으로 창 제목을 재정의합니다. vimrc 등에 설정한 특정 문자열 이를 통해 상황에 맞는 키 바인딩을 효과적으로 제어할 수 있습니다. 이전에 제가 겪었던 심각한 문제 중 하나는 "myscript" 스크립트가 Vim을 실행하면 Pane_title이 "myscript"로 변경되어 키 바인딩 시스템이 Vim을 창에서 실행하고 있다는 사실을 알 수 없게 된다는 점이었습니다. 이제 Vim은 터미널 제목을 업데이트하고 tmux 창에서 이를 올바르게 설정하며, 창에서 vim이 실행 중인지 확인하는 논리가 크게 단순화되었습니다.

창 내부에서 실행 중인 항목을 감지하는 또 다른 방법은 PID에 액세스할 수 있으므로 운영 체제에 쿼리하여 프로세스가 무엇인지 확인하는 것입니다. 그러나 지금까지 나는 "표준" 기능을 선호하는 파이프에 너무 열광하는 것을 피했습니다. Pane_title이 마침내 나를 이기면 관련 창에서 실행한 내용을 인쇄하는 C++ 프로그램을 작성할 것이라고 확신합니다. 행운을 빌어요.

관련 정보