2013년 3월 15일 금요일

Console 2 설치와 MSYS 튜닝

Console 프로그램은 최근에  version이 2.0으로 release 되었고, 아직은 beta 버젼이다. Console 다운로드 사이트 에서 다운을 받아 압축을 풀어보면 그냥 곧바로 Console.exe라는 실행파일들과 몇 개의 설정 file 들이 있을 뿐이므로, 사실 설치 과정이라고 할 것도 없이 바로 실행이 가능한 file을 배포하고 있다. 하지만, 이 프로그램이 수정 없이 바로 쓸 수 있는 것이라면 얼마나 좋겠는가? 물론 Console 본연의 동작은 잘 하고 있지만, 다운 받은 그대로라면 DOS 환경을 bash 비슷하게 바꾼 버젼의 Console 밖에는 안된다. 즉, shell 실행을 연결시켜 줘야 제대로 된 console 이 되는 것이고, shell 실행과 함께 home directory 등도 설정해 주어야 비로소 제대로 쓸 수 있다. 이 shell 이라는 부분은 Console 프로그램 자체가 어찌할 수 있는 것이 아니고, MSYS가 어찌 해 주어야 하는 부분이라서 Console과 MSYS의 sh.exe 를 연동시킬 방법이 필요하다.

Console.exe  및 관련 설정파일 이동


우선 압축을 푼후 directory에 있는 Console.exe와 console.xml 그리고, 나머지 dll 화일들을 모두 msys/1.0/bin 으로 이동시킨다. 제대로 이동이 되었는가 보려면, 앞서 설치 했던 MSYS shell (MinGW Shell) prompt 에서 console.exe (아마도 exe는 빼고 console 만 쳐도 될 듯)을 type 하면 console 창이 뜨면서 console이 동작하는 것을 볼 수 있을 것이다. 물론 아직은 shell 이 연동 안되었다.

Console.exe와 MSYS의 연동 


이 console program의 재미있는 점 중에 하나가 바로 설정 파일이 xml 형식으로 되어 있다는 점이다. 그 이유까지는 나도 잘 모르곘고, 위에서 msys/1.0/bin 으로 옮겼던 file 중에 console.xml 이 바로 Console.exe의 설정 file 이어서 이 화일이 Console의 동작 setting을 관장한다. console.xml 을 editor로 열고 들여다 보면,

<console shell="" init_dir=""/> 

라고 되어 있는 부분이 두 군데 있을 것이다. 이 부분을 각각

<console shell="E:\Users\Local\MinGW\msys\1.0\bin\sh.exe -c 'MSYS TEM=MSYS exec /bin/sh --login -i'" init_dir="E:\Users\Local\MinGW \msys\1.0\bin"/>

로 수정해 주면 Console에 MSYS shell이 연동된다. (위의 내용은 single line 임. 물론 Path는 각자의 환경에 따라 다르므로 알아서 수정해야 할것임)

이렇게 수정한 후에 MSYS shell에서 console을 type 하여 실행해 보면 정상적으로 home directory에서 console이 열리는 것을 볼 수 있으며, bash가 실행되고 있어 마치 Linux 머신에 login 한 것과 같은 상태로 바뀌게 된다.

이제는 정상적으로 console 프로그램을 사용할 수 있을 것 처럼 느껴질 것이다. 하지만, 아직도 몇가지 설정이 더 있다. 우선, 제일 먼저 이런 생각이 들 것이다. "바탕화면에 있는 MSYS 아이콘을 클릭하면 바로 Console 프로그램이 열리고 shell 설정이 적용되게 할 수는 없을까? 당연히 할 수 있다. 이것을 설정하기 위해서는 msys/1.0/ (말하자면 msys root directory 임) 밑에 있는 msys.bat를 수정해야 한다. msys.bat은 바로 바탕화면에 있는 MSYS 아이콘과 연결된 실행 batch 파일로 아무 editor나 사용해서 다음 부분 찾아 수정한다. 아래의 내용 중 하늘색 부분이 수정된 부분이다.


rem ember Set up option to use rxvt based on value of %1
set MSYSCON=unknown
if EXIST console.exe goto startconsole
if "x%1" == "x-norxvt" set MSYSCON=sh.exe
if "x%1" == "x--norxvt" set MSYSCON=sh.exe
if "x%1" == "x-rxvt" set MSYSCON=rxvt.exe
if "x%1" == "x--rxvt" set MSYSCON=rxvt.exe
if "x%1" == "x-mintty" set MSYSCON=mintty.exe
if "x%1" == "x--mintty" set MSYSCON=mintty.ex

.
(중간 생략)
.

:startconsole
start Console.exe
exit  1

사실 msys.bat의 대부분의 code들이 필요가 없는 것들이라서 다 지워버리고 싶지만, 가급적이면 원본을 유지하는 것이 좋을 것 같다는 생각도 들었다. 예를 들어, 위의 설정에서 mintty나 rxvt는 MSYS 기본 버젼에는 설치가 안되어 있으므로 있으나 마나 이다. 아무튼, 위 code의 기본 취지는 console.exe가 있는가 확인하고 만일 있다면 나머지 다 무시하고 Console.exe를 실행하도록 한 것이다. 좀 더 깔끔한 코드를 원하는 사람은 위의 내용을 응용해서 잘 다듬어 보길 바란다.

