bashスクリプトはウィンドウタイトルエスケープ文字のサポートをどのように検出しますか?

bashスクリプトはウィンドウタイトルエスケープ文字のサポートをどのように検出しますか?

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プログラムはこの機能をテストできます。

関連情報