Next: Dialog Boxes, Previous: Mouse Position, Up: Frames
ウィンドウシステムを使っているときには、 ユーザーがマウスで選択できるように Lispプログラムからメニューをポップアップできます。
この関数はポップアップメニューを表示し、 ユーザーが行った選択を表す指示子を返す。
引数positionは、スクリーンのどこにメニューを置くかを指定する。 それはマウスのボタンイベント(ユーザーがボタンを押した場所にメニューを置く)か つぎの形のリストでもよい。
((xoffset yoffset) window)ここで、xoffsetとyoffsetは ウィンドウwindowのフレームの左上隅から測ったピクセル単位の座標である。
positionが
t
であるとマウスの現在位置を使うことを意味する。 positionがnil
であると、 メニューを実際には表示せずに、 menuに指定してあるキーマップに等価なキーバインディングを あらかじめ計算することを意味する。引数menuは、メニューに表示するものを指定する。 それはキーマップかキーマップのリストである(see Menu Keymaps)。 あるいは、つぎの形でもよい。
(title pane1 pane2...)ここで、各ペインはつぎの形のリストである。
(title (line . item)...)各lineは文字列であり、 各itemは対応するlineが選ばれたときに返される値であること。
使用上の注意:
メニューキーマップで定義したプレフィックスキーでできることには、
メニューを表示するためにx-popup-menu
を使わないこと。
メニューキーマップを使ってメニューを実装すると、
C-h cやC-h aで当該メニューの個々の項目を見ることができ、
それらに対するヘルプを提供できる。
x-popup-menu
を呼び出すコマンドを定義してメニューを実装すると、
ヘルプ機能には当該コマンドの内側でなにがなされるかわからないので、
メニューの項目に対するヘルプを提供できない。
マウスの移動でサブメニューを切り替えられるメニューバーの機構では、
x-popup-menu
を呼び出すコマンドの定義を調べられません。
したがって、x-popup-menu
を使ってサブメニューを実装すると、
それらはメニューバーに適応した動作をできません。
このために、メニューバーのすべてのサブメニューは、
親メニュー内のメニューキーマップとして実装してあり、
x-popup-menu
は使っていません。
See Menu Bar。
メニューバーに内容が変化するサブメニューを使いたいときでも、
メニューキーマップを使って実装するべきです。
内容を変えるには、必要に応じてメニューキーの内容を更新するために
menu-bar-update-hook
にフック関数を追加します。