한글과 영문이 많이 섞여있는 문서를 작성하다보면 가끔 Cmd-Space를 눌러 입력기를 전환하였는데도 이전 입력기로 입력이 되는 경우가 있었다. 특히 영문 대문자가 많이 있는 글이 이런 경우가 잦았는데, 이제서야 정확한 재현방법을 알아냈다. 결론은 Mac OS X 운영체제의 입력기 전환 시스템의 버그인 것 같다.
재현방법은...
- Command키를 누른다.
- Space키를 누른다. 이때 입력기는 바뀐다.
- Space키를 뗀다.
- Shift키를 누른다.
- Command키를 뗀다.
- 이때 입력되는 글자는 바뀐 현재 입력기가 아니라 이전 입력기를 통하고 있다...
- Shift키를 뗀다.
- 이제서야 현재 입력기로 입력된다.
과정중 3번과 4번은 순서가 바뀌어도 상관없다.
하늘입력기에서만 발생하는 버그면 디버깅해볼려고 했겠지만, 모든 입력기에서 다 나타나는걸 보고나니 하늘입력기 소스 열어보고 싶은 맘도 싹 가셨다. 이제 토스하는 일이 남았군...
이 글은 스프링노트에서 작성되었습니다.
Mac OS X을 쓰면서 X11을 쭈욱 써왔다. 그래서 나의 .profile에는 항상 다음과 같이 DISPLAY환경변수를 세팅하도록 해놨었다.
export DISPLAY=:0
Mac OS X 10.5 Leopard를 사용하기 시작하면서 초기에는 X11의 버그가 꽤 많았다. Spaces와 관련된 버그, 커서색깔버그(커서 색깔 버그는 인텔맥이 나오면서부터 쭈욱 있었다)... 이런 종류의 꽤 심각한 버그에 비하면 X11을 실행하면 독에 아이콘이 두개 뜨는 사소한 버그는 신경쓰고 싶지도 않았다.
이제 Mac OS X 10.5.5까지 업데이트가 되었고 앞서 말한 X11의 심각한 버그들은 어느 정도 해결된 것 같다. 이제는 독에 아이콘이 두개 뜨는 문제가 눈에 거슬리기 시작했다. 하지만, 조금의 시간이 흐른 후 알아낸 사실은 의외였다.
Leopard의 X11은 X11 프로그램이 시작할 때 launchd가 알아서 X11을 실행시켜준다는 것이었다. 순간 DISPLAY환경변수가 없으면 X11 프로그램이 아예 안 뜰텐데 라는 생각이었고 혹시나하면서 .profile에서 DISPLAY환경변수 세팅을 지우고 터미널을 새로 띄웠다. 그리고는...
$ echo $DISPLAY /tmp/launch-uXdnM2/:0
쯔압... 이게 뭐야~
launchd가 만들어 놓은 소켓파일이다. 그 후, 정말로 X11이 자동으로 뜨는데다가 독에 X11아이콘이 하나만 얌전히 들어앉는다.
할 말이 없다. launchd야~
이 글은 스프링노트에서 작성되었습니다.
DDD를 컴파일하기 위해서는 Motif라이브러리가 필요하다. lesstif나 OpenMotif를 설치해야한다. 나는 OpenMotif를 사용하였다.
openmotif-2.3.1 설치하기
openmotif-2.3.1을 컴파일 할 때 문제는 freetype2라이브러리가 Mac OS X에 이미 설치되어 있고 freetype-config 프로그램이 제대로된 결과를 출력함에도 불구하고 freetype 헤더파일을 찾지 못한다는 것이다. 그래서 다음과 같이 CFLAGS를 강제로 세팅하였다.
./configure CFLAGS=-I/usr/X11/include/freetype2 make sudo make install
ddd-3.3.11 설치하기
ddd를 컴파일할 때 문제는 Mac OS X의 기본 파일시스템인 journaled HFS+가 대소문자가 다른 파일이름을 허용하지 않는다는 것이다. (case preserved, not case sensitive) 그래서, X resource 파일인 Ddd와 실행파일인 ddd가 한 디렉토리에 존재하여 하나가 다른 하나를 덮어써버린다. 컴파일할 때 EXEEXT 변수를 사용하여 work-around한다.
./configure make EXEEXT=.exe sudo make install EXEEXT=.exe sudo mv /usr/local/bin/ddd.exe /usr/local/bin/ddd
추가적으로, gnuplot이 필요하다면 설치한다.
readline-5.2 설치하기
gnuplot 컴파일 시 readline라이브러리와 링크하다가 에러를 낸다. Mac OS X에 기본으로 깔려있는 readline라이브러리는 사실 libedit(readline의 NetBSD버전)이다. 정확한 이유는 알 수 없지만 뭔가 궁합이 맞지않는다고 생각하고 GNU readline을 먼저 설치해준다.
readline을 컴파일할 때 libtool이 shared library를 build할 때 사용하는 -dynamic 옵션이 -compatibility_version 옵션과 충돌한다. SHOBJ_LDFLAGS옵션을 줘서 -dynamic옵션을 -dynamiclib옵션으로 바꿔주면 된다.
./configure make SHOBJ_LDFLAGS=-dynamiclib sudo make install
gnuplot-4.2.4 설치하기
gnuplot이 /usr/local에 설치된 readline라이브러리를 사용하도록 다음과 같이 CFLAGS와 LDFLAGS를 세팅해준다.
./configure CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib make sudo make install
무엇 하나 곱게 되는 법이 없다.
이 글은 스프링노트에서 작성되었습니다.


