2013년 3월 15일 금요일

중요한 설정들 몇 가지 더


짜증나는 벨소리 없애기



비록 간단한 작업이긴 하지만 MSYS+Console+Vim 환경에서 벨소리를 없애려면 두 군데나 손을 봐야 한다.

 
[여담] 무슨 이유로  Vim이나 shell terminal에 bell을 넣었는가 도무지 이해가 안간다. 어떠한 경우에도 typing 오류와 관련한 bell은 불필요할 듯 싶은데 말이다. 음악들으면서 coding 하기 좋아하는 필자 같은 사람들에게는 bell 소리가 정말 짜증난다. 


Shell prompt 오류 bell 죽이기


우선 MSYS 에서 마주치는 첫 bell 소리는 shell prompt 사용 중에 발생한다. 잘못된 입력이 발생하면 "띵"  하는 소리가 난다. 예를 들어, 더 지울 것이 없는데도 'backspace' 키를 계속 누르고 있으면 bell 이 발생하는 것이 bell 경고의 대표적인 예라고 할 수 있다. 이 bell 경고를 없애려면 Console 을 열고 shell 에서 Vi 로 home directory 에 있는 .inputrc 를 열어 다음 부분을 수정한다. 만일 bell 대신 visible 경고로 바꾸고 싶은 사람은 아래의 none 대신 visible 을 기입하면 된다. 그러나 그런 사람은 없을 것이다. 화면 깜박거림은 옛날 unix TTY terminal (검정 화면에 녹색글씨 - 영화 매트릭스에 비슷한 모니터가 나옴)에서 라면 모를까 windows 환경에서는 한마디로 'shit'  이다. 싸이코가 아니라면, 그냥 none 으로 설정해 놓는 것이 나을 것이다.

# none, visible or audible
set bell-style none


Vim의 오류 bell 죽이기


Shell에서 bell 소리가 없어졌다고 하더라도, Vim 에서 편집 중에 잘못된 key 입력이 있는 경우 bell 을 발생시킨다. 아무리 Vim 에 숙련된 사람이더라도 본인이 로보캅이나 R2D2 가 아니라면 가끔씩 bell 소리를 듣게 되는 것은 Vim editing 방식 상 피할 수 없는 것이 아닐까 싶다. 특히, Vim 에서 영어 이외에 다른 언어를 사용하는 사람이라면 더더욱 그러한 경우가 많을 것이다. .virmrc에 다음을 추가 함으로써 Vim  bell 은 죽는다. (아래에서 맨 마지막 = 다음에는 아무 글자도 없다.)

set vb t_vb=

Vim Ctrl-w, Windows hotkey와 충돌?


만일 Windows 용 gVim을 써본 사람이라면 Windows와 Vim 단축키 간의 충돌이 어떤 것인지 잘 이해 할 것이다.  예를 들어 Vim 에서 visual mode로 들어가려면 Ctrl-v를 type 해야 할 것인데, 이는 윈도우즈의 등록된 'paste' 명령 단축키 이기도 하다. 단축키의 충돌을 피하기 위하여 gvim 에서는 shift-v가 visual mode 단축키로 재설정되어 있다. 

Console 2 에서도 Vim command mode 에서 window mode로 들어가기 위하여 Cttl-w 을 누르면 황당하게도 Console 이 닫혀 버리는 현상이 발생한다. 필자는 처음에 이 키 조합이 Windows 의 application close 단축키인 Ctrl-w 와 충돌이 나는 것으로 오해를 하여 Window hotkey mapper 들도 종류별로 다운받아 시도해보고 별 짓을 다 해 봤지만 해결이 안되었었다. 나중에 알고보니 Console 의 조합키 setting을 바꾸어 주기면 하면 되는 거였다. Console-2의 GUI 메뉴에서 Edit > Setting 을 선택한 후 창에서 왼편 tree 의 Hotkey 를 클릭하면  다음과 같은 설정 화면이 나온다.


이 hotkey  설정 메뉴에서 Close Tab 이 Ctrl-w 로 되어 있는 것을 none 으로 변경하기만 하면  Console 에서 Vim editing 중에 Ctrl-w를 눌렀을 때 Console 프로그램이 완전히 종료해 버리는 현상이 사라진다. 이 부분을 해결하고 나니 어쩐지 MSYS의 Vim이 Windows 용 gVim 보다 멋져 보인다. MSYS 의 vim 에서는 Ctrl-v 도 아무 문제 없지 작동하니 한결 맑고 상쾌한 느낌이다. 


