Cygwin에서 한텀이 자주 죽는 문제 때문에 오랫동안 대안이 될만한 터미널을 찾아왔다. Puttycyg라는 것도 있었고, CygTerm 등등 여럿이 있었지만, 한텀을 대체할만한 만족스러운 녀석은 없었다. 로컬 sshd에 putty로 접속해서 써볼 생각도 했지만 너무 구렸고, gnome-terminal도 컴파일을 해보려고 했지만 gtk부터 glib, atk등 온갖 것을 포팅해야 했고 포팅에 성공해도 쓰기에 너무 무거울 것 같아서 포기했다. 결국 rxvt를 접하긴 했지만 Windows native 모드로 돌릴 때 한글 글꼴을 따로 쓰는게 잘 안되길래 거들떠보지도 않고 있었다.
그러다 어제 갑자기 또 무슨 바람이 불어서였는지 한텀을 갈아치우고 싶어졌다. rxvt로 장난을 조금 치다보니 어째 영문 글꼴과 한글 글꼴을 따로 쓸 수 있는 것 같아 보였다. 다만 깨진 한글이 나오던 것. 글자들이 다들 high bit이 싹뚝 잘린 모양이길래, rxvt 소스를 가져다가 살짝 살펴보니 역시나 그랬다. JIS가 어떤 인코딩인지는 잘 모르겠지만, euc-kr을 rxvt_euc2jis라는 함수에 넣었다 빼고 있었다. 일본어 인코딩이 여럿이고 이 중에서 ASCII 영역도 침범하고 그러는 좀 구린 녀석이 있다고는 들었는데, 아마도 이 부분 짠 사람이 euc-kr도 그런 줄 알고 각 바이트의 high bit을 모두 없앤 모양이다. GB도 euc2jis에 넣었다 빼고 있던데, 확실치는 않지만, 중국어도 안될게 뻔했다. src/screen.c에서 rxvt_euc2jis 대신에 rxvt_decodedummy를 쓰도록 바꾸니 한글은 한글 글꼴로, 영문은 영문 글꼴로 나오기 시작했다. 일단 http://sourceforge.net/projects/rxvt에 다음과 같은 패치를 등록해놨다:

--- rxvt/src/screen.c	2003-09-28 16:36:22.000000000 +0900
+++ rxvt.new/src/screen.c	2005-04-13 05:35:22.734375000 +0900
@@ -42,7 +42,7 @@
     { EUCJ, rxvt_euc2jis, "eucj" },
     { GB, rxvt_euc2jis, "gb" },
     { BIG5, rxvt_decodedummy, "big5" },
-    { KR, rxvt_euc2jis, "kr" },
+    { KR, rxvt_decodedummy, "kr" },
     { NOENC, rxvt_decodedummy, "noenc" },
     { 0, NULL, NULL }
 };

소스 패키지를 받아두고 그 밑에서 /usr/share/doc/Cygwin/rxvt*.README를 참고하여 다음과 같은 명령으로 컴파일하고 설치했다.

$ CFLAGS="-O -g -W -I`pwd`/W11"  LDFLAGS="-L`pwd`/W11/lib -mwindows -Wl,--subsystem,console"  DLIB=`pwd`/W11/wrap/rxvt_res.o ./configure --enable-xgetdefault --enable-xterm-scroll --enable-frills  --enable-linespace --enable-mousewheel --enable-keepscrolling  --enable-old-selection  --with-xpm-includes=`pwd`/W11/X11 --with-xpm-library=`pwd`/W11/lib  --with-x-library=`pwd`/W11/lib  --enable-languages --with-encoding=noenc
$ make
$ strip src/rxvt.exe
$ install -m 555 src/rxvt.exe /bin

