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


35

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

MinTTYウィンドウのタイトルを変更するシェルコマンド(.bashrcまたは.zshrcに追加できるもの)とは何ですか?

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


1
Cygwinのデフォルトのプロンプト設定($PS1)には、ウィンドウタイトルをuser @ machine:working_directoryに設定する制御シーケンスが既に含まれています。
ak2

最近のMSYS2_packages / filesystem commit 6e6310d(ファイルシステム:新しい特定の変数MSYS2_PS1。既存のPS1の中間優先度がgithub.com/Alexpux/MSYS2-packages/pull/651になるように調整することを提案しました。お役に立てれば。
フィリップオークリー

@Philip、(自己からの注意)その微調整は議論の余地があり、さまざまな使用法をカバーする最小限の実行可能な修正を作成するために、さらに微調整が追加(または削除)されていることが判明しました。
フィリップオークリー

1
関連して、「Cygwin i686」「Cygwin x86_64」などの静的タイトルのみが必要な場合-T <title>は、Windowsショートカットプロパティで使用できます。も参照してくださいmintty man page
jww

回答:


50

なにが問題ですか

次のコマンドは機能していませんでした:

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)は、プロンプトが表示されるたびにウィンドウのタイトルを設定することに注意してください。

ソリューション

次の行を追加して.bashrc、2つの関数を定義します。

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

お役に立てれば


1
ほとんどのユーザーがデフォルトのcygwin設定で遭遇するPS1の問題に対処する素晴らしい仕事です。
マーククK.

3
それは最高の投票答えとは違って完璧に動作しますので、これは答えとして受け入れられている必要があります
Tapanチャンドラを

1
切り貼りできる答えが大好きです。また、問題が実際に何であるかを明確に説明します。
ダレルリー

これらの機能は私にとってはうまくいきます!cygwinが.bashrcをリロードするには、cygwinを再起動する必要があることsource ~/.bashrcに注意してください。そうしないと、cygwinは、cygwinの起動時にディスク上にあったbashrcの古いバージョンを引き続き実行します。-テスト済みCygwin version 2.8.1 (64 bit)
-2017

この回答が受け入れられなかったのはなぜですか?
asmith

26

次のように、xterm制御シーケンスでこれを変更できます。

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

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


4
私には何の効果もありません:/たぶん、このトリックは過去6か月で壊れていますか?
ボルトレボ

bashを使用していますか?
ジェームズフー

2
画面内から発行されても効果はありません。
ЯрославРахматуллин

10
おそらく問題は、コマンドプロンプトが既にタイトルを更新するように構成されているためです(現在のパスを使用する場合)。コマンドは機能しますが、プロンプトによって突然上書きされます。
アンドレアポルチ14

2
それをテストするには「echo -ne '\ e] 0; Title \ a' && cat」。この方法により、プロンプトがすぐにリセットされなくなります。(それが機能する場合は、他の回答で説明されているようにプロファイルのPS1を変更できます)
カーティスヤロップ

3

これを.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で動作します。


WSLでも動作します(もちろんsettitle "$(pwd)@$HOST"
cygpathを除く

2

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


2
1)$ PS1をエコーし​​、その文字列を次のようにクリップボードまたはテキストエディターにコピーします。
   エコー$ PS1
2)〜/ .bash_profileを編集し、以下のシェルコードを追加し、必要に応じて$ PS1を置き換えますが、$ {TERMINAL_TITLE}変数を「false」状態のままにします。
3)ファイルを保存し、TERMINAL_TILE環境変数を次のように設定します
   export TERMINAL_TITLE = "カスタムタイトル"
4)次のようにbashプロファイルを取得します
   。〜/ .bash_profile
楽しい

if [-z "$ {TERMINAL_TITLE}"]
それから
  PS1 = '\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ n \ $ '
他に
  PS1 = '\ [\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ ] \ n \ $ '
fi

1

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

zsh -xv

ディレクトリを変更すると、明らかにtitle()after precmd()およびchpwd()、という名前の別の関数が呼び出され、それらが効果的にオーバーライドされます。だから、これを私の.zshrcにつないでみたところ、うまくいきました。

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

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


1

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

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

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

私は接続するサーバーのために私を促すメッセージが表示されます上記のショートカットで呼び出され、私が書いたことをconnect.shスクリプトスクリプトで定義されているの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

title使用しないのに、なぜ関数を定義するのですか?
パブーク

0

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

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

わたしにはできる。


2
問題は、コマンドプロンプトではなく、ウィンドウのタイトルを変更することです。
ケノーブ

1
これを.bash_profileに追加してください。タイトルを変更しても大丈夫です、ありがとう!
netawater
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.