bash에 명령이 입력될 때마다 실행되는 디버그 트랩이 있는데, 이는 실행 중인 명령을 나타내기 위해 창 제목을 설정합니다. 모든 구성 세부 사항을 생략하고 다음과 같이 정리했습니다.
export PS1="\[\e]0;$GENERATED_WINDOW_TITLE\a\]$GENERATED_PROMPT"
이것은 매우 잘 작동하지만 한 가지 문제가 있습니다. bash 쉘이 이 기능을 지원하지 않는 환경에서 실행되면 GENERATED_WINDOW_TITLE이 모든 프롬프트와 함께 화면에 인쇄됩니다. X가 아닌 터미널에서 bash를 실행할 때마다 이런 일이 발생합니다.
bash는 이 이스케이프 시퀀스가 지원되는지 어떻게 확인합니까?
답변1
나는 이것을 할 수 있는 terminfo 함수가 없다고 생각합니다. 실제로 테스트된 값은 TERM
충분해야 합니다. 이것이 제가 .bashrc
두 가지 모두에서 한 일 .zshrc
이며 이것이 문제가 되었던 기억이 나지 않습니다.
case $TERM in
(|color(|?))(([Ekx]|dt|(ai|n)x)term|rxvt|screen*)*)
PS1=$'\e\]0;$GENERATED_WINDOW_TITLE\a'"$PS1"
esac
답변2
이 목적으로 (잘못) 사용되는 terminfo 항목이 있으며, 다양한 터미널 설명에 적용할 것을 제안하는 여러 버그 보고서의 주제였습니다. 인용하다 terminfo(5)
:
has_status_line hs hs has extra status
line
from_status_line fsl fs return from status
line
to_status_line tsl ts move to status line,
column #1
이 섹션에서는 이에 대해 설명합니다.상태 표시줄:
상태 라인이 있는 일부 터미널에서는 상태 라인에 액세스하려면 특별한 순서가 필요합니다. 이는 단일 인수를 사용하여 문자열로 표시될 수 있습니다.
tsl
상태 표시줄에 표시된 0 소스 열로 커서를 가져옵니다.
그런데 문서화된 기능을 지원하는 유일한 터미널 에뮬레이터는 다음과 같습니다.kterm
.
하나확장하다적절할 것입니다. 프로그램 screen
은 가능한 선택을 기록합니다(그러나 내용을 검토한 후하다이 기능을 사용하면 아이디어가 포기되었습니다.) ncurses는 이미 터미널 데이터베이스에 있는 확장 기능을 제공합니다.몇 년, 약에 녹음됨XTerm 확장:
# TS is a string capability which acts like "tsl", but uses no parameter and
# goes to the first column of the "status line".
궁극적으로 이 함수를 사용하는 모든 항목은 다음에서 상속됩니다.xterm+sl
:
# These building-blocks allow access to the X titlebar and icon name as a
# status line. There are a few problems in using them in entries:
#
# a) tsl should have a parameter to denote the column on which to transfer to
# the status line.
# b) the "0" code for xterm updates both icon-title and window title. Some
# window managers such as twm (and possibly window managers descended from
# it such as tvtwm, ctwm, and vtwm) track windows by icon-name. Thus, you
# don't want to mess with icon-name when using those window managers.
#
# The extension "TS" is preferable, because it does not accept a parameter.
# However, if you are using a non-extended terminfo, "TS" is not visible.
(저주)tput
프로그램은 이 기능을 테스트할 수 있습니다.