Previous Next Table of Contents

3. 휴식강의 : 리소스(Resource)

이번에는 Xlib 프로그래밍을 떠나서 잠시 기분전환을 할까 합니다. 계속 똑같은 패턴의 프로그래밍 공부를 하다보면 지치죠? 그래서 재미있는 일 한 가지를 오늘 해보려고 합니다.

X윈도는 사용자에게 무한한 자유를 주는 시스템입니다. 윈도 3.1와 윈 95만 쓰고 살아온 우리들에게는 처음에 상당히 겁먹게 하지만, 알아가면 알아 갈수록 이해하기가 그렇게 어려운 것은 아니며, 한 번 알고 나면 이것만큼 편리한 것이 없습니다. 컴퓨터를 사용한다는 것이 단순반복 작업을 실수없이 빠르게 해낸다는 기본 취지도 있지만, 컬러 디스플레이의 개발 등으로부터 시작된 컴퓨터의 멀티미디어화는 시각적 이미지에 대한 많은 관심을 가지게 해왔습니다. 특히 컴퓨터 그래픽 분야는 현대에 없어서는 안될 중요한 컴퓨터 활용 분야이지요.

X 윈도는 하나로 정의된 인터페이스 제한사항 같은 것이 없습니다. 여러분의 fvwm 윈도관리자를 다른 윈도관리자로 바꾸어주기만 하면 아주 색다른 분위기를 느낄 수 있습니다. 다양성과 함께 분위기는 달리 하면서도 모든 기능은 변함없는 일관성도 가지고 있는 것이 X 윈도입니다.

시작하는 말이 좀 길었죠? 오늘 우리는 자원(Resource)이라고 하는 X 윈도의 중요 한 개념에 대하여 알아보고, 몇 가지 재미있는 실습을 해볼까 합니다. 오늘 실습을 통해 여러분은 X 프로그램을 여러분의 취향에 맞도록 변화시키는 즐거움을 누리실 수 있습니다. 그럼, 시작해보도록 하죠.

3.1 리소스(Resource)란 무엇인가?

앞서도 간략하게 설명드렸지만, 다시금 설명을 드리겠습니다. 리소스라는 개념은 X 윈도 시스템에서 몇 가지 다른 의미로 사용되고 있습니다.

첫번째로 X Server Resource라는 개념인데, 우리가 지금 하고 있는 Xlib 프로그래밍에서도 나왔듯이, 서버가 관리하는 대상으로서의 창(window), 폰트(font), 색상(color), 그래픽 컨텍스트(GC) 등이 바로 그것들입니다. 전술한 바와 같이 클라이언트는 단지 리소스 ID 만을 가지고 이리저리 서버에게 원하는 서비스를 요청할 뿐 입니다.

두번째로 Xlib 보다 한 단계 상위의 Xt(X Toolkit) 프로그래밍을 하다보면 나오는 내용으로서 사용자가 이리저리 셋팅을 할 수 있는 위젯(Widget)의 속성이라고 말할 수 있습니다. 위젯에 관련된 색상, 폰트, 위치, 모양 등이 그것입니다. Xlib 프로그래밍을 어느 정도 끝낸 후 Athena 위젯 Set을 가지고 Xt 프로그래밍을 할 때 본격적으로 다루게 될 내용이지만, 미리 선보이고자 합니다.

X 프로그래머가 되려면 우선 거의 모든 X 유틸리티의 의미와 사용법, 그리고 바로 이 리소스에 대한 연습을 많이 해두어야 합니다.

3.2 리소스 Name과 Class

예를 들어가며 설명하는 것이 좋겠군요. 여러분이 현재 X 윈도에서 이 글을 읽고 계신다고 가정하겠습니다. 자, 명령행이든 fvwm 버튼바에서든 간에 Seyon 이라는 통신 프로그램을 실행시켜 보세요. 하나의 터미널 창이 뜨고, 또 하나 작은 창이 뜹니다. 그 작은 창의 제목은 "Seyon Command Center"입니다. 여기서 다이얼링 등의 여러 가지 세연 관련 명령을 내리는 사령부의 역할을 해낼 수 있습니다. 잘 아시는 사항일 겁니다.

