Next: , Previous: Mouse Position, Up: Frames


28.15 ポップアップメニュー

ウィンドウシステムを使っているときには、 ユーザーがマウスで選択できるように Lispプログラムからメニューをポップアップできます。

— Function: x-popup-menu position menu

この関数はポップアップメニューを表示し、 ユーザーが行った選択を表す指示子を返す。

引数positionは、スクリーンのどこにメニューを置くかを指定する。 それはマウスのボタンイベント(ユーザーがボタンを押した場所にメニューを置く)か つぎの形のリストでもよい。

          ((xoffset yoffset) window)

ここで、xoffsetyoffsetは ウィンドウwindowのフレームの左上隅から測ったピクセル単位の座標である。

positiontであるとマウスの現在位置を使うことを意味する。 positionnilであると、 メニューを実際には表示せずに、 menuに指定してあるキーマップに等価なキーバインディングを あらかじめ計算することを意味する。

引数menuは、メニューに表示するものを指定する。 それはキーマップかキーマップのリストである(see Menu Keymaps)。 あるいは、つぎの形でもよい。

          (title pane1 pane2...)

ここで、各ペインはつぎの形のリストである。

          (title (line . item)...)

lineは文字列であり、 各itemは対応するlineが選ばれたときに返される値であること。

使用上の注意: メニューキーマップで定義したプレフィックスキーでできることには、 メニューを表示するためにx-popup-menuを使わないこと。 メニューキーマップを使ってメニューを実装すると、 C-h cC-h aで当該メニューの個々の項目を見ることができ、 それらに対するヘルプを提供できる。 x-popup-menuを呼び出すコマンドを定義してメニューを実装すると、 ヘルプ機能には当該コマンドの内側でなにがなされるかわからないので、 メニューの項目に対するヘルプを提供できない。

マウスの移動でサブメニューを切り替えられるメニューバーの機構では、 x-popup-menuを呼び出すコマンドの定義を調べられません。 したがって、x-popup-menuを使ってサブメニューを実装すると、 それらはメニューバーに適応した動作をできません。 このために、メニューバーのすべてのサブメニューは、 親メニュー内のメニューキーマップとして実装してあり、 x-popup-menuは使っていません。 See Menu Bar

メニューバーに内容が変化するサブメニューを使いたいときでも、 メニューキーマップを使って実装するべきです。 内容を変えるには、必要に応じてメニューキーの内容を更新するために menu-bar-update-hookにフック関数を追加します。