tmux에서 GNU 화면의 쉘 타이틀 시뮬레이션

tmux에서 GNU 화면의 쉘 타이틀 시뮬레이션

shelltitletmux에서 GNU Screen의 기능을 에뮬레이션 하려고 합니다 . 내 안에는 다음이 있습니다 ~/.bashrc.

if [[ "$TERM" == screen* ]]; then
    SCREEN_ESC='\[\ek\e\\\]'
else
    SCREEN_ESC=''
fi

PS1="\n\w ${SCREEN_ESC}$ "

그리고 내 다음 ~/.screenrc:

shelltitle        "$ |bash"

설정 shelltitle하면 GNU Screen이 셸에서 개행 문자를 검색하고 $PS1이스케이프 문자로 시작하는 모든 문자를 제거하고 그 이후에 발견된 첫 번째 단어로 바꿉니다. 이것은 매뉴얼 페이지:

작동 방법은 다음과 같습니다. 빈 헤더 이스케이프 시퀀스(<esc>k<esc>)를 프롬프트의 일부로 출력하려면 쉘 프롬프트를 수정해야 합니다. 프롬프트의 마지막 부분은 제목의 검색 부분에 지정한 문자열과 동일한 문자열이어야 합니다. 일단 설정되면 화면은 title-escape-sequence를 사용하여 이전 명령 이름을 지우고 다음 명령을 준비합니다. 그런 다음 쉘에서 개행 문자를 수신하면 프롬프트의 끝을 검색합니다. 발견되면 일치하는 문자열 뒤의 첫 번째 단어를 가져와 이를 명령 이름으로 사용합니다. 명령 이름이 "!", "%" 또는 "^"로 시작하는 경우 화면에서는 방금 찾은 이름보다 다음 줄(찾은 경우)의 첫 번째 단어를 선호합니다.

set-option -g set-titles on이는 프로세스 이름만 캡처하는 tmux와 다릅니다 . 따라서 Python 스크립트의 제목은 Screen(내가 원하는 방식) script.py이 되고 제목은 tmux(내가 원하지 않는 방식)가 됩니다.script.pypython

한 사람이 할 수 있다는 걸 알아요tmux 창 이름 바꾸기통과:

printf '\033kWINDOW_NAME\033\\'

그래서 새로운 명령을 입력했음을 tmux에 알릴 수 있는 방법이 있는지 궁금합니다. 마지막 명령을 입력할 수 있는 방법이 있다면 Bash를 사용하여 PROMPT_COMMAND수행할 수 있습니다. 어떤 아이디어가 있나요?

답변1

아아, 몇 년 후, 해결책이 나왔습니다! tmux 및 누락된 화면 동작과 동일한 문제가 있었습니다. 간단히 말해서:

에 추가하세요.bashrc

if [ -v "TMUX" ]; then
    PS0='$(printf "\033k%s\033" "$(HISTTIMEFORMAT= history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//")")'
    PROMPT_COMMAND="printf '\033kBASH\033\\'"

tmux.conf

set -g allow-rename on

설명을 보려면 bashrc다음 PS0을 살펴보세요. Bash 쉘에서 실행된 각 명령을 변수에 전달

PROMPT_COMMANDBash를 반환할 때 레이블로 사용 하고 있으므로 BASH원하는 대로 넣을 수 있습니다(예: >_). 또는 이를 생략 PROMPT_COMMAND하고 마지막으로 실행된 명령을 유지하여 레이블에 표시할 수 있습니다.

관련 정보