텍스트 문서이다 보니 설명하기가 좀 힘들기는 하지만 되는 만큼 해보죠. 우선 세연 사령부를 자세히 보시면 전체적으로 4개의 영역으로 되어 있다는 것을 알 수 있습니다. 위에서부터 첫번째 영역은 DTR, DSR, RTS, CTS, RNG 등 모뎀 관련 상황을 보여주는 상황창입니다. 두번째 영역은 세연 프로그램이 사용자에게 보내는 메세지를 보여주는 창입니다. 세번째 영역은 사용자 정의 버튼들이 보여지는 영역 입니다. Athena 뭐 이런 문자열들이 보이는 한 줄을 말합니다. 그 다음 마지막으로 About, Help, Set, Dial 등의 버튼들이 배열되어 있는 제일 큰 사각형 영역을 확인 할 수 있습니다. 저한테만 보이나요? 사실 두번째만 제외하고 같은 색상으로 칠해져 있으니 언뜻 파악하기가 쉽지는 않습니다. 하지만 앞으로 분명해질 겁니다.

여기서 작은 버튼들을 오브젝트, 객체(Object)라고 부릅니다. Xt 프로그래밍을 하실 줄 아시는 분들은 금방 이해하시겠죠? 모르시더라도 일단 저의 설명을 끝까지 들어주신다면 이해하기 어렵지는 않을 것입니다. 네 번째 영역의 첫번째 About 이라고 씌여져 있는 버튼 객체를 한 번 살펴 보죠. 이러한 모든 객체는 세연이라는 프로그램을 Muhammad라는 사람이 만들 때, 고유한 이름을 주게 됩니다. 이 About이라고 씌여져 있는 버튼은 프로그램 상에서 about이라는 이름(Name)을 가지고 있습니다. 다음으로 Help 버튼은 help라는 이름을, Set 버튼은 set이라는 이름을, 등등 해서 Shell 버튼은 shellCommand라는 이름을 가지고 있습니다. 뭐 이름은 정확한 규칙이 있는 것이 아니라 Muhammad씨 마음대로 지어준 것입니다. 이것이 바로 버튼 객체의 이름(Name)입니다.

그런데, 자세히 볼 필요도 없이 그 버튼들은 그 위에 씌여있는 글자만 다르고, 위에서 살펴보았듯이 이름만 다르지, 본질적으로 같은 부류에 속한 녀석들이라는 것을 알 수 있습니다. 이 말은 유식하게 그 버튼들 모두 하나의 Class에 속한다고 말합니다. 요 버튼들이 모두 속한 Class는 Athena 위젯 set 중에서 Command 위젯에 해당합니다. Command라고 하는 것이 이 Class의 이름입니다.

헷갈리죠? 세상 모든 것에는 이름이 있기 마련인데... 앞으로 그냥 이름 또는 객체 이름이라고 하는 것은 프로그래머에 의해서 붙여지는 개별적인 이름(Name)을 뜻합니다. 그 다음으로 Class 또는 클래스 명은 그 클래스 전체를 부르는 대표적인 이름입니다. 워낙 헷갈리는 부분이라 X 프로그래머들은 그냥 이름은 소문자로 시작하고 클래스 명은 대문자로 시작하는 관습을 가지고 있습니다. 이 규칙을 무시하는 프로그래머는 없을 겁니다. 자기 멋대로 했다가는 X 프로그래머 세계에서 추방당하고 말 겁니다. :)

3.3 객체의 리소스

위에서 살펴본 버튼 객체는 프로그래머 또는 사용자가 자유롭게 정해줄 수 있는 몇 가지 속성을 갖는데 바로 그것을 객체의 리소스, 그냥 줄여 리소스라고 부릅니다. 앞으로 리소스라고 하면 바로 객체의 성질을 의미하는 리소스를 말합니다.

예를 들어 설명해보죠. 자, 지금 현재 열려 있는 세연을 닫으시고 한텀이나 X 텀 상에서 다음과 같이 입력해봅시다.

 seyon -modem /dev/modem -xrm "*about.label: ABOUT"

-modem 옵션 뒤에 여러분의 모뎀이 달린 포트를 지정하는 화일명을 써주시면 되고 그 다음 제가 설명드리고자 하는 정말로 중요한 명령행 옵션이 여기에 있군요.

