tmux.conf의 쉘 명령에 tmux 변수 전달

tmux.conf의 쉘 명령에 tmux 변수 전달

tmux의 왼쪽 하단 상태 섹션을 편집하려고 합니다. 보여주고 싶다

세션: #{session_name}

이 설정을 사용하여 이 문자열의 현재 최대 길이를 20으로 설정합니다.

상태 왼쪽 길이 20

이것은 잘 작동하지만 20개가 넘는 세션 이름("Session:" 포함)을 입력하자마자 tmux가 텍스트를 자릅니다. 20자를 초과하는 문자열이 다음과 같이 표시되도록 전체 문자열을 처리하고 싶습니다.

세션: mysessio...

즉. 문자열은 20자로 잘리고 마지막 3자는 점으로 대체됩니다. 내가 원하는 것을 수행하는 bash 스크립트가 실행 중입니다.

string="verylongstringfortesting"
lengthLimit=10

if [ ${#string} -gt $lengthLimit ]
then
  echo ${string:0:$(($lengthLimit-3))}"..."
fi

이것을 tmux.conf에 어떻게 포함합니까? #(shell-command)를 알고 있고 #(echo #{session_name})을 시도했지만 세션 이름을 반환하지 않는 것 같습니다.

답변1

해결책을 찾는 데 도움이 되는 몇 가지 정보를 수집하세요.

  • #(echo #{session_name})아무것도 출력하지 않고 #(echo \"#{session_name}\")세션 이름을 표시합니다. 유망해 보이지만...

  • 인용할 때 작동하는 이유는 echo 명령이 텍스트를 문자 그대로 받아들이고 #{session_name}, 따옴표 없이는 쉘이 이를 주석으로 처리하고, 따옴표를 사용하면 그대로 tmux에 에코하기 때문입니다. 명령 종료 후 tmux 확장 시퀀스

  • 이는 쉘에서 확장된 문자열을 조작할 수 없음을 의미합니다.

대체 방법

  • 세션 이름을 7자로 제한하는 등의 제한을 설정하려고 하면 #7S제한은 항상 적용되지만 테스트할 수 없으므로 #7...필요하지 않더라도 줄임표가 항상 표시되므로 이 기능은 작동하지 않습니다. 일하다

  • tmux 명령을 통해 직접 액세스를 시도하면 합리적인 결과가 나오지 않는 것 같습니다. 예를 들어 tmux list-sessions -F "#{client_session}"아무 것도 표시되지 않고 tmux list-clients -F "#{client_session}"각 클라이언트에 대한 세션이 표시되지만 클라이언트가 여러 개인 경우 어떤 클라이언트가 명령을 실행하고 있는지 알 수 있는 확실한 방법이 없습니다.

아직 소스 코드를 파헤치지는 않았지만 tmux가 어떤 세션에 대한 것인지 알기 전에 명령을 실행한 것 같습니다.

이 기능을 얻는 가장 좋은 방법은 아마도 소스 코드를 수정하는 것입니다.

버전 1.8은 status.c의 79행 주위의 길이를 계산하고 status_redraw_get_left(322행 주위의 길이를 기록합니다.status_redraw(

답변2

이 문제는 tmux Git HEAD에서 수정되었습니다.https://github.com/tmux/tmux/issues/11

관련 정보