rxvt 쓰는 화면
컴파일하기 귀찮은 사람은 내가 손수 컴파일 해둔 rxvt.exe(MD5 sum, GPG 서명)를 받아서 써도 된다. 2.7.10 버전이다.
한글 글꼴을 Windows의 TTF로 따로 쓸 수 있게 되니까 갑자기 신이 나기 시작했다. 한텀의 입력기가 esc를 누르면 한/영 전환이 되어서 vim에서 특히 편하다. 이 기능 때문에 지금까지 한텀을 고집해온 것이긴 하지만, 글꼴 문제가 해결되니 불편을 감수하면서라도 rxvt로 옮겨가고 싶은 마음이 생겼다. 게다가 새나루 입력기를 쓰면 esc를 누를 때 한글에서 영문 상태로 재설정되게 만드는 것이 가능해 한텀을 고집할 이유가 전혀 없어졌다. 일단은 한글은 바탕체를 쓰고 영문은 ProggyClean이라는 상당히 깔끔한 녀석을 쓰고 있다.
아직 한글은 잘 모르겠고, 영문 글꼴은 좀 돌아다녀보니까 터미널에서 쓰기 좋은 것들이 좀 있었다. ProggyClean 외에도 윈도우즈에(어쩌면 IE나 오피스에) 기본적으로 들어있는, Lucida Sans Typewriter가 괜찮고 Bitstream Vera Sans Mono도 괜찮았다. 프로그래머가 쓰기에 좋은 글꼴들이 http://www.lowing.org/fonts/에 정리가 제법 잘 되어 있다. ProggyClean은 http://www.proggyfonts.com/에서 받을 수 있었다.
글꼴 지정은, -fn 옵션이나 .XdefaultsRxvt*font에 "글꼴 이름-크기"와 같이 주면 된다. "크기-글꼴 이름"도 되는 것 같다. 나는 ~/.Xdefaults에는 다음과 같은 설정을 쓰고 있다:

Rxvt*title: netj's rxvt
Rxvt*iconName: rxvt
Rxvt*visualBell: false
Rxvt*loginShell: true
Rxvt*saveLines: 8192
Rxvt*scrollLines: 65536
Rxvt*scrollBar: false
Rxvt*scrollBar_right: true
Rxvt*scrollBar_floating: false
Rxvt*scrollTtyKeypress: true
Rxvt*scrollTtyOutput: false
Rxvt*multichar_encoding: kr
Rxvt*mfont: Batangche-13
Rxvt*font: ProggyCleanTT-13
! default colors
Rxvt*background: #230031
Rxvt*foreground: #EEDDFF
Rxvt*borderColor: #000000
Rxvt*cursorColor: #CC99FF
rxvt*pointerColor: #FF99CC
!black
Rxvt*color0: #000000
!red
Rxvt*color1: #CC6666
!green
Rxvt*color2: #33CC66
!yellow
Rxvt*color3: #CCCC66
!blue
Rxvt*color4: #3366CC
!magenta
Rxvt*color5: #CC3366
!cyan
Rxvt*color6: #66CCCC
!gray
Rxvt*color7: #808080
!white
Rxvt*color8: #EEDDFF
!brightred
Rxvt*color9: #FF9966
!brightgreen
Rxvt*color10: #66FF99
!brightyellow
Rxvt*color11: #FFFF99
!brightblue
Rxvt*color12: #6699FF
!brightmagenta
Rxvt*color13: #FF6699
!brightcyan
Rxvt*color14: #99FFFF
!brightwhite
Rxvt*color15: #FFFFFF
!etc
Rxvt*colorBD: #B0B0FF
Rxvt*colorUL: #C7BD7A

Cygwin의 Rxvt가 .Xdefaults 읽는 부분을 따로 간단히 구현한 터라 #include 따위를 쓸 수 없어서 기존의 한텀 설정과 호환이 되지 않는 점이 아쉽다. W11이라는 X11 라이브러리를 따로 써서 --enable-xgetdefault를 켜고 컴파일 할 수도 없다. :(
아무튼, 드디어 윈도우즈에서도 X 없이 제대로 된 터미널을 쓸 수 있을 것 같다. :)


sab hacking