중요! 중요! 중요! -xrm 옵션

사용법: -xrm "리소스 정의 문자열"

자, 어떻게 되었습니까? About이라고 씌여있던 것이 ABOUT로 바뀌었죠?

그 다음에는 다음과 같이 해봅시다.

 seyon -modem /dev/modem -xrm "*about.foreground: red"

글자색이 바뀌었지요?

Commmand 위젯 클래스에 속해 있고 이름은 about인 버튼의 라벨(Label)과 전경색을 한 번 바꾸어보았습니다. 이런 식으로 해서 우리는 우리 개성대로 원하는 세연 사령부를 만들어 낼 수 있습니다.

약간 어려워지는군요. 다음과 같이 해봅시다.

 seyon -modem /dev/modem -xrm "*Command.foreground: Turquoise"

결과를 보면 모든 버튼의 전경색이 Turquoise색으로 변한 것을 알 수 있습니다. 클래스 명을 지정하면 그 클래스에 속하는 모든 객체에 대하여 설정하는 것입니다.

-xrm 옵션을 이런 일을 해낼 수 있는 녀석입니다. "리소스 정의 문자열"의 형식에 대하여 간략하게 알아봅시다.

 "이름.이름.이름: <리소스값>"

        또는

 (ApplicationClass|applicationName)*(ResourceClass|resourceName) : value

이렇게 알아두어도 일단은 괜찮습니다.

자, 여기서 이름은 클래스명일 수도 있고 객체의 특별한 이름이 될 수도 있습니다. 그리고 이름을 지정하는데 있어 *나 ? 문자와 같은 와일드 카드도 사용가능합니다. 위의 예에서 항상적으로 * 문자를 사용해왔지요. 이름과 이름은 마침표(.)로 분리 합니다. 이러한 이름은 몇 단계고 계속될 수 있습니다. 위에서는 3개만 보였지만 몇 개가 마침표로 분리될 지는 프로그램마다 다릅니다.

위젯이라는 객체들 간에는 위계(hierachy)라고 하는 것이 있습니다. 족보라고 보면 좋습니다. 세연에서는 다음과 같은 관계가 성립합니다. 세연 사령부는 위에서 서술한 일정 영역, 즉 버튼들을 포함할 어떤 영역을 갖습니다. 그 영역은 다시 버튼들을 가지고 있습니다. 버튼을 누르면 또 다른 메뉴가 뜬다든지 하는 것으로 보아 버튼들 각각도 무엇인가를 계속 포함하고 있다는 것을 알 수 있습니다.

이러한 모든 객체들은 세연이라는 전체 프로그램에 속해 있는데, 세연의 프로그램 이름이 seyon이고, 세연의 클래스명은 Seyon입니다. 이건 Muhammad씨가 X 프로그래밍 관습에 따라 붙여준 이름입니다. 세연에 관련된 모든 객체를 지정할 때는 항상 "Seyon." 이런 식으로 시작해야 할 것입니다. 하지만 이런 식으로 모두 써주는 경우는 드물고 * 문자 등을 써서 표현합니다. *는 모든 문자를 대표할 수 있다는 사실을 염두에 두고 이 글을 계속 읽어나가시길 바랍니다. 리소스 또한 리소스 클래스명도 있고 리소스 그냥 이름도 있습니다.

라벨도 바꾸고 색상도 바꾸시려면 -xrm 옵션을 여러 번 주시면 됩니다.

3.4 Xlib의 리소스 매니져

-xrm 옵션이 쓸모가 있기는 하나 그것을 여러번 쓰는데는 한계가 있죠? 중요한 몇 개의 리소스를 바꾸어주려고 할 때 쓰는 정도일 뿐입니다. 이것 말고 다른 메커니즘이 있습니다.

세연은 실행되자마자 /usr/lib/X11/app-defaults 디렉토리에서 자신의 클래스명에 해당하는 화일명 Seyon을 찾아서 읽습니다. 그 화일에는 세연에 대한 중요한 정보들이 들어 있습니다. 세연 사령부의 모든 셋팅이 그 안에 들어있기도 하죠. 그 디렉토리는 루트권한으로 들어가셔서 Seyon 화일을 Write 가능으로 설정한 후 다른 이름으로 잠시 바꾸어 봅시다. 세연은 엉망이 되고 맙니다. 다음으로 세연은 여러분의 .Xdefaults 셋팅에서 세연에 대한 셋팅이 있나 살펴봅니다. 마지막으로 세연은 명령행에서 -xrm 옵션을 읽어냅니다.