Vim의 튜닝


Vim 을 좋아하는 사람들은 Vim 의 다양한 강력한 기능에 반하기도 하지만, 사용자에게 주는 '자유도'에 매력을 느낀다.  '자유도'라고 함은 사용에 있어서 다양한 방법이 존재한다는 의미일 것이다. 따라서, Vim을 customize 하는 방법은 수도 없이 많고, 고수가 되는 길은 멀고 험하다. 필자가 감히 그 부분을 다 나열하려고 했다간 책을 한권 쓰게 될 것이다.

Vim 설정에 있어서 기억하면 도움이 될 만한 것들만 간략하게 나열해 볼까 한다.


Key mapping


Vim key mapping 기능을 설명하기 위하여, Vim 의 Window 모드에서 Window 간 이동을 하는 명령을 예를 들까 한다. 필자는 현재 윈도우에서 우측 윈도우로 이동, 좌측윈도우로 이동, 윗쪽 윈도우로 이동, 아랫쪽 윈도우로 이동하는 명령 키조합과 새로이 mapping 할 키조합의 설정을 아래와 같이 정하여 사용하고 있다.
 
동작
원래의 Vim 단축키
변경된 Vim 단축키
좌측 윈도우로 이동Ctrl-w,hCtrl-h
우측 윈도우로 이동Ctrl-w,lCtrl-l
상측 윈도우로 이동Ctrl-w,kCtrl-k
하측 윈도우로 이동Ctrl-w,jCtrl-j

사실 매번 Vim 윈도우간 이동시 Ctrl-w 를 누르고 방향 key 를 또다시 누르는 것은 상당히 번거롭기 때문에 적지 않은 사람들이 위의 table 의 변경 방식을 애용하고 있다. 위의 table 과 같은 Vim 단축키 변경을 반영하기 위해서는 .vimrc 에 다음과 같은 line을 추가하면 된다.

map <C-h> <C-w>h
map <C-l> <C-w>l
map <C-k> <C-w>k
map <C-j> <C-w>j


이제 vim 으로 아무 file 이나 열어 놓은 다음에 :sp 혹은 :vs 명령을 사용하여 두 개의 window를 만들어 보자. 그런 다음 Ctrl-h, j, k, l 적용에 보면 편집 control 이 좌/우/상/하로 이동하는 것을 볼 수 있을 것이다. 매번 Ctrl-w를 치지 않고 Ctrl을 누른 상태에서 h, j, k, l 방향키(설마 vim을 쓰면서 화살표 키를 방향키로 쓰는 사람은 없겠죠? - 물론 이 경우도 mapping 이 가능함)로 간편하게 이동이 가능하니 얼마나 편리한가? 

Vim 의 key mapping 에 관한한 상당히 많은 응용예를 인터넷에서 찾아볼 수 있다. key mapping 에 대하여 보다 많은 정보를 얻고 싶다면 www.vim.org 에 있는 map, nmap, imap 관련 문서를 확인하기 바란다. 또한 Vim command mode 상태에서 :map 을 type 하면 mapping list 가 화면에 뜨므로 직접 key mapping 상황을 확인해 볼 수 있다.

[여담] Key mapping 시에 가장 어려운 부분은 안쓰는 키조합을 찾아내는 것이다. 어떠한 경우에도 안쓰는 조합키들이 있는데 그 것들이 과연 무엇일까? 그것이 문제로다. ㅎ


Syntax  highlight와 indent 설정


Coding 에서 가독성이 중요하다는 말은 정말 귀가 닳도록 듣는 이야기 일 것이다. 가독성을 결정하는 요소 중에서 가장 중요한 것은 본인의 coding style 일 것이고, 그 다음으로 중요한 것은 comment 일 것이다. 그 다음으로 중요한 것들이 바로 syntax highlight 와 indent 일 것이다.

syntax highlight 라는 것은 해당 language 의 keyword 를 색깔과 bold 등으로 구분지어 표시하도록 하는 기능인데, 대부분의 coding 용 highlight는 MSYS basic 설치에 이미 포함이 되어 있다. MSYS 에서 단순히 Tcl/Tk 나 c 를 coding 할 경우 syntax highlight 와 indent 가 필요하다고 생각되면 .vrimrc 에 다음과 같은 내용을 추가 하기만 하면 된다.

