[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ポップアップメニューはユーザが Lisp コードを実行することで可能な主な二つ
の方法の内の一つです(他の方法とはキーマップを通じる方法です、
see section 15. Keymaps)。popup-menu
関数はメニューの項目の定義と各項目に
ついて呼ばれる関連づけられた Lisp 関数と共に実行されます。こうしてメニュー
を表示するサブプロセスが起動し、後に選択されたメニュー項目が受け取られ、
評価されます。
各メニュー項目はリストで指定され、最初の要素は文字列でそのメニュー項目に
対するラベルを与え、二つ目の要素はその項目がユーザに選択されたときに呼ば
れるべき関数です。もしこの関数が対話的な仕様となっていれば
call-command
関数を使って実行され、そうでなければ funcall
(関数)が使われます。それで例えば、1階層のメニューは次のように定義されま
す:
(("Item 1" function-1) ("Item 2" function-2) () ("Item 3" function-3)) |
null 項目で表示されるメニューにセパレータをつくることができます。
もし項目の括弧内の第一の要素がシンボルならば、項目の残りは変数の値で定義 されるものとなります。もしこの値が関数ならば定義は関数を呼んだ結果となり ます。
以下の定義について考えてみます:
(("Workspaces" . workspace-menu) ("Windows" . window-menu) ("Programs" . apps-menu) ("Customize" . custom-menu) ("About..." (customize 'about)) () ("Restart" restart) ("Quit" quit)) |
これは Sawfish のルートメニューの定義です。四つのサブメニューが参照変数
(実際、この変数の内の3つは関数を含んでいます) (workspace-menu
、
window-menu
、apps-menu
そしてcustom-menu
によって動
的に生成されていることを見ることができます。
apps-menu
変数はアプリケーションメニューを再定義することができま
す。デフォルト定義は次のようになっています:
(("xterm" (system "xterm &")) ("Emacs" (system "emacs &")) ("Netscape" (system "netscape &")) ("The GIMP" (system "gimp &")) ("XFIG" (system "xfig &")) ("GV" (system "gv &")) ("xcalc" (system "xcalc &"))) |
system
関数は単に一つの引数を `/bin/sh' を使って実行するだけ
です。
いくつかのシステム上ではメニューのサブプロセスの起動に著しくオーバヘッド があるかもしれないですが、メニュー要求の間にもそれを実行させ続けておくこ とは可能です。
nil
ならばプログラムはすぐに終了し、 t
なら
ば永久に走りつづけ、整数値ならばプログラムが走りつづける時間(他のメニュー
が表示されないかぎり)を示します。