回答:
ここで回答
引用:
user title
コードが削除された1からgnome-terminal 3.14
。エスケープシーケンスを使用して、タイトルを設定する方法は1つしかありません-例bash
:PROMPT_COMMAND='echo -ne "\033]0;YOUR TITLE GOES HERE\007"'
1:gnome bug 724110およびgnome bug 740188を参照してください。
gnome-shell
ます。また、新しいウィンドウまたはタブで新しいターミナルを開くメニューも表示されなくなりました(ただし、ショートカットを使用して実行できます。理由は何ですか?すべてを大きなスマートボタンに置き換えてください。クリックするだけで何でもできます!)
.bashrc
ソリューションカービーによって提案されたが、私のために働きました。
set-title(){
ORIG=$PS1
TITLE="\e]2;$@\a"
PS1=${ORIG}${TITLE}
}
その後、私のプロンプトから: $ set-title test-title
set-title "longer and "
:echo $PS1 \[\e]0; \u@\h: \w \a\]\u@\h:\w\[\033[m\]$(__git_ps1)$ \e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a
Control + Z
、次にを使用してプロセスを再開するとset-title X
、それfg
を実行できると思います。
このようなユーザーフレンドリーな機能が削除されたとは信じられません。
私はROXTerm(http://roxterm.sourceforge.net)に切り替えていますが、これはうまく機能しています。Ubuntuにパッケージ化されています。
sudo apt-get install roxterm
その後、恐竜が独自の方法を続けてみましょう;-)
上記のようにRoxTermを試しましたが、良い結果が得られました。しかし、15.04にGnome 2の続きであるMATEプロジェクトの一部であるMATEターミナルに落ち着きました。
sudo apt-get install mate-terminal
その端末はGnome端末コードに基づいています。
解説:Gnome Terminal開発者の考え方を理解するのは難しいです。ターミナルタブに名前を付ける「方法」と、それをどのように正しくするのが難しいかについて、多くの議論があります。その場合、ユーザーが名前を付けにくくするのはなぜですか?まったくスマートではありません。
今、私は一日の大部分についてこれを調査し、最終的にこのタイトルを設定する方法を見つけました。\ e] 0で始まるエスケープシーケンスを介して行われます。そして、BEL文字(= \ 007 = \ a)で終わります。Iは、上述とは異なり、端末アプリケーションへのシェルバックから通信があるようなエスケープシーケンスを介して、非常に限定され、可能(さらにいくつかあります)。
上からこれについて:
PROMPT_COMMAND='echo -ne "\e]0;YOUR TITLE GOES HERE\a"'
機能しますが、常に機能するとは限りません。PROMPT_COMMAND
コマンドを送信するたびに内容が実行される変数であるため、このエスケープシーケンスも送信します。ただし、これはコマンドラインプロンプトを設定するPS1変数のエスケープシーケンスによってオーバーライドできます。これが、上記がここで効果を持たなかった理由です。
古いUbuntuのインストールから、これを取得し、コマンドプロンプトを設定し(右の部分、後に]
)、必要なエスケープシーケンスも送信します(左の部分、を含む]
)。
PS1="\[\e]0;\u@\h: \w\a\]\u@\h:\w\$ "
これは、$PROMPT_COMMAND
毎回解釈する必要がないため、パフォーマンスが向上する可能性があります。また、Bashには\u
、現在のユーザー名、\W
現在のディレクトリ名、または\w
現在の作業ディレクトリのパス全体のエスケープシーケンスがあり、オプションでの最後の数だけトリミングされるため、さらに多くのオプションがあります$PROMPT_DIRTRIM
。PROMPTING
Bashのマニュアルページの章を参照してください。また、エスケープシーケンスが追加的に囲まれていることを注意する\[
と、\]
ここに。
固定タイトルを設定するために、これは機能します:
PS1="\[\e]0;YOUR TITLE GOES HERE\a\]\u@\h:\w\$ "
楽しい!
調査中に、gnome-terminalソースコードを理解しようとしましたが、これはvteソースコードにつながり、そこでタイトル設定とエスケープシーケンスの読み取りのサポートはセキュリティリスクと見なされます:こちら(ケース20、ケース21)とこちらをご覧ください(「ウィンドウタイトルレポート」)。
PS1
設定されますが、カスタムコマンドプロンプトの設定など、他の用途の以前の定義もすべて消去されます。既存のPS1
コンテンツにエスケープシーケンスを追加しようとしましたが、うまくいくようです。このように: PS1+="\[\e]0;YOUR TITLE GOES HERE\a\]\u@\h:\w\$ "
上記のように$ PROMPT_COMMANDを設定しても、効果はありません。Bashはターミナル内で実行され、親プロセス(ここではgnome-terminal)はUNIXのようなOS上の子供の環境を読み取ることができないため、驚きはありません。もっとシンプルなものを使う
PROMPT_COMMAND='echo bla'
echo blaを実行し、他には何も起こりません。
編集:これをエスケープシーケンスでラップする必要があります。他の回答を参照してください。子環境を読み取ることはできませんが、これらのシーケンスを介して、親とやり取りすることができます。
Gnomeバグ740188で、彼らは.bashrcでtitle()関数を定義することについて話しています。開いたタブごとに異なるものですか?可能であれば、深刻ないハッキングを前もって!
Stackexchangeに関する他の説明でも、$ PS1の設定について説明しています(そして、賛成します)。申し訳ありませんが、それはタイトルではなく、コマンドプロンプトです。
要するに、環境設定ダイアログのスペースを少し節約するために、修復を超えてそれを台無しにしました。ああ、神様
現在、開発者の決定を取り消す唯一のチャンスは、深刻なシットストームを燃やすことです。このシットストームをどのように作成しますか?