syntax on
filetype indent on

만일 /text_to_seach 를 사용하여 search 및 trace 를 할 때 highlight 를 끄거나 켜는 것을 특정 key 에 지정하고 싶다면, 다음과 같이 .vimrc 내에 funciton 을 사용하여 key mapping 을 구현할 수도 있다.

function ToggleHLS()
     if &hls
          set nohls
     else
          set hls
endfunction

map <silent><C-n> :silent call ToggleHLS()<CR>

이렇게 해 놓으면 /text-to-search 후에 :set hls 혹은 :set nohls 를 할 필요 없이 Ctrl-n 만으로 간단히 search text highlight 를 toggle 할 수 있다.

Tab의 설정


Tab 사용을 하는 것이 좋을까? 아니면 안하는 것이 좋을까? 답은 'Tab 사용은 안하는 것이 좋다'  이다. 왜냐하면, 여러 사람이 coding 을 할 경우에 저마다 tab 설정이 다를 수 있고, 설사 같이 일하는 사람들 끼리 tab 설정을 맞추었다고 하여도, 고객이나 다른 업체의 사람들이 coding text 들을 가져다가 열람할 경우 tab 설정이 다름으로 해서 가독성이 엉망이 되는 경우가 많기 때문이다. 그럼 tab을 사용 않고 오로지 space 키에만 의존해서 indent 를 만들어 줘야 할까? 답은 '그런 수고까지 할 필요는 없다' 이다. Vim 은 file 저장을 할 때 tab을 space 로 바꾸어 주는 기능을 제공하고 있기 때문에 사용자는 vim 의 auto indent 기능을 만끽하고 tab을 마구 남용하면서도 tab 설정으로 인한 호환성 문제를 깨끗하게 해결 할 수 있다. .vimrc 에 다음과 같이 기입하면 tab 이 space 로 바뀐다. 여기서 숫자는 원하는 tab 의 size 이다. 

set et
set ts=3
set sw=3

이제 이 후로는 vi 편집시 tab을 사용해도 나중에 저장할 때 모든 tab 이 space 로 바뀌는 것을 확인 할 수 있을 것이다.

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)

MinGW와 MSYS 설치

MinGW donwload site에 가면 MinGW 개발 환경을 구성하는 개별 component를 다운 받을 수 있도록 link가 표로 구성되어 있고, 그 항목들 중에는 installer가 있다. 복잡하게 생각할 필요 없이 installer를 다운 받아 설치한다. installer의 이름은 mingw-get-inst-xxxxxxxx.exe 라는 이름을 가지고 있다. (xxxxxxxx는 날짜을 표시하는 숫자일 것 같음)

설치시 선택사항


Repository 선택 창


아래와 같은 창에서 repository catalogues 를 선택을 할 수 있다. 첫 번째의 경우는 download 한 버젼을 그대로 설치하는 경우이고, 두번 째 radio 버튼의 경우는 internet을 통해서 원격의 repository에 새 버젼이 있는가를 확인하여 가장 최신 버젼으로 설치를 시작한다. 방금 다운을 받은 설치 file이라면 아무거나 선택해도 무방하겠지만, 그렇지 않다면, 혹은 설치 한지 좀 되었는데 다시 설치하는 것이라면 두번 째 항목의 'Download latest repository catalogues' 를 선택하면 되겠다.



설치 항목 결정


아래와 같이 설치할 할 항목을 결정하는 dialog 창이 나타나면 반드시 맨 아랫쪽에 있는 'MSYS Basic System' 과 'MinGW Development ToolKit' 항목을 설치하도록 check 하는 것이 좋다. Bash 환경과 vim editor 등을 포함한 개발 환경에 기본적으로 필요한 것들을 일일이 개별 설치하기 싫다면 이 항목을 반드시 check 하는 것이 좋겠다.



Path 설정


설치가 완료되면 설치된 directory로의 path 지정은 굳이 해 줄 필요가 없다. 혹시나 그냥 dos command 환경에서 개발을 하겠다면 path 지정이 필요하겠지만, 그렇지 않고 MSYS의 bash 환경에서 개발을 하겠다면 사실상 path 지정은 필요 없다. 그 이유는 MSYS shell (이 설치 버젼에서는 MinGW shell이라고 함)실행과 함께 root 가 따로 정해지기 때문이다. 즉, cygwin의 경우와 마찬가지로 MinGW 설치 directory 밑에 msys/1.0/ 가 shell의 root directory가 되고 shell을 실행하면 msys/1.0/home/username이 home directory가 된다.