.profile과 .bashrc 설정


아마 Linux 환경에 익숙해 있는 사람은 먼저 alias와 같은 것들이 설정이 안되어 있는 것을 확인하게 되면 home directory 밑에 있는 .bashrc 부터 열어보게 될 것이다. 그러나, MSYS 설치 직후에는 아무것도 없다. 실제로 .bashrc를 손수 만들어서 alias vi='/usr/bin/vim' 와 같은 라인을 추가해도 전혀 먹통이다.

배포판 마다 약간씩 다를 수 있겠지만,  Linux에서 bash rcfile 들은 일종의 계층이 있어서 /etc/ 및에 있는 profile 과 bashrc 그리고,  home directory에 있는 .profile(혹은 .bash_profile)과 .bashrc 로 구성되어 있는 것이 보통이다. /etc/ 밑에 있는 것은 global  scope이고 home directory 밑에 있는 것들은 user scope의 설정이라고 보면 되겠다.  Home directory 내부에서도 .profile은 좀더 상위의 설정, 그리고 .bashrc 는 alias나 각 tool 별 설정과 같이 수정이 빈번할 수 있는 최하위 설정을 기입하는 것이 일반적이다. 사실 정해진 규칙 따위는 없다. 예를 들어, .alias라는 화일을 따로 두어서 alias 들을 따로 관리하기도 한다. 어찌 되었건, MSYS 설치한 직후에는 상태에서는 /etc/profile 만 존재하고 나머지는 하나도 없으므로 나머지 계층적 rcfile들을 올바르게 만들어 주어야 비로소 shell 환경의 기초가 구성된다.

필자의 경우에는 home directory 아래 .profile과 .bashrc를 다음과 같이 만들어 주었다.
먼저 .profile에 들어가는 내용은

#! /bin/sh.exe
# my .profile
if [ -f ${HOME}/.bashrc ]
then
      . ${HOME}/.bashrc
fi

export CVS_RSH="ssh"

export EDITOR="/usr/bin/vim"
export HISTSIZE="500"
export PATH="${HOME}/bin:${PATH}


그리고, .bashrc의 내용은 다음과 같이 작성한다.

# my .bashrc

if [ -f /etc/bashrc ]

then
     . /etc/bashrc
fi

# User specific aliases and functions

alias vi="$EDITOR"

이제 MSYS icon을 클릭하면 Console 창이 뜰것이고 bash rcfile 들이 제대로 물려 돌아가는 것을 확인할 수 있다. 위의 alias도 제대로 동작하여 vi 라고 치면 vim 이 실행되는 것을 볼 수 있을 것이다. 이제는 정말 모든 설정이 다 끝난 것 같지만 아직 몇가지 더 남았다. "여기까지만 해도 쓸만한데 뭘" 하는 사람도 있겠지만, 아직도 치명적이면서 짜증나는 부분들이 해결 안된 채 남아있다.

Console의 font 설정 및 기타


여기 까지 다 설정이 되었다면, 바탕화면에 MSYS shell icon을 클릭하여 Console이 실행되고 동시에 shell 이 연동될 것이다. Console의 font는 default로 Courier로 설정되어 있는데 이 부분은 GUI창에서 Edit > Settings > Appearance 를 선택하여 쉽게 변경할 수 있다.

Console 2의 setting dialog 창


필자의 경우는 coding용 폰트로써 Monaco font 주로 사용하므로 internet에서 다운 받아 windows font에 등록하여 사용하고 있다. 위의 그림과 같이 Console의 dialog 창에서 Monaco 폰트를 선택하고 원하는 size로 설정만 해주면 console.xml의 내용이 자동의 바뀌어 저장이 된다. (MSYS 연동은 이 GUI setting 방법으로는 안되는 것 같다. 혹시 방법을 찾으면 알려주시길 바람.)
[여담]  아마도 대부분의 programmer 들은 선호하는 coding용 font 들이 있을 것이다. 필자의 주변에는 windows에 기본으로 깔려있는 Consolas도 coding용으로 많이 애용되고 있다. 가독성이 좋으면서도(예를 들면 zero와 alphabet o의 구분) 1자폭 의 폰트, 그리고, 오래 바라보아도 피로감이 덜한, 자기 한테 꼭 맞는 폰트를 골라보는 것도 즐거운 일이다. 대략 10 종의 폰트가 coding 용으로 많이 쓰인다고 한다. 어떤 것이 자신에게 잘 맞고 실용적인 font 일까?
Appearance 및에 More라는 항목에 가면 창의 투명도를 조절할 수 있는 fancy 기능도 있다. 또 단축기 기능도 막강하다. 예를 들어 Ctrl +F1을 누르면 새로운 tab이 shell과 함께 생성되며, Ctrl+1, Ctrl+2 등을 눌러보면 tab간의 이동이 자유롭게 됨을 확인할 수 있다.

설치된 Console의 화면 (투명도 40, 폰트 Monoco, 3 Tabs)

댓글 없음:

댓글 쓰기