GNU 화면에서 제목 표시


9

기본적으로 스크린 세션의 제목은 마지막으로 입력 한 명령의 이름으로, 나에게는 괜찮지 만 경우에 따라 변경하고 싶습니다. 내가 명령을 알고있다 Ctrl- A A하지만 그것은 단지 다음 명령까지 제목을 변경하고, 나는 그렇지 결정할 때까지 거기 체재하고 싶습니다.

편집 : 여기에 preexec내가 찾은 기능이 있습니다..zshrc

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

답변:


9

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

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

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

settitle NEWTITLE.

자세한 내용은 화면 제목 문서GNU 화면 FAQ 를 참조하십시오.

주어 Ctrl+ 것은 A A오직 다음 명령 때까지 변화하고, 아마에 의해 설정되는 것 $PS1(모든 쉘) 또는 $PROMPT_COMMAND/ DEBUG trap(bash는 전용) 또는 precmd/ preexec(만 zsh을).

당신은 어떤 곳이 보일 것 \e또는 \033함께 나타납니다 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

당신이주는 명령은와 정확히 같은 일을 Ctrl-A A합니다. 그리고 프롬프트에 대해 $PS1제목을 변경하지 않으려면 언제든지 수정해야 합니까?
gregseth

ESC k가 포함되어 있지 않은지 확인하십시오. Ditto PROMPT_COMMAND.
Mikel

ESC를 작성할 수 있습니다 \e또는 \033.
Mikel

화면 제목 문서 링크에는 필요한 정보가 있어야합니다.
Mikel

5

창 제목에 현재 창에서 실행중인 응용 프로그램이 반영되어 있다면 쉘이 그렇게하기 때문입니다. 그렇게하는 경우 배포, 시스템 관리자 또는 구성했기 때문입니다.

명령이 실행되는 동안 명령이 창 제목으로 표시되면 이는 bashpreexec 에서 함수 (zsh) 또는 에뮬레이션 에 의해 수행됩니다 .

각 명령이 완료 될 때 제목이 변경되면 precmdzsh 의 함수, PROMPT_COMMANDbash 의 매개 변수 또는 PS1쉘 의 프롬프트 ( 매개 변수) 의 일부로 수행됩니다 . 제목을 변경하는 명령은 터미널의 출력 스트림의 일부로 응용 프로그램에서 생성 된 이스케이프 시퀀스이므로 프롬프트에 포함 할 수 있습니다.

같은 이스케이프 시퀀스를 찾아 \e]0;new title\a, \e]2;new title\a또는 \eknew title\e\\쉘 초기화 파일 ( ~/.bashrc, ~/.zshrc, ...). 아무 관련이 있다면, 설정이 시스템 파일에있을 수 있습니다 (예를 들어 /etc/bash.bashrc, /etc/zsh/zshrc); 그런 다음 자신의 초기화 파일에서 해당 매개 변수 또는 함수를 덮어 씁니다.

의 재정의 가능한 타이틀 설정에 대해서는 Mikel의 답변 을 참조하십시오 preexec.


고마워, 당신은 그것을 명확하게했다. 실제로 preexec내 .zshrc에 정의 된 함수를 찾았습니다 . 문제는 내가 원하는 행동입니다. 대부분의 경우입니다. 하나의 특정 화면에서 즉시 비활성화 할 수 있기를 원합니다. preexec제목을 수동으로 설정할 때 함수에 넣을 수있는 변수 가 있습니까?
gregseth

@gregseth : 일반적으로 설명하기는 약간 어렵지만 preexec함수 를 게시 하면 나 또는 다른 사람이 간단한 변경을 제안 할 수 있습니다.
Gilles 'SO- 악마 그만'

나는 언급하려고 preexec했지만, Greg는 그가 사용하고 있다고 말하지 않았다 zsh. 저에게 가르쳐 줄 것입니다. ;-)
Mikel

@Mikel : 제 설명은 당신보다 낫지 만 새로운 preexec디자인은 제 것보다 낫습니다.
Gilles 'SO- 악마 그만해'

동의한다. :-) 내 원래의 대답은 OP에게 자신에 대한 답을 찾도록 가르치려고했습니다. 당신은 더 즉시 도움이되었습니다. 어느 쪽이든, 우리 모두가 이깁니다.
Mikel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.