다음 이전 차례

5. 메뉴 설정

5.1 자기만의 메뉴 파일 만들기

개인적인 메뉴 파일은 블랙박스의 root 메뉴로 간단한 텍스트 화일이다. 자기자신의 개인적인 메뉴를 만드는것은 기본 메뉴 파일을 자기 계정 디렉토리로 복사하여 편집하면 된다. 다음의 예를 보기 바란다.

mkdir ~/.blackbox
cp /usr/local/share/Blackbox/menu ~/.blackbox/Menu

어디든 자기가 마음에 드는곳에 위치시키면 된다.

다음으로 이 메뉴 파일을 사용하기 위하여 ~/.blackboxrcsession.menuFile 을 자신의 메뉴파일이 있는 절대경로로 편집한다.

5.2 자기만의 메뉴 파일 편집하기

메뉴를 만드는 문법은 매우 간단하며 또한 매우 효과적이다. 여기에는 한가지의 메뉴당 세개의 필드가 사용되며, 다음과 같다.

[tag] (label or filename) {command or filename}

지원되는 태그는 다음과 같다.

[begin] (label for root menu)

이것은 블랙박스에게 메뉴 파일의 시작을 알려주는 것으로 이 태그는 블랙박스가 메뉴 파일을 파싱하기위해 필요하다. 만일 이 태그가 없으면 이 메뉴파일 대신 시스템 기본 메뉴가 사용된다.

[end]

이것은 메뉴의 끝임을 블랙박스에 알려주며, 이 끝은 root 메뉴 또는 서브메뉴의 끝을 나타낼때 사용된다. [begin] 태그에 적용되어야 하므로 적어도 하나의 [end]가 반드시 있어야 한다.

[exec] (label for command) {shell command}

메뉴에 실행프로그램을 등록시킨다. 메뉴에서 이 메뉴 아이템을 선택하면, 블랙박스는 shell command를 실행시킨다.

[exit] (label for exit)

블랙박스를 종료시킬때 사용한다. 블랙박스가 종료되기전에 모든 열려진 윈도우창은 root 윈도우로 복귀한다.

[include] (filename)

