xterm 실행 화면에서 제목을 자동으로 업데이트하려면 어떻게합니까?


14

이것은 이 질문 에 대한 후속 조치 입니다. xterm의 GNU 화면 에서 tcsh로 작업하고 있습니다. .

내 .cshrc에 다음이 있습니다.

alias res_t 'xtset -t %h:%d "(%u:%g)" %e'       # reset titlebar
res_t                                           # reset title right now
alias precmd res_t

그리고 이것은 잘 작동합니다!

그러나 화면을 실행하면 제목이 현재 디렉토리로 업데이트되지 않는 것을 볼 수 있습니다. xterm 타이틀을 화면 업데이트하려면 어떻게해야합니까?


아직 효과가있는 솔루션을 찾으셨습니까?
Trey Hunner

아니요. 제안 된 답변을 시도했지만 작동하지 않았습니다. 그렇기 때문에 나는 그들을 받아 들여지지 않고 찬성하지 않았다.
Nathan Fellman

답변:


4

이것을 .tcshrc또는 에 추가하여 xterm 창 제목을 설정할 수 있습니다 .cshrc(현재 precmd별명을 바꾸십시오 ).

alias precmd 'echo -n "\033]0;${PWD}\a"'

이것을 사용할 때 이것이 파일 .cshrc.tcshrc파일 에서 유일한 precmd 별명인지 확인하십시오 . 이 방법은 GNU 화면 세션이 열려 있는지 여부에 관계없이 현재 디렉토리를 xterm에서 gnome-terminal의 창 제목으로 표시합니다.

내 대답을 기반으로 한 .


3

tcsh를 사용하고 있기 때문에 아마도 작동하지 않을 것입니다 ... 누군가가 이것을하기 위해 bash 방법을 찾고있는 경우를 대비하여.

시스템 (로컬 / 원격)에서 bash를 실행중인 경우 "PROMPT_COMMAND"환경 변수를 사용하여 창 제목을 설정할 수 있습니다. 프롬프트가 표시되기 전에 PROMPT_COMMAND가 평가됩니다.

(.bashrc에서) :

export PROMPT_COMMAND='history -a && echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007'

설명:

'history -a'

이것은 쉘이 전체 쉘이 완료 될 때가 아니라 명령이 완료 될 때마다 히스토리 파일에 추가되도록 설정합니다. (이 예제와 관련이 없습니다).

'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

이스케이프 코드 "\ 033] 0;" "user"@ "host"변수 (오른쪽에서 첫 번째 "."로 가장 긴 일치 항목 제거)와 작업 디렉토리 ( '$ HOME'에 '~'로 대체)를 사용하여 창 제목을 설정합니다.

위의 트릭은 창 제목의 동적 변경을 지원하는 모든 터미널 응용 프로그램 (iTerm, Terminal.app, urxvt, aterm, eTerm. xterm 등)에서 작동합니다. bash 문서에서 쉘 변수 "TITLEBAR"을 살펴볼 수도 있습니다.


1
gnuscreen 내부에서는 작동하지 않습니다. 적어도 그것은 나를 위해 작동하지 않습니다. 그래서 왜 메신저 여기에 :)
gcb


2

이것은 모든 쉘에서 작동하지만 더러운 .screenrc 해킹입니다. hardstatus 라인이 작동하기 때문에 일부 사용자에게는 허용되지 않을 수 있습니다. 그러나 아래 termcapinfo 줄이 없어도 최신 우분투 에서 그놈 터미널 에서 작동 합니다. 어떤 상황에서는 더 많은 조정이 필요할 수 있습니다 (예를 들어 PuTTY에서 테스트하지 않았습니다).

# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

# dirty hack: put xterm title escapes in the hardstatus
# this example will yield "user@host || screen Win#:(windowtitle)
defhstatus "$USER@^EH || screen ^E:(^Et)"
# now turn it off so it doesn't print in the hardstatus line
hardstatus off

# and finally, use caption as a replacement hardstatus
caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'

에서 확인 이 링크 .


2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"

1
그러나 이것은 타이틀을 업데이트 할 것인가screen
Nathan Fellman

1
이것은 화면 4.00.02 + tcsh 6.12.00에서 잘 작동합니다. 이것은 화면 hardstatus변수가 적절하게 설정되어 있고 termcap / terminfo가 지원 한다고 가정 합니다 hs|ts|fs|ds.
Darren Hall

여기서 hardstatus는 무엇을 하는가?
gcb

2

이 페이지 (위에 링크 됨)가 해결책이지만 항목의 터미널 문자열이 터미널의 ID 문자열과 일치하는지 확인해야합니다. (예 : 변수 TERM이 설정되어 . 그렇지 않으면 아무런 영향을 미치지 않습니다.

여기에 내가 한 일에 대한 요약이 있는데, 몇 년 동안 이것을 알아낼 충분한 시간을 투자하지 않고 나에게 도움이되었습니다.

  1. 다음을 실행하여 터미널의 ID 문자열을 찾으십시오.

    echo $TERM
    

    아마도 'xterm'또는 'linux'또는 'rxvt'와 같은 것을 말할 것입니다.

  2. 이제 homedir (~ / .screenrc)에있는 .screenrc 파일에 다음 줄을 추가하십시오 (또는 존재하지 않는 경우 만드십시오).

    termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
    

    핵심은 'xterm'이 위에서 얻은 TERM의 ID 문자열인지 확인하는 것입니다. 사용하는 각각의 다른 용어 유형에 대해 여러 줄을 수행 할 수 있습니다.

예를 들어 상자에 SShing 할 때 xterms와 'linux'용어 유형을 모두 사용하기 때문에 이것을 .screenrc 파일로 사용합니다.

termcapinfo linux 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

잘만되면 이것이 도움이되고, 완전히 셸과 무관합니다. 화면을 루트로 실행하는 경우 이와 같은 자체 ~ / .screenrc 파일 외에도 ~ root / .screenrc를 수정해야합니다.


1

여기에 있는 지침을 통해 bash에서 rxvt의 제목을 업데이트 할 수있었습니다. 아마 도움이되지는 않지만 조사 할 가치가 있다고 생각했습니다 (링크가 페이지의 오른쪽으로 이동하지 않으면 정보 상태 표시 줄 섹션)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.