주의 :.xinitrc 에 xrdb -merge .Xdefaults 와 같은 문장이 있나 살펴보십시요. 또는 userresources=$HOME/.Xdefaults인가 확인해보십시요.

만약 리소스에 대한 셋팅이 서로 충돌하는 경우에는 명령행이 최우선, 그 다음으로 .Xdefaults, 그리고 나서 어플리케이션 디폴트 Seyon이 뒤따릅니다. 마찬가지로 클래스명에 대한 셋팅에 대하여, 특정 객체에 대한 셋팅이 우선합니다.

  -xrm "*Command.foreground: red"
  -xrm "*about.foregrond: blue"

이런 식의 셋팅이 있다면, about 버튼은 Command 클래스에 속하므로 red 속성을 가지는 것이 아니라 더욱 더 특별한 셋팅인 blue를 띠게 됩니다. - 물론 이렇게 간단히 말할 수는 없지만, 더 자세한 것은 관련서적을 참고하시기 바랍니다.

리스스에 대한 적절한 셋팅을 선택해주는 것이 바로 우리에게는 평소 보이지 않게 열심히 일하고 있는 Xlib의 "리소스 매니져"입니다.

자, 루트권한으로 /usr/lib/X11/app-defaults/Seyon을 수정해봅니다. 여기서 우리는 정말로 재미있는 일을 많이 할 수 있습니다.

3.5 어플리케이션 디폴트 화일 다루기

fvwm에서는 #로 시작하는 문장이 주석문이었지만, 여기서는 !로 시작하는 문장이 주석문으로 처리됩니다. fvwm에서 .fvwmrc 화일을 다루듯 찾기 기능을 통해 원하는 문장을 찾아서 수정해봅시다. 전체를 설명드릴 수는 없고 재미있는 것만 골라서 설명드립니다.

 *.title: Seyon Command Center

어떤 클래스, 객체든 간에 title이라고 하는 리소스를 가진 녀석의 값에다 Seyon Command Center라는 문자열을 할당합니다. 이 문자열을 바꾸어주면 세연 사령탑의 타이틀바 제목이 바뀝니다.

 *.iconName: <아이콘 이름>

아이콘 상태에서 나타나는 이름을 지정해줍니다. fvwm의 IconTitle 같은 셋팅으로도 가능하죠.

 *font: <폰트>

*로 시작하니 모든 문자열을 대표하고 끝이 font로 끝나는 모든 리소스 셋팅에 적용됩니다. 따라서 여기서 주어지는 <폰트>는 세연이 기본적으로 사용하게 됩니다.

 *Cursor: <커서명>

기본 지정값은 hand2로 되어 있죠? fvwm 마우스 커서 바꾸기와 마찬가지입니다만, 여기서는 숫자가 아니라 문자열을 사용합니다. /usr/include/X11/cursorfont.h 화일에 정의되어 있습니다. 앞에 붙은 XC_는 빼고 이름을 써줍니다. 검은 손인 hand1으로 한 번 바꿔보시는 것도...

 *ShapeStyle:   <모양>

버튼의 모양을 정의해준다. <모양>에 올 수 있는 값은 /usr/include/X11/Xaw의 Command.h에 정의되어 있습니다. 가능한 값은 Rectangle, RoundedRectangle, Oval, Ellipse 이렇게 네 가지가 있습니다.

한참을 내려간 후...

*Box로 시작하는 부분을 찾아봅시다. 이것은 우리가 위에서 살펴보았던 버튼들을 포함하고 있는 사각형 영역을 말합니다. 기본적으로는 다음과 같은 줄이 없지만 삽입해봅시다.

 *Box.background:       <색상>

자, 단조롭기만 했던 사각형 영역의 색상이 바뀝니다.

 *ok.lable: OK
 *cancel.lable: Cancel
 *done.label: Done
 *yes.label: Yes
 *no.lable: No
 *edit.label: Edit

