Zopfcode

かつてない好奇心をあなたに。

Git for Windows な環境に MinTTY を入れた

Windowsでちゃんとしたターミナル使いたい

最近、WindowsPython書いてWindowsでgit動かして…という状況に置かれているpuhitakuです。

というのも、本来はコーディングもgitもLinuxで済ませたいんですが、環境の依存性が高いコードを書いている関係でWindowsでしなきゃいけないっていう。

エディタはSublime Textを使ってるんで問題ないですが、一番の苦痛はそう、ターミナルエミュレータです。Windowsコマンドプロンプト(cmd)のウンコな点を挙げるとするならば、

  • ウィンドウの幅が制限される
  • フォントが自由に選べない
  • アンチエイリアスが正しく効かない (ヒンティングとか全然だめ、MacTypeも効かない)
  • キーアサインや細かい挙動がbashとかなり異なる

みたいな感じです。特にフォント関係が大きいですね。

ところで、Windows for Gitをインストールすると爆速でMSYS + Gitな環境が手に入ります。このままだとコマンドプロンプトに変わりはないので、ここにMinTTY(PuTTYベースのターミナルエミュレータ)を入れてみました。

私の環境だとこんなかんじです。

f:id:puhitaku:20140505023418p:plain

入れてみる

Git for Windowsは入っている前提で話を進めます。

MinTTY for Git for Windowsを入れる

なんだか混乱しそうな名前ですが。 こちらからダウンロード、インストールします。

もうすでに2年ほどメンテされてませんが2014年4月現在ちゃんと動いています。

これを入れた時点で、スタートメニューに同名のフォルダができます。

winptyを入れる

このままだとipythonやvimなど対話的コンソールアプリが正常に動かないので、winptyを導入します。

このRepoでMSYS版をダウンロード・解凍して、MinTTYの本体が入っているフォルダに全ファイルをコピーします。

ショートカットをいじる

うちの環境だとなぜか.minttyrcのデフォルトの場所がおかしいことになってたので、その設定を追加してついでにwinptyの導入設定をします。

スタートメニューのショートカットが参照しているGitMintty.jsに以下の変更を加えます。

  • 15行目書き換え: var minttyArgs = " -c %HOMEDRIVE%%HOMEPATH%\\.minttyrc --title \"Git Bash\"";
  • 26行目書き換え: " --exec " + quotedAbsolutePath("bin\\console") + " " + quotedAbsolutePath("bin\\bash") +

15行目のは.minttyrcの場所の明示的な指定、26行目はwinptyを介してbashを実行する設定です。

全部書き換えると以下のようになります。

var wshShell = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var dp0 = fso.GetParentFolderName(WScript.ScriptFullName);

var quotePath = function(path) {
    return "\"" + path + "\"";
}

var quotedAbsolutePath = function(relpath) {
    return quotePath(fso.BuildPath(dp0, relpath));
}

var shellArgs = " --login -i";
var minttyArgs = " -c %HOMEDRIVE%%HOMEPATH%\\.minttyrc --title \"Git Bash\"";

if (WScript.Arguments.Length > 0) {
    wshShell.CurrentDirectory = WScript.Arguments(0);
} else {
    wshShell.CurrentDirectory = wshShell.ExpandEnvironmentStrings("%USERPROFILE%");
}

var cmd = quotedAbsolutePath("bin\\mintty.exe") +
    minttyArgs +
    " --icon " + quotedAbsolutePath("mintty\\gitmintty.ico") +
    " --exec " + quotedAbsolutePath("bin\\console") + " " + quotedAbsolutePath("bin\\bash") +
    shellArgs;

wshShell.Run(cmd, 1, false);

これで、あとはvimやgitが正しく動くことを確認すれば導入作業は完了です。 あとはお好みでフォントを指定したりしてください。

参考ページ

インストールは以下のサイトを参考にしました。(ソフトの配布ページは省略)

Issue 201 - mintty - mintty does not save config when launched from msysGit bin directory

t0mmy.log - MSYS版のminttyでmsysgitのgit pushしたい