Cygwinのターミナルエミュレータminttyの導入

# minttyとは
minttyは端末エミュレータです。PuTTYを基に開発されました。名前も似ていますね。[ちなみにMinTTYという名前だったこともあります。](http://en.wikipedia.org/wiki/Mintty)
minttyとPuTTYを比較しますと、

* minttyのほうがPuTTYより更新が頻繁です(latest releaseが、[minttyは2013-4-7](https://code.google.com/p/mintty/wiki/Changes)で、[PuTTYは2011-12-10](http://www.chiark.greenend.org.uk/~sgtatham/putty/)）。
* minttyのほうがかっこいい(と私は思います)。

そんなminttyを導入して遊んでみましょう。
- - -
# Cygwinの導入
minttyの導入じゃないの？と思われるかもしれませんが、2011年の終わりにminttyはCygwinのデフォルトの端末となりました。なのでCygwinを導入すればminttyが使えます。[MSYS](http://www.mingw.org/wiki/MSYS)を使うという方法もありますが、せっかくなのでCygwinにしました。
さっそくhttp://www.cygwin.com/ からsetup.exeをダウンロードしてインストールしましょう。
導入パッケージについてはとりあえず次のものを選んでおけばよろしいと思います。

* git-svn
* zsh
* screen
* wget
* make
* openssh
* openssl
* emacs
* vim
* g++

あとで追加できるのであまり悩まずさくっと進みましょう。デスクトップにアイコンができますので、実行すればお馴染みの黒い画面が出てきます。

####　起動時に最大化

起動した時に自動でウィンドウを最大化してくれると嬉しいですよね。
デスクトップにできているCygwin Terminalのショートカットを右クリックし、プロパティを開いてリンク先に次のように書きます。
`C:\cygwin\bin\mintty.exe --window max   -i /Cygwin-Terminal.ico -`

これでWindows上にUNIXライクな環境ができました。いろいろ遊んでみましょう☆ミ
遊んでいるうちにおそらく

# もうちょっとなんとかならんか

と思う方が居られるかと思います。デフォルトのままでは今ひとつ使いづらいもので。なのでなんとかしましょう。
まずはログインシェルとホームディレクトリを変更しましょう。
そのためには/etc/passwdを書き換えます。

####　/etc/passwdってどこ
Cygwinのルートディレクトリはインストールしたディレクトリ(デフォルトではC:\cygwin)です。なので/etc/passwdはC:\cygwin\etc\passwdにあります。

/etc/passwdの中から自分のログイン名がある行を見つけて、末尾を次のように書き換えます。
`/home/yourname:/bin/bash`　→　`/cygdrive/c/Users/yourname:/bin/zsh`
ホームディレクトリは変更する前はC:\cygwin\home\yournameになっています。これはこれでいいという方も居るかもしれませんが私はC:\Users\yournameに変更してホームディレクトリをWindowsと統一しました。

####　cygdriveってなに
ここにWidowsのドライブがマウントされています。`ls /cygdrive/c`とすると、 WindowsのCドライブが見えますね。

minttyを再起動すればログインシェルとホームディレクトリが変更されているのが確認できます。zshもそのままでは使いにくいので設定をいじったほうがいいですがその辺は皆さんにお任せして次に行きます。
- - -
# minttyをかっこよくする
タイトルバーを右クリックしてOptionsをクリックします。とりあえずTransparency をHighにしてウィンドウを透過させますとスケスケになってかっこよくなります(HighよりGlassのほうがかっこいいかもしれません。お好きな方を選びましょう)。フォントも変更しましょう。[Inconsolata](http://www.levien.com/type/myfonts/inconsolata.html)がオススメです。
[Top 10 programming fonts ](http://hivelogic.com/articles/top-10-programming-fonts)でも一位のイケメンなフォントです。Inconsolataは本家から取得しても良いですが、[Google Fonts](http://www.google.com/fonts/) にあるものはヒンティングの修正が行われており、Clear Type環境下でよりイケメンなレンダリングが期待できるので、こちらから取得するのがおすすめです。
また、Inconsolataには日本語フォントが含まれませんので、メイリオなどをフォントリンクさせるのがオススメです。

####　フォントリンクってなに
ちょっとminttyと関係ない話になりますが、フォントリンクについて。
1.　レジストリエディタを起動して、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink
に進みます。
2. 新規 -＞ 複数行文字列値を選択。[新しい値 #1] というキーが作成される。
3.  [新しい値 #1] から [Inconsolata] に変更。
4.  [Inconsolata] を右クリックし修正を選択。
5. 複数行文字列の編集ダイアログが開くので、値のデータウインドウに任意のフォントキー（日本語フォント）を入力しOKを押してダイアログを閉じる。（メイリオをリンクさせる場合、meiryo.ttc,Meiryo と入力）。
6. PCを再起動。

これで端末上で日本語もきれいに表示されます。なお、名前が知りたいフォントがあった場合はコントロールパネルを開いてフォントに進んで右クリック->プロパティで確認できます。メイリオ以外をリンクさせたい場合はそちらから。

また、Cygwinを導入しますと、端末上から簡単にレジストリを読めます。試しに`ls /proc/registry` と入力して確認してみると楽しいかもしれません。

あとは、

* Text->Localeをja_JP、Character setをUTF-8
* Keys->Backspace sends ^Hをチェックしてバックスペースキーでちゃんと消せるようにする
* Mouse->Copy on select と Right click action のPasteをチェックしてPuTTYと同じように操作できるようにする。

などでしょうか。また、これらの設定はホームディレクトリの.minttyrcに保存されます。自分で設定するのはめんどくさいという方は次の内容をコピペするのが手っ取り早いと思います。

```
BoldAsFont=no
Transparency=high
Font=Inconsolata
FontIsBold=no
FontHeight=10
CursorColour=255,0,0
CursorType=block
Locale=ja_JP
Charset=UTF-8
BackspaceSendsBS=yes
RightClickAction=paste
ClicksTargetApp=no
CursorBlinks=yes
FontSmoothing=default
CopyOnSelect=yes
```

- - -
# <del>apt-cygの導入</del> cyg-fastのほうがいいと思います。導入手順は[こちら](http://qiita.com/d9magai@github/items/ff867393b7c257135e70)


以上でひと通りの設定が終わりました。
mintty(Cygwin)で遊んでいますと「パッケージを新しくインストールしたいな」と思うようになります。Cygwinで新しいパッケージをインストールする場合、基本的にはsetup.exe を使ってGUIで操作します。これは分かりやすいといえば分かりやすいのですが、いちいち起動が面倒ですし、パッケージ選択画面は表示が重いですし、Search欄での検索はインクリメンタルサーチなので一文字入力するごとに待たされてしまいます。
そこでapt-getライクなパッケージ管理を行えるapt-cygを導入します。

```
$ svn --force export http://apt-cyg.googlecode.com/svn/trunk/ /bin/
$ chmod +x /bin/apt-cyg
```

Google Codeよりapt-cygをダウンロードしてインストールして、実行権限をつけます。これでインストール終了です。
デフォルトでは mirror.mcs.anl.gov を見に行くようになっていますので、国内のリポジトリに設定しましょう。

```
$ apt-cyg -m http://ftp.iij.ad.jp/pub/cygwin/ update
```

また、次のようにupdateがうまくいかない場合があります。

```
$ apt-cyg update
Working directory is /
Mirror is http://ftp.iij.ad.jp/pub/cygwin/
mkdir: ディレクトリ `//http%3a%2f%2fftp.iij.ad.jp%2fpub%2fcygwin%2f' を作成できません: Read-only file system
/usr/bin/apt-cyg: line 88: cd: //http%3a%2f%2fftp.iij.ad.jp%2fpub%2fcygwin%2f: No such file or directory
```

こんな時は次のコマンドでWorking directoryを適切に設定してあげましょう。

```
$  apt-cyg -c /setup
```

####　apt-cygの使い方
`$ apt-cyg  update`  リポジトリの更新。
`$ apt-cyg find パッケージ名`  パッケージを検索。
`$ apt-cyg install パッケージ名` パッケージをインストール。
ラクチンになりましたね。

####　apt-cygをちょっと修正
apt-cygは大文字と小文字を区別します。「ImageMagickをインストールしたいな」と思ったとしましょう。
「magick」で検索をかけます。

```
$ apt-cyg find magick
Working directory is /setup
Mirror is http://ftp.iij.ad.jp/pub/cygwin/

Searching for installed packages matching magick:

Searching for installable packages matching magick:
```

ありゃあ?
今度はmを大文字にして「Magick」で検索をかけます。

```
$ apt-cyg find Magick
Working directory is /setup
Mirror is http://ftp.iij.ad.jp/pub/cygwin/

Searching for installed packages matching Magick:

Searching for installable packages matching Magick:
GraphicsMagick
ImageMagick
libGraphicsMagick-devel
libGraphicsMagick3
libImageMagick1
libMagick-devel
libMagick10
perl-Graphics-Magick
perl-Image-Magick
```

見つかりました。
大文字と小文字を区別せずに見つけてきてくれたほうが嬉しいですので、apt-cygを次のように書き換えます。

![diff.png](https://qiita-image-store.s3.amazonaws.com/0/24415/f3ce6c37-e433-2a3b-f238-bc007e22e23f.png)

これでめでたく`$ apt-cyg find magick`で見つけてきてくれるようになりました。