[[cygwin:http://www.cygwin.com]]ほど大規模なのは嫌だけど、そこそこにUNIXっぽい環境(ビルドのため)が欲しい人用の環境。
 
 *link [#f92a748b]
 -[[本家:http://www.mingw.org/]]
 
 *MSYS [#wca6277d]
 Minimal SYStemの略らしい。ビルドに必要な最低限の環境を提供するのが目的なのだそうだ。
 
 私の場合は
 -grepやらfindやらの基本的なコマンドを
 -bash相当のシェルで
 -使いやすいターミナル上で
 使うことが動機となって試してみた。
 
 **rxvt [#m485a366]
 ctrl+pで前のコマンドを出せるし、ctrl+a/eで行頭/行末に行くなど、操作感はlinuxのそれと変わらずなかなか良さそうである。
 
 ペーストはshift + insert で行う。窓使いの憂鬱で
  window rxvt /rxvt/ : Global
  key C-y = S-Insert
 としてしまった。
 
 起動は、以下を記述したバッチファイルから行う。
  start C:\MSYS\1.0\bin\rxvt.exe -sl 1000 -fg White -bg Black -sr -geometry 180x70+50+50 -fn "BDF Mplus-13" -e /bin/sh -c  "{ export INITIAL_DIR=%1; export PATH=/usr/bin:$PATH; exec /bin/sh --login -i; }"
 
 環境変数INITIAL_DIRは、初期ディレクトリを指定するために設定した。これは私が勝手に設定しただけなので、このままでは何も起こらない。/etc/profileに
  if [ "$INITIAL_DIR" == "" ]; then
    cd "$HOME"
  else
    cd "$INITIAL_DIR"
  fi
 などと記述しておくことで初めて有効になる。
 
 フォントの指定については、MSYS-1.0.11-2004.04.30-1.exe なるものから導入したrxvtだと、Courier以外では文字の間隔の幅が異常(通常の3倍程度)に拡がってしまい、使用に耐えなかった。MSYS-1.0.10.exe だとそのようなことは起こらなかった。
 
 -geometryオプションでウィンドウのサイズを指定できるが、これがターミナルの幅(?用語はよくわからない。誤用かも)には反映されないようである。例えば、めちゃくちゃ大きい幅をgeometryで指定しても、そこでのlsの出力はせいぜい2、3列で、幅がデフォルトの80文字以内に収まるようになってしまう(せっかく大きい幅にしたのに使われない領域がありもったいない)。一方で実際にウィンドウサイズを枠のドラッグで変更すると、その幅に応じた出力がなされる(領域はフルに使われ、満足)。つまり、ターミナルとしての幅は、geometryの指定からは変更されず、ウィンドウサイズ変更時に初めて反映されるようなのである。
 
 起動後に手動でちょこっとサイズを変えればまあいいのだが、これは面倒である。是非、起動した状態で、ウィンドウ枠をフルに使える状態になっていてほしい。スキルフルな方はここでrxvtのソースをいじるのだろうが、私は安直に以下のようなプログラムを書いた。
  #include "stdafx.h"
  #include <windows.h>
  #include <shlwapi.h>
  #pragma comment(lib,"shlwapi.lib")
  
  int _tmain(int argc, _TCHAR* argv[])
  {
    const int max_text = 256;
    TCHAR str[max_text];
    const int max_wins = 50;
    bool found = false;
    HWND hwnd = GetTopWindow(NULL);
    for(int i=0; i<max_wins; i++){
      hwnd = GetNextWindow(hwnd, GW_HWNDNEXT);
      if(!IsWindowVisible(hwnd)){
        i--;
        continue;
      }
      GetClassName(hwnd, str, max_text - 1);
      if(NULL != StrStr(str, TEXT("rxvt"))){  // found
        //sprintf(str, TEXT("%d"), i);
        //MessageBox(NULL, str, NULL, MB_OK);
        found = true;
        break;
      }
    }
    if(!found){
      MessageBox(NULL, TEXT("rxvt not found"), NULL, MB_OK);
      return 0;
    }
    
    RECT rect;
    GetWindowRect(hwnd, &rect);  
    const int x = rect.left;
    const int y = rect.top;
    const int w = rect.right - rect.left;
    const int h = rect.bottom - rect.top;
    MoveWindow(hwnd, x, y, w/2, h, FALSE);
    MoveWindow(hwnd, x, y, w, h, FALSE);
    return 0;
  }
 
 要は、rxvtを見つけてサイズを縮め、直後にもとのサイズに戻すのである。これを/binに放りこんで、/etc/profileに
  /bin/RefreshRxvtSize.exe
 としておくと、rxvt起動後に「サイズちょこっといじり」が自動で行われる。