설치 시험


설치를 다 마치고 나면 바탕화면에 icon이 생긴다.


이 아이콘을 click 하면 shell 창이 생기는데 이는 기본 dos command 창에서 sh.exe의 수행한 결과와 같은 형태이기 때문에 font 며, 창의 모양새까지 별로 맘에 들지 않는다. (이럴 바엔 그냥 DOS command 창을 쓰겠다는 생각이 들 정도이다.) 또한 bash profile 도 전혀 설정이 되어 있지 않아서 alias나 path 조차도 적용이 안되어 있다. 오로지 뭔가 되는 것이 하나 있다면 msys/1.0/bin에 기본 툴들이 깔려 있고 이 directory가 기본 실행 directory로 path가 잡혀 있어서 bin 내부에 있는 실행 명령들은 뭐든 type  하여 동작 시킬 수 있다는 점 뿐이다. 예를 들어 vim이라고 type하면 vim editor 창이 바로 뜬다 . 또 간단한 c program을 짜서 gcc로 컴파일 해보면 컴파일도 문제없이 되는 것을 알 수 있다. 여기까지 확인이 되었다면 MinGW와 MSYS는 필요한 만큼의 설치가 다 되었다고 할 수 있다.

[여담] 아마도 MinGW나 Cygwin 사용자들은 rxvt라는 terminal program을 사용하고 있을 것이다. MSYS도 rxvt를 사용할 수 있도록은 되어 있다. 다만, 현재 버젼의 MSYS Basic System에선  rxvt가 설치 되어 있지 않으므로 rxvt를 사용하려면 개별적인 설치를 해야 한다. 비록 많은 사람들이 rxvt의 설정을 수정하고 font도 수정하여 그럴싸한 terminal 프로그램 처럼 사용하고 있기는 하지만, 매우 기본적이고 원시적인 console 로 밖에 구성할 수 없다는 것은 누구나 시인하는 사실일 것이다. 이 의견에 동의하는 사람은 console이라는 프로그램을 사용해 보길 권장한다.

ActiveTcl의 설치 및 구동

ActiveTcl 설치


ActiveTcl 설치 과정은 매우 간단하며 직관적이다.
설치에 앞서 설치 위치를 정하고 설치 후에 Path을 지정해 줘야 나중에 MSYS의 bash shell에서 원활히 tclsh이나 wish를 호출하여 사용할 수 있다는 점을 기억해 두자.

우선 download site 에 가면 각 버젼별, OS 별 다운로드 table이 있다. 이 중에서 windows 버젼을 다운 받아 설치하면 되는데 각각 32-bit 버젼(x86) 과 64-bit 버젼(x64) 버젼이 있으므로 본인의 OS 사양에 맞게 골라서 다운로드 하여 설치한다.

설치 directory에 대하여는 본인 맘데로 정하면 되겠지만, 필자의 경우는 linux의 경우와 windows의 경우를 구분해서 directory 구조를 정하고 있다. 즉, RedHat 계열 (CentOS 계열) linux의 경우는 /usr/local/에 tool 들이 설치하는 것이 일반적인 default 라고 할 수 있지만, windows의 경우는   directory 이름의 맨 앞 글자를 대문자로(물론 windows는 cmd 에서는 대소문자 구분을 못하지만) 하고 구분을 위하여 약간은 다른 path명으로 만들어 사용하고 있다. 즉, usr 대신 Users, local 대신 Local이라는 directory 명을 사용하고 있다. 예를 들면, windows 내에서 unix 계열 tool의 설치 위치는 X:\Users\Local\ 와 같은 식으로 path를 만들어 사용하였다. 그 이유는 간단하다. 진짜 linux 접속창과 가짜 linux 접속창을 구분하기 위한 것이다. 예를 들어 windows 머신인 줄로만 착각하고 원격 서버에 뭔가를 지우거나 복사를 한다면 어떤일이 벌어질까? 난감한 경우가 종종 생길 수도 있음을 직감할 수 있다. 암튼 설치 위치는 개인의 자유이니 알아서 정하면 될 것이고, 아무리 이상한 곳에 설치한다고 해도 동작에는 전혀 지장 없다. 