이런 식의 줄들을 발견하셨습니까? ok, cancel, done, 등은 버튼 객체의 이름입니다. ok 버튼의 label 리소스가 OK로 되어있죠? 이 부분을 고치면 영어권이 아닌 나라 사용자가 사용하기 편리하겠지요? 프랑스 사람이라면 *yes.label을 Qui로, *no.label을 Non으로 바꿀 겁니다. 독일 사람이라면 *yes.label을 Ya (맞나요?) *no.label을 Nein으로 바꿀 겁니다. 우리는 "예", "아니오"로 하면 됩니다.

*about으로 시작하는 줄들은 about 버튼에 관한 것입니다.

*set으로 시작하는 줄들을 밑에 있죠?

Set 버튼을 누르면 보드, 패리티, 포트 등에 대한 셋팅을 하는 새로운 창이 하나 생깁니다. 그것의 이름이 uBox인 것 같습니다.

 *set*uBox.Toggle.background: <색상>
 *set*uBox.Toggle.foreground: <색상>

토글버튼에 해당하는 것은 Strip 8th, CTS/RTS 설정 등입니다. 전경색/배경색은 설정되지 않은 상태의 색상이며, 설정되면 전경색/배경색이 뒤바뀝니다. 나머지 줄은 모두 label에 관한 것이므로 설명드리지 않겠습니다.

 *transfer*upload*font: <폰트>

업로드할 때 화일명을 입력받는 창에서 쓰는 폰트가 너무 작다고 생각하지 않으십니까? <폰트>를 큰 것으로 바꾸어 주시면 됩니다.

*edit*title: File Edit 라는 줄까지 전진합니다. 보통 에디터에 사용되는 폰트가 너무 작죠? *edit*Text*font 를 바꾸어 주시면 됩니다. 기왕에 바꾼 거 위로 올라가면 *help 셋팅이 있는데, *help*Text*font라는 줄을 넣어서 폰트를 바꾸어 봅시다.

 !
 ! Message box
 !

여기까지 가봅시다. 메시지 박스의 배경색을 바꾸어 보죠.

 *messageBox*background: <색상>
 *messageBox*foreground: <색상>

 !
 ! Status box
 !

모뎀 관련 상황창입니다.

 *statusBox.background: <색상>
 *statusBox.foreground: <색상> 등등
  
 !
 ! Quick Keys
 !

여기에는 사용자 정의 버튼이 들어가는 창입니다.

 *quickKeyBox.Command.font: <색상>
 *quickKeyBox.background: <색상>

 *quickKey1.visible: < on 또는 off >
 *quickKey2.visible: < on 또는 off >
 ...

단축 버튼창에 쓸 데 없는 버튼들이 표시되어 있습니다. 보통 쓰지도 않고 있지요. on은 그 버튼을 보이게 하고 off는 보이지 않게 합니다.

 *quickKey1.action: <행동>
 ...

 *quickKey1.label: <문자열>
 ...

자, 위에서 <행동>에 들어갈 수 있는 세연 내부의 함수들은 여러 가지가 있습니다. 여기서 세연의 놀라운 기능이 돋보입니다. 자세한 사항은 세연 메뉴얼을 참고하시고요. 많이 쓰이는 것 하나만 소개합니다. 보통 버튼 하나로 ZMODEM 업로드/다운로드 버튼을 정의해서 쓰는 겁니다.

Transfer 버튼을 누르면 현재 등록되어 있는 화일 전송 정의가 리스트로 나옵니다. 저는 세연의 내부 함수 중 FileTransfer()를 사용하겠습니다.

 사용 형식 : FileTransfer( <전송 프로토콜 번호> [, <화일리스트> ] )

<전송 프로토콜 번호>가 의미하는 것은 위 리스트에 나오는 순서를 말합니다. 맨 처음 것이 1부터 시작합니다. <화일리스트>는 보통 적어주지 않습니다. 화일을 다운받는 경우에는 필요없고, 화일 전송의 경우에는 화일이름을 입력받도록 프로토콜이 잘 정의되어 있을 겁니다. 저는 XRZ 0.5를 받아서 다운프로그램으로 쓰고 있는데요, 그것을 G E T 이라는 이름의 단축버튼으로 정의해서 씁니다. 시간이 된다면 XSZ를 만들고는 싶지만 소스분석만 해놓고 매일 미루기만 하네요.

 *quickKey1.visible: on
 *quickKey1.lable: G  E  T
 *quickKey1.action: FileTransfer(1); Beep();
 *quickKey?.font: 8x16