현재의 메뉴에 'filename'을 첨가시킨다. filename은 절대경로로 표시되거나 (예: /usr/local/share/Blackbox/brueghel/stylesmenu) 사용자 계정 홈디렉토리를 나타내는 ~/로 시작할 수 있다. (예: [include] (~/blackbox/stylesmenu는 메뉴에 /home/user/blackbox/stylesmenu의 형태로 포함되어진다.)

[nop] (label - optional)

아무런 동작도 하지않는 아이템을 메뉴에 추가시킨다. 이것은 메뉴에 일정한 틀을 줄때 사용할 수 있을것이다. [nop] 에는 라벨을 넣을 수 있지만, 반드시 그래야 하는것은 아니며 만일 라벨을 적지 않으면 공백으로 나타나게 된다.

[style] (label) {filename}

현재 실행되고 있는 세션에 filename를 읽어들여, 새로운 텍스쳐, 컬러, 폰트를 정의하게 한다. 여기서 filename은 [include] 태그와 비슷하게 쓰인다. 절대경로를 사용하던지, ~/path/from/home/dir 형식을 사용한다.

[submenu] (label) {title for menu - optional}

현재 메뉴에서 서브메뉴를 생성시킨다. 이 메뉴는 재귀적으로 파싱되므로, 중첩된 서브메뉴, 무한정의 서브메뉴를 사용할 수 있다. 새로운 서브메뉴의 이름은 선택적이며 선택을 하지 않았을때는 새로운 서브메뉴의 이름은 아이템 라벨과 비슷하게 나타난다.

[reconfig] (label)

현재의 style 과 메뉴파일, 그리고 변화된 내용을 다시 읽어들이게 한다. 이것은 매번 블랙박스를 재시작하기가 어려울때, 새로운 style 이나 테마를 적용시킬때 유용하게 쓰일것이다.

[restart] (label) {shell command - optional}

블랙박스를 재시작한다. 만일 shell command을 정의하면 블랙박스를 종료한 후 이 명령을 실행한다. (이 명령을 이용하여 다른 윈도우매니져로의 재시작이 가능할것이다.) 이 부분이 생략되었다면 블랙박스가 재시동 될것이다.

[workspaces] (label)

메뉴에 작업공간 메뉴에 대한 링크를 삽입하게 한다. 이것은 작업공간 메뉴를 불러올 수 없는 사용자 (3 button mouse를 가지고 있지 않다면 작업공간 메뉴를 부르기가 힘들것이다.) 에게 유용하게 쓰일것이다. 이것은 시스템의 작업공간 메뉴에 대한 링크이므로 여러개의 [workspaces] 태그는 똑같은 작업공간 메뉴를 보여줄 뿐이다.

주석은 # 로 시작하며, 메뉴파일의 어느곳에나 위치시킬 수 있다.

또한, labels/commands/filenames 필드에는 다음과 같이 escape character를 사용할 수 있다. :

[exec] (\(my cool\) \{XTERM\}) {\(xterm -T \\\"cool XTERM\\\"\)}

\\ 를 사용하면 백슬래쉬 문자를 label/command/filename 필드에 쓸 수 있다.

자 이제 우리가 위의 난해한 주문을 이해하였는지 보기위하여 새로운 메뉴를 만들어보자. 자신의 메뉴를 만들고 제목을 쓸려면 [begin][end] 태그가 필요하다고 한다. 처음은 이렇게 시작하자 :

...
[begin] (Example \[Menu\])

[end]
...

완벽하다!!! 이제 몇개의 아이템을 추가하도록 하자. 우리의 메뉴에는 xterm과 같은 터미널 에뮬레이터가 필요하지 않은가? 그럼 메뉴에 추가해보도록 하자 :

...
[begin] (Example \[Menu\])
[exec] (xterm) {xterm -ls}
[end]
...

훌륭하다!!! 이제는 irc 클라이언트와 네스케이프, xv등 자주 사용하는 프로그램을 등록해보자.

...
[begin] (Example \[Menu\])
[exec] (xterm) {xterm -ls}
[exec] (efnet irc) {xterm -e irc fnord irc.efnet.net}
[exec] (Netscape Navigator) {netscape}
[exec] (xv 3.10a) {xv}
[exec] (XEmacs) {xemacs}
[exec] (The GIMP) {gimp}
[exec] (Video Tune) {xvidtune}
[end]
...

잠깐만... 이 메뉴파일은 보기에 조금 혼란스럽다. 보기 좋게 만드는것은 쉬운일이다. 프로그래머들 처럼 들여쓰기와 띄어쓰기를 사용하자.

...
[begin] (Example \[Menu\])
        [exec] (xterm) {xterm -ls}
        [exec] (efnet irc) {xterm -e irc fnord irc.efnet.net}
        [exec] (Netscape Navigator) {netscape}
        [exec] (XEmacs) {xemacs}
        [exec] (xv 3.10a) {xv}
        [exec] (The GIMP) {gimp}
        [exec] (Video Tune) {xvidtune}
[end]
...

와!!! 보기가 훨씬 좋아지지 않았는가!. 이제는 파일에 공간을 좀 넣고 그것이 메뉴에도 적용되도록 해보자. [nop] 태그의 이점을 본다.

...
[begin] (Example \[Menu\])
        [exec] (xterm) {xterm -ls}
        [exec] (efnet irc) {xterm -e irc fnord irc.efnet.net}

        [nop]

        [exec] (Netscape Navigator) {netscape}
        [exec] (XEmacs) {xemacs}
        
        [nop]

        [exec] (xv 3.10a) {xv}
        [exec] (The GIMP) {gimp}
        [nop]
        
        [exec] (Video Tune) {xvidtune}
[end]
...

자 이제는 BB.Themes.Org에서 내려받은 테마들을 서브메뉴로 만들어본다. themes.org 사이트에 나온대로 ~/.blackbox 디렉토리 밑에 내려받은 테마들을 압축을 풀어 설치했다고 가정한다.

...
[begin] (Example \[Menu\])
        [exec] (xterm) {xterm -ls}
        [exec] (efnet irc) {xterm -e irc fnord irc.efnet.net}
        
        [nop]
        
        [exec] (Netscape Navigator) {netscape}
        [exec] (XEmacs) {xemacs}

        [nop]

        [exec] (xv 3.10a) {xv}
        [exec] (The GIMP) {gimp}

        [nop]

        [exec] (Video Tune) {xvidtune}

        [submenu] (Themes) {Themes from blackbox.themes.org}
                [style] (Redsky) {~/.blackbox/Styles/Redsky}
                [style] (Blackbox) {~/.blackbox/Styles/blackbox}
                [style] (Blackbox II) {~/.blackbox/Styles/blackbox2}
                [style] (Hardware) {~/.blackbox/Styles/hardware}
                [style] (Nova) {~/.blackbox/Styles/nova}
                [style] (Orbital) {~/.blackbox/Styles/orbital}
                [style] (Orbital II) {~/.blackbox/Styles/orbital2}
                [style] (Seething) {~/.blackbox/Styles/seething}
                [style] (Zero) {~/.blackbox/Styles/zero}
                [style] (Cold Fusion) {~/.blackbox/Styles/coldfusion}
        [end]
[end]
...

이제 메뉴 문법에 대해 감이 오지 않는가? 자 그럼 우리의 메뉴를 마무리 해보자. 우리가 다운받은 styles 과 더불어, 블랙박스에 딸려오는 기본 styles 을 서브메뉴로 추가하여보자. 블랙박스 디렉토리의 스타일 파일을 [include] 를 사용하여 추가시킨다. 모든것을 적용한 후의 모습이다 :

...
# Blackbox 개인 메뉴

[begin] (Example \[Menu\])
        [exec] (xterm) {xterm -ls}
        [exec] (efnet irc) {xterm -e irc fnord irc.efnet.net}

        [nop]

        [exec] (Netscape Navigator) {netscape}
        [exec] (XEmacs) {xemacs}

        [nop]

        [exec] (xv 3.10a) {xv}
        [exec] (The GIMP) {gimp}

        [nop]

        [exec] (Video Tune) {xvidtune}

        [nop] (...)

        [submenu] (Themes) {Themes from blackbox.themes.org}
                [style] (Blackbox) {~/.blackbox/Styles/blackbox}
                [style] (Blackbox II) {~/.blackbox/Styles/blackbox2}
                [style] (Hardware) {~/.blackbox/Styles/hardware}
                [style] (Nova) {~/.blackbox/Styles/nova}
                [style] (Orbital) {~/.blackbox/Styles/orbital}
                [style] (Orbital II) {~/.blackbox/Styles/orbital2}
                [style] (Seething) {~/.blackbox/Styles/seething}
                [style] (Zero) {~/.blackbox/Styles/zero}
                [style] (Cold Fusion) {~/.blackbox/Styles/coldfusion}

# 기본 style 메뉴를 포함시킨다. 블랙박스가 /usr/local에 
# 설치되었다고 가정한다.

                [nop]

                [include] (/usr/local/share/Blackbox/styles/stylesmenu)
        [end]

        [workspaces] (Workspace list)

        [submenu] (Restart) {Restart which?}
                [restart] (Blackbox)

# 다른 윈도우매니저를 선택할 수 있도록 하자.

                [restart] (Window Maker) {wmaker}
                [restart] (Enlightenment) {enlightenment}
                [restart] (KWM) {kwm}
                [restart] (TWM) {twm}
        [end]

        [nop] (...)

        [reconfig] (Reconfigure)
        [exit] (Quit!)
[end]
...

메뉴파일 설정이 끝났다! 이제는 블랙박스가 이 메뉴화일을 인식할 수 있도록 하여야 한다. ~/.blackboxrc 을 편집한다.

주의 : ~/.blackboxrc는 블랙박스의 재시작, 재설정, 스타일 바꾸기 또는 종료시 자동적으로 업데이트 된다. 작업공간의 수, 이름, 기타 동적인 데이타의 변경은 적용되지 않을 수 있다. 우리가 바꾸고 유지할 수 있는 유일한 것은, 우리가 바꾼 메뉴파일 이름이다. ~/.blackboxrc의 포맷은 (~/.Xdefaults와 비슷한) X resource database format 이다. 파일이 자동적으로 업데이트 된후에, 화일은 목록으로 가득차거나 또는 없어져버릴수도 있다. (특히 그것이 블랙박스를 처음 실행하는 것이라면) 그러나 ~/.blackboxrc를 만드는것 때문에 걱정하지는 말라. 단지 블랙박스를 실행함으로서 파일을 볼 수 있을것이다.

우리가 해야 할 일은 메뉴 파일이름을 바꾸는 것이다. 다음과 같은 줄을 바꾸거나 추가하도록 한다.

session.menuFile:       /path/to/some/file

만일 이러한 설정이 기존에 존재한다면 고치면 되고, 없다면 새로 추가하면 된다. 어디에 메뉴파일이 존재하느냐에 따라, 우리의 새로운 설정은 다음과 같이 보일것이다. :

session.menuFile:       /home/user/blackbox/rootmenu

이제 ~/.blackboxrc를 저장하고 블랙박스를 재시작한다. (단지 컬러/폰트/기타 부수적인 설정만을 다시 읽어들이는 재설정은 적합하지 않다. 모든 설정파일을 다시 읽어들이도록 블랙박스가 재시작되어야 한다.)

모든것을 정확히 했다면 우리의 새로운 메뉴를 읽을 준비가 되어있을 것이다. 만일 문제가 있다면, 위의 예제를 다시 한번 보고 빠진 부분이나 필요한 태그를 점검해보라.

자 이제 블랙박스가 우리가 만든 메뉴를 적용하는데에는 조금 더 기다려야 한다. 블랙박스 0.50.5 에서 자동 메뉴 업데이트(automagic menu updates)가 도입되었다. 만일 session.menuFile를 수정하지 않았다면, 메뉴파일을 바꾸었더라도 블랙박스를 재시작하거나 재설정할 필요가 없다. 블랙박스는 메뉴를 보여줄때 모든 파일의 타임스탬프를 주시한다. 만일 그들 중 어느 하나가 변경되면, 다시 읽혀지고 메뉴는 업데이트 된다. 이 검사는 root 메뉴를 열때마다 실행된다.

다시 말하자면, 이것은 '검사'를 한다는것이지, 매번 메뉴파일을 다시 읽어온다는것은 아니다. 단지 파일에 변화가 생겼을때만 다시 읽어오게 된다.


다음 이전 차례