cygwinほど大規模なのは嫌だけど、そこそこにUNIXっぽい環境(ビルドのため)が欲しい人用の環境。

link *

MSYS *

Minimal SYStemの略らしい。ビルドに必要な最低限の環境を提供するのが目的なのだそうだ。

私の場合は

rxvt *

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 だとそのようなことは起こらなかった。

起動後に手動でちょこっとサイズを変えればまあいいのだが、これは面倒である。是非、起動した状態で、ウィンドウ枠をフルに使える状態になっていてほしい。スキルフルな方はここで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起動後に「サイズちょこっといじり」が自動で行われる。