참고로 저의 화일 전송 정의 리스트 1 번은 "Xrz3D" "$xrz" No 입니다.

마지막으로 Fun message에 대하여 알아봅시다.

 *funMessages: \
        "Hi there! Helloooooooooo!" \
        ...
        "I've fallen and I can't get up!"
여러 개의 문자열을 적어주는데 줄을 바꿀 때 \ 문자를 사용한 것에 유의합시다.

3.6 사용자 리소스 화일 .Xdefaults

앞에서 달리 세연의 클래스명 Seyon을 앞에다 붙여주시기 바랍니다. 저의 예를 보여드리는 것으로 끝을 맺겠습니다. 세연 그 자체에 대하여 설명을 한다는 것이 왠만한 분량 가지고는 엄두도 못낼 만큼 많아서 ... 제가 세연까지 다룰 수는 없을 것 같습니다. 다른 파워 리눅서분들께서 해주시면 제게도 도움이 되련만...

화일 내용을 갱신하신 후, 텀 상에서 xrdb -merge .Xdefaults 하시면 X 를 종료하거나 하지 않아도 갱신된 리소스 셋팅을 확인하실 수 있습니다.

 
  ! --- Seyon ---
  Seyon.modems: /dev/modem
  Seyon.vt100.background: DarkBlue
  Seyon.vt100.foreground: white
  Seyon.*.pointerShape: pencil
  Seyon.dialDelay:      0
  Seyon.idleGuardInterval:      300
  Seyon.autoZmodem:     off
  Seyon.metaKeyTranslation:     off
  Seyon.captureFile:    cap
  Seyon.showFunMessages:        on
  Seyon.dialRepeat:     100
  Seyon.autoZmodemAction:       $xrz
  Seyon.modemHangupString:      ATH0^M
  Seyon.idleGuard:      on
  Seyon.hangupConfirm:  off
  Seyon.rtsctsFlowControl:      on
  Seyon.defaultBPS:     38400
  Seyon.zmodemAutoDownload:     off
  Seyon.zmodemAutoDownloadCommand:      $xrz

  ! --- 이 부분이 리소스 셋팅을 다루고 있습니다 ---
  Seyon*title: Seyon Command Centre
  Seyon*iconName: My Seyon
  Seyon*Cursor: hand1
  Seyon*yes.label: Qui
  Seyon*no.label: Non
  Seyon*set*uBox.Toggle.background: Pink
  Seyon*set*uBox.Toggle.foreground: SteelBlue
  Seyon*transfer.label: Up/Dn
  Seyon*transfer*upload*title: Which File ?
  Seyon*transfer*upload*font: -adobe-courier-medium-r-normal--18-*-*-*-*-*-*-*
  Seyon*transfer*upload*dialog.lable: Enter FileName
  Seyon*exit.label: Quit
  Seyon*messageBox*foreground: purple4
  Seyon*messageBox*background: seashell1
  Seyon*statusBox.background: grey
  Seyon*quickKeyBox.Command.font: 9x15bold
  Seyon*quickKeyBox.background: steelblue
  Seyon*quickKey1.visible: on
  Seyon*quickKey2.visible: on
  Seyon*quickKey3.visible: off
  Seyon*quickKey4.visible: off
  Seyon*quickKey5.visible: off
  Seyon*quickKey1.action: FileTransfer(1); Beep();
  Seyon*quickKey2.action: FileTransfer(2); Beep();
  Seyon*quickKey?.font: 8x16
  Seyon*quickKey1.label: G  E  T
  Seyon*quickKey2.label: P  U  T
  Seyon*Command.background: PeachPuff
  Seyon*quickKey1.background: DeepPink
  Seyon*dial.background: blue
  Seyon*dial.foreground: snow
  Seyon*hangup.background: SeaGreen
  Seyon*hangup.foreground: snow
  Seyon*misc.background: Pink
  Seyon*cancel.background: DeepPink
  Seyon*dismiss.background: DeepPink
  Seyon*exit.background: grey
  Seyon*exit.foreground: black
  Seyon*directory*lBox.ok.background: blue
  Seyon*directory*lBox.ok.foreground: snow

