web-dev-qa-db-ja.com

minttyウィンドウのタイトルを変更するには?

MinTTYはCygwinの新しいデフォルトコンソールです。

MinTTYウィンドウのタイトルを変更するためのシェルコマンドとは何ですか(.bashrcに入れることも、さらには.zshrcに入れることもできます)。

ウィンドウのタイトルを現在のディレクトリへのパスにして、コンソール内でディレクトリを切り替えたときに更新されるようにしたいと思います。

37
Leonel

問題点

次のコマンドは私にとってはうまくいきませんでした:

echo -ne "\e]0;MYTITLE\a"

私のデフォルトのCygwinインストールには、.bashrcに次のプロンプト定義が含まれていることがわかります。

PS1=\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$

プロンプトの最初の部分(\e]0;\w\a)は、プロンプトが表示されるたびにウィンドウタイトルを設定することに注意してください。

ソリューション

2つの関数を定義するこれらの行を.bashrcに追加します。

function settitle() {
      export PS1="\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
      echo -ne "\e]0;$1\a"
}
function settitlepath() {
      export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
}

次に、次のコマンドでカスタムタイトルを設定できます。

settitle "MYWonderfullTest here"

または、次のコマンドでcygwinのデフォルト(現在のパス)に戻すことができます。

settitlepath

お役に立てれば

52
boly38

次のように、xterm制御シーケンスを使用して変更できます。

echo -ne '\e]0;Title\a'

参照: http://code.google.com/p/mintty/issues/detail?id=241

26
James Fu

これを.zshrcに配置します。

# Change title of MinTTY to current dir
function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function chpwd() {
    settitle $(cygpath -m `pwd`)
}

関数settitleの特殊文字のシーケンスにより、MinTTYはウィンドウのタイトルを変更します。

zsh では、特別な名前chpwdで関数を定義すると、関数は 各chdirの後に呼び出されます になります。

Cygwin 1.7およびMinTTYがzshを実行しているWinXPで動作します。

4
Leonel

Bashでは、変数Prompt_COMMANDを設定して、セミコロンで区切られた多数のコマンドを保持できます。これを使用して、zshに関する他の応答で説明されているのと同じタイトル設定を行うことができます。

2
humpy
 1)$ PS1をエコーし​​、その文字列をクリップボードまたはテキストエディターにコピーします。
 echo $ PS1 
 2)〜/ .bash_profileを編集して、以下のシェルコードを追加します。必要に応じて$ PS1を使用しますが、$ {TERMINAL_TITLE}変数を「false」状態のままにします。
 3)ファイルを保存し、TERMINAL_TILE環境変数を設定します。 "
 4)
のようにbashプロファイルを入手します。 〜/ .bash_profile 
楽しむ
 
 if [-z "$ {TERMINAL_TITLE}"] 
その後
 PS1 = '\ [\ e] 0;\w\a \]\n\[\ e [32m \]\u @\h\[\ e [33m \]\w\[\ e [0m \]\n\$ '
 else 
 PS1 = '\ [\ e] 0; $ {TERMINAL_TITLE}\a \]\n\[\ e [32m \]\u @\h\[\ e [33m \]\w\[\ e [0m \]\n\$ '
 fi 
2
orbit andrews

スクリプトを実行するためにminttyを使用しているので、これに対する私のソリューションを共有したかっただけです。

私のminttyショートカットは次のように設定されています:

C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico /usr/bin/bash.exe -l -c /scripts/connect.sh

上記のショートカットで呼び出された、私が作成したconnect.shスクリプトは、接続先のサーバーを要求します[〜#〜] and [〜#〜]で定義されているsettitle関数を実行しますスクリプト。

connect.sh

#!/bin/bash

echo "Enter servername when prompted"
echo -n "servername: " 
read servername
function settitle() {
    echo -ne "\033]2;"$servername"\007"
}
function title() {
    settitle $(cygpath -m `pwd`)
}
settitle
ssh my_username@$servername
1
user273306

私はレオネルの答えを使用しましたが、これを行うとタイトルがちらつくだけであることがわかりました。つまり、少なくともechoコマンドは意図したとおりに機能します。私はデバッグモードを有効にしてインタラクティブにzshを実行しました

_zsh -xv
_

ディレクトリを変更すると、title()およびprecmd()の後にchpwd()と呼ばれる別の関数が呼び出され、それらを効果的にオーバーライドします。だから私はこれを私の.zshrcにプラグインし、それはうまくいきました。

_function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function title() {
    settitle $(cygpath -m `pwd`)
}
_

代わりにchpwd()またはprecmd()を使用する場合は、タイトル関数title(){}を無効にします。

1
user239512

これを.bash_profileに追加してみてください

export Prompt_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD/#$HOME/~}\007"'

わたしにはできる。

0
netawater

いくつかのユーザーがエスケープコードが機能していないことを示しています-したがって、コマンドの後に遅延を追加してみてください(エスケープコードが処理されることを確認するため)。次に、bashプロンプトがウィンドウタイトルをリセットしている可能性があることがわかります。

echo -ne "\e]0;MYTITLE\a" ; sleep 2
0
David Dyck