설치가 다 되었으면, path를 지정해 주는데, 그 방법은 다음과 같다. 시작버튼을 누르고 'computer' 에서 오른쪽 마우스 버튼을 누르고, 'property' 라는 항목을 선택한다. (Control Pannel > System and Security > System 의 경로를 찾아간 것과 동일함) 여기서 좌측에 'advanced system settings'를 클릭하면 다음과 같은 'system property' 창이 뜨게 된다.


이 창에서 'Advanced' 탭을 누르고 'Environment Variable' 창을 클릭하면 다음과 같은 창이 나타난다.


Environment Variable dialog box에서 System variables 쪽에 있는 항목 중에서 path를 찾아내고 마우스로  선택한 다음 "Edit..." 버튼을 누른다. 이어서 pop up 되는 dialog 창에서 path 입력 부분의 맨 앞 부분으로 가서 (home key도 안먹으니, <- 키를 열라게 눌러서 맨 앞이 나올때까지 스크롤한다.) path를 추가 기입한다. 예를 들어 E:\Users\Local\Tcl\bin이 앞서 설치된 ActiveTcl의 bin directory path라고 한다면 path의 맨앞에 해당 path를 적어주고 방금 기입한 path 바로 뒤에 ; (세미콜론)을 반드시 기입한다. 다 했으면 'OK' 버튼 들을 눌러서 'System Properties' 창에서 빠져나오면 모든 path 설정이 끝난 것이고 ActiverTcl의 설치가 완료된 것이다. 재부팅은 필요없다. (Windows 98을 사용하는 사람은 없겠지?)
[여담] 재부팅하면 예전 버젼의 Windows가 생각이 난다. 요즘 Windows 98를 사용하는 사람은 없겠지만, 옛날에는 농담삼아 Windows 뒤에 오는 버젼 넘버가 설치 완료까지의 재부팅 횟수라고들 말하곤 했었다. Windows 98은 98 번을 재부팅해야 설치가 되고, windows 2000는 2000번, windows XP의 XP는 재부팅하다가 튀어나오는 X팔이라는 욕을 의미한다나? ㅎㅎ

ActiveTCL의 시험 구동


설치를 다 마쳤으므로 DOS Command 창에서 tclsh이나 wish를 치면 구동이 되어야 한다. 시작 버튼을 누르고 시작버튼 바로 위에 있는 검색창(Search Programs and Files)에 cmd 라고 type 하고 enter 키를 누르면 command 창이 뜰 것이다. command prompt에 tclsh이라고 type 한 후 아래 그림 처럼 % prompt가 나오면 설치가 제대로 된 것이다. % prompt에 exit이라고 type 하면 tclsh 에서 빠져나와 dos prompt를 돌려줄 것이다.


뭔가를 더 해보고 싶은 사람은 DOS prompt에 wish라고 치거나 tkcon 이라고 쳐보면 원가 재미있는 것이 뜨는 것을 알 수 있다.  GUI 기반의 Tcl/Tk shell 창이 뜰 것이다. 이 부분에 대하여는 나중에 살펴보기로 하고 뭔가 뜨는가 확인만 한번 해보기 바란다.

2013년 3월 14일 목요일

Tcl/Tk 개발을 위한 기본적인 Tool Chain

우선 소개하고자 하는 tool chain 구성은 windows 기반 이다 (정확히는 windows 7 64-bit 버젼 기반이라고 해야 하나? ㅎ). Linux 기반의 tool chain 구성은 해당 Linux package provider 문서자료나 안내 website 뒤져보면 어렵지 않게 정보를 얻을 있을 것이므로 해당 정보를 검색해보길 바란다. 아마 Linux의 경우는 거의 대부분의 tool들이 pacakge에 포함이 되어 있으므로 설치시 on으로 check만 해주면 모든 tool이 문제 없이 깔릴 것이라고 생각된다.


---------------------------------------------

Tcl/Tk coding을 위한 꼭 필요한(?) tool chain의 구성은 다음과 같다.
해당 Tool의 다운로드 사이트는 툴 이름에 link 해 놓았다.

Windows에서는 ActiveState 사의 ActiveTcl 배포판을 가장 많이 사용하는 것 같다. 따라서, 의심할 필요도 없이 ActiveTcl 배포판을 다운받아 설치 하였다.  개인용은 공짜이고, 업계 표준을 리드하고 있다나 뭐라나.

MinGW

너무나도 유명한 Windows 용 gcc compiler 이다. 내가 짠 c code를 이 것으로 compile 하면 windows 환경에서 그냥 바로 아무것도 필요없이 프로그램이 실행된다. cygwin하고는 또 다른 매력이 아닐 수 없다. cygwin에서 compile 한 것은 특정 dll이 같이 제공되어야 프로그램이 수행된다. Tcl/Tk와 c 는 서로 궁합이 잘 맞는 조합이라는 것은 잘 알려진 사실이다. 주로 개발자들은 Tcl/Tk로 GUI를 구성하고 속도를 요하고 optimization이 필요한 부분은 c로 coding 하여 library를 만든다. Top down 방식의 개발에 아주 편리한 방법이라고 할 수 있고 부분적이긴 하지만 platform에 independent 한 개발 방식이라는 점도 매력이 아닐 수 없다.

MSYS


MinGW를 설치해야 하는 또 다른 이유 중에 하나가 MSYS이다. MSYS는 일종의 bash emulator라고 해야 할까? 암튼 windows 환경에서 그냥 linux 처럼 bash shell 환경에서 작업을 할 수 있도록 해주는 tool 이다. 아직은 cygwin의 bash 보다는 완성도가 다소 떨어지는 면이 있지만, 왠만한 shell 명령들은 다 제공한다. vim 도 제공하여 linux 개발환경의 feel과 잇점을 맘껏 누릴 수 있다. cygwin의 경우는 MinGW 컴파일에 문제도 생길 수 있거니와 shell이 반응이 굼뜨다는 점, 설치 용량이 크다는 점 등이 아주 맘에 안드는 점인데, MSYS를 쓰면 빠르고 가볍다는 것을 느낄 수 있다. MSYS를 배포판을 따로 다운하여 설치하지말고 그냥 MinGW를 설치할 때 custom 설치로 지정하면 MSYS 설치 여부를 check 하는 버튼 들이 나온다. 그 버튼을 check 하고 MinGW를 설치하기 바란다. 왜? 배포판은 vim 버젼이 5.8x 이고 MinGW에 딸려들어오는 넘의 vim 버젼은 7.3x 이었고 이것은 쉽게 해결할 방법이 없었다. 설치할 때 upgrade 검색도 반드시 허용하여 설치 하는 것이 좋다.

Console 2


Console 이라는 툴은 말 그대로 console 이다. 즉, 우리가 Linux에서 terminal이라고도 하는 프로그램들인데 요즘 Linux 배포판에서 많이들 사용하는 것이 Gnome 기반의 gnome-terminal과 KDE 기반의 Konsole 이라는 것이 있는데, 이것들과 비슷한 windows용 console 프로그램이라고 생각하면 이해가 쉬울 것이다. 글을 쓰고 있는 현재 버젼이 2.0으로 올라간 beta 버젼을  release 했는데 기대 이상이라서 자주 사용하고 있다. Console 프로그램을 평가하는 기준이 몇가지 있다. tab을 지원하여 한 windows에서 여러 terminal을 띄울 수 있는가? 단축키를 지원하는가? font 설정이나 default 설정이 용이한가? 등의 몇 가지 중요한 사양들을 고려할 때 Console2는 매우 바람직한 console 프로그램이라고 생각된다.

필자 컴에 설치된 Console 2의 GUI 모양새

---------------------------------------------

그 밖에 부가적인 tool들이 필요할 수도 있고 위와는 다른 tool들을 선호할 수도 있다. Tool 들은 개인의 입맛에 달린 것 들이다. 예를 들어, vim 보다 emacs를 선호하는 사람은 windows용 emacs를 설치하여 사용할 수도 있을 것이고, gvim을 추가로 설치하여 gvim을 editor로 사용하는 것도 가능할 것이다. Tool chain의 구성은 자기 자신만의 style 이라고 생각한다. 물론 현업에서 실무를 하는 경우라면 tool chain의 구성이 자신의 입맛데로 되어 있지 않는 경우가 많겠지만, 암튼 주어진 환경에서 자신만의 tool 노하우를 살려나가는 것도 개발업무의 효율을 크게 좌우한다. 좋은 Tool 선택과 효과적인 사용은 작업시간 소모와 직접적인 연관이 있다는 것은 너무나도 당연한 사실이다.