! 참고로 화일 전송 정의 2번은 다운로드로서 "ZDown" "$sz -vv" y 입니다.

X 윈도는 사용자에게 무한한 자유를 주고 있다!

3.7 xterm 의 리소스에 관하여

xterm의 클래스명은 XTerm입니다.

man xterm 하시면 자세하게 리소스 목록이 나옵니다. 그것을 참고하시면 됩니다. 저는 몇 가지만 다루기로 하지요.

 XTerm*cursorColor: <색상>
커서의 색상을 바꿉니다.

 XTerm*font:    <폰트>
 XTerm*pointerShape: <포인터명>
 XTerm*scrollBar:       <on/off>        스크롤바를 표시할 것인가?
 XTerm*saveLines:       <수치값>        몇 줄을 기억해두고 있을 것인가?

하여튼 엄청나게 많은 리소스들이 있습니다.

우리 모두가 많이 쓰는 hanterm은 Xterm을 기반으로 하신 것 아시죠? hanterm의 클래스명은 Hanterm입니다. 한텀에 대하여 리소스 셋팅을 하시려면 XTerm 부분을 Hanterm으로 바꾸어 주시면 됩니다.

3.8 멀티 리소스 셋팅 가지기

다음과 같이 해봅시다.

 xterm-1.Font: 7x13bold
 xterm-2.Font: 6x10
 xterm-3.Font: fixed

xterm-1, xterm-2, xterm-3은 클래스명이 아니라 그냥 이름입니다. 다음과 같이 xterm을 실행시켜 보면 어떻게 될까요?

 xterm -name "xterm-1"
 xterm -name "xterm-2"
 xterm -name "xterm-3"

예상하신 결과가 나왔습니까?

3.9 기 타

여러분이 많이 사용하는 CD 플레이어로서 workman이 있습니다. 클래스명은 Workman입니다. 대표적인 리소스는 다음과 같습니다.

 Workman.initialVolume: <수치>

초기 볼륨을 정해준다. <수치>는 0부터 100 사이 초기 볼륨이 맘에 들지 않으면 정해주십시요.

 Workman.smallButtons:  <논리값(true,false)>

작은 버튼을 사용할 것인가?

 Workman.autoPlay:      < never, normal, always >

always를 선택하면 워크맨 실행시 시디 안에 들어있는 음악시디를 연주합니다. 자동으로 CD를 연주해 준다든지 하는 기능은 벌써부터 있어왔는데, 지금에야 새로운 기능이 생긴 것 마냥 떠들어대는 경우를 보면 한심합니다. X 윈도 시작시 항상 그렇게 하시려면 fvwm 초기화 함수에 workman을 실행시켜 주십시요. 물론 autoPlay 리소스를 always로 설정하시고요. 그 다음 Style 옵션으로 StartIconic 하시면 아이콘 상태로 시작하겠죠?

그 다음으로 xcalc를 예로 들어 보죠. 우리 모두의 xcalc는 상당히 칙칙한 계산기에 불과합니다.

클래스명은 XCalc입니다. 버튼 하나 하나에 대하여 색상을 저정할 수도 있습니다.

 XCalc.ti.Command.background:   <색상>
 XCalc.ti.Command.foreground:   <색상>

보통의 경우 xcalc는 TI-30 계산기를 에뮬레이트하지만 xcalc 실행옵션에 -rpn을 주면 옆으로 긴 HP-10C 계산기처럼 행동합니다. 이 경우에 위의 ti를 모두 hp로 바꾼 셋팅을 필요합니다.

TI 계산기의 버튼 하나 하나에 대한 셋팅은 XCalc.hp.button4.background 이런식으로 해줍니다. CE/C 버튼이나 AC 버튼은 색상을 바꾸어봐도 좋겠지요? XCalc.ti.button4.background 그리고 button5의 색상을 바꾸십시요.


Previous Next Table of Contents