bashには、コマンドが入力されるたびに実行されるデバッグトラップがあります。これは、実行中のコマンドを示すためにウィンドウのタイトルを設定します。すべての構成の詳細を省略し、次のように整理しました。
export PS1="\[\e]0;$GENERATED_WINDOW_TITLE\a\]$GENERATED_PROMPT"
これは非常にうまく機能しますが、1つの問題があります。 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
プログラムはこの機能をテストできます。