GNU 화면에 제목 강제 표시

GNU 화면에 제목 강제 표시

기본적으로 스크린 세션의 제목은 마지막으로 입력한 명령의 이름으로, 제 경우에는 잘 작동하지만 경우에 따라 변경하고 싶습니다. 나는 Ctrl- 명령에 대해 알고 있지만 A A다음 명령까지만 제목을 변경하고 달리 결정할 때까지 거기에 머물기를 원합니다.

편집하다: 이건 preexec제가 찾아본 기능 이에요.zshrc

if [[ "$TERM" == "screen" ]]; then
   local CMD=${1[(wr)^(*=*|sudo|-*)]}
   echo -n "\ek$CMD\e\\"
fi

답변1

설정 방법에 따라 다르지만 기본적으로 이와 같은 것이 작동합니다.

settitle() {
    printf "\033k$1\033\\"
}

그런 다음 다음을 실행하십시오.

settitle NEWTITLE.

바라보다화면 제목 문서그리고GNU 화면 FAQ자세한 내용은.

주어진 + 는 (모든 쉘) 또는 / (bash에만 해당) 또는 / (zsh에만 해당)로 설정할 Ctrl수 있는 다음 명령 이전에만 변경됩니다 .A A$PS1$PROMPT_COMMANDDEBUG trapprecmdpreexec

\e기본적으로 \033위의 예와 같이 it 과 함께 또는 뒤에 나타나는 모든 위치를 찾아야 합니다 .k\\settitle

고쳐 쓰다

버릇이 있다고 하셨어요 preexec.

이것을 다음과 같이 바꾸면 어떨까요?

if [[ "$TERM" == "screen" ]]; then
   local CMD=${1[(wr)^(*=*|sudo|-*)]}
   echo -n "\ek${TITLE:-$CMD}\e\\"
fi

그런 다음 다음 명령을 실행하여 사용자 정의 제목을 설정할 수 있습니다.

TITLE="my title"

다음을 실행하여 헤더 설정을 해제합니다.

TITLE=

필요한 경우 변경하는 것을 잊지 마십시오 precmd.$PS1

옆에

합계를 하드코딩하지 않음으로써 이를 모든 터미널(예: xterm등) 로 확장할 수도 있습니다.gnome-terminal\ek\e\\

이것이 내가 하는 방법이다:

terminit()
{
    # determine the window title escape sequences
    case "$TERM" in
    aixterm|dtterm|putty|rxvt|xterm*)
        titlestart='\033]0;'
        titlefinish='\007'
        ;;
    cygwin)
        titlestart='\033];'
        titlefinish='\007'
        ;;
    konsole)
        titlestart='\033]30;'
        titlefinish='\007'
        ;;
    screen*)
        # status line
        #titlestart='\033_'
        #titlefinish='\033\'
        # window title
        titlestart='\033k'
        titlefinish='\033\'
        ;;
    *)
        if type tput >/dev/null 2>&1
        then
            if tput longname >/dev/null 2>&1
            then
                titlestart="$(tput tsl)"
                titlefinish="$(tput fsl)"
            fi
        else
            titlestart=''
            titlefinish=''
        fi
        ;;
    esac
}


# or put it inside a case $- in *i* guard
if test -t 0; then
    terminit
fi

# set the xterm/screen/etc. title
settitle()
{
    test -z "${titlestart}" && return 0

    printf "${titlestart}$*${titlefinish}"
}

그런 다음 다음과 같이 변경할 수 있습니다 preexec.

if [[ "$TERM" == "screen" ]]; then
   local CMD=${1[(wr)^(*=*|sudo|-*)]}
   settitle "${TITLE:-$CMD}"
fi

답변2

창 제목이 현재 창에서 실행 중인 응용 프로그램을 반영한다면 이는 쉘이 이를 수행하고 있기 때문입니다. 그렇다면 배포판, 시스템 관리자 또는 사용자가 구성했기 때문입니다.

실행 시 명령이 창 제목으로 표시되는 경우 이는 preexec(zsh에서) 또는Bash에서의 시뮬레이션.

각 명령이 완료될 때 제목이 변경되면 이는 precmdzsh의 함수, bash의 매개변수 또는 쉘의 프롬프트(매개변수)의 일부를 통해 PROMPT_COMMAND수행 됩니다. PS1(제목을 변경하는 명령은 터미널 출력 스트림의 일부로 모든 애플리케이션에서 실행되는 이스케이프 시퀀스이므로 프롬프트에 포함될 수 있습니다.)

\e]0;new title\a, 또는 ( , , ...) 와 같은 쉘 초기화 파일에서 이스케이프 시퀀스를 찾으십시오 \e]2;new title\a. 관련된 내용이 없으면 설정이 시스템 파일(예: )에 있을 수 있으며 자체 초기화 파일에서 매개변수나 함수를 재정의합니다.\eknew title\e\\~/.bashrc~/.zshrc/etc/bash.bashrc/etc/zsh/zshrc

바라보다미켈의 답변에서 재정의 가능한 제목 설정 preexec.

관련 정보