popup-menu

本日x-popup-menuについて調べてた.
何をしていたかというと, x-popup-menuを使ってるパッケージを調べて, どのように使ってるかを見た.



まず最初. JDE.
x-popup-menu を呼び出す関数として, Emacs に元からある imenu--mouse-menu というのを使っている.
やってみてわかったけど, JDEは別にサブメニューとか全然考慮してない.
でもサブメニューに分かれることもある.
それは, imenu--mouse-menu のメニューを表す引数に大量に候補を設定すれば向こうで勝手に分けるため, 分かれるようだ.
こんな感じのを実行すれば分かれる.

(imenu--mouse-menu '(("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge")
                     ("hoge" . "hoge"))
                   nil
                   "hoge")


次, nxhtml を見てみた.
x-popup-menu にあたるのを実現するために, popcmp というパッケージを自前で用意してやっているみたい.
サブメニューもちゃんと考慮してる.
どうやんのかなーと調べてみたけど, かなり面倒.
最終的に関数popup-menuにこんなの渡すと, サブメニューのあるのがでける.
# nxhtml が渡してる値を参考に作成

(popup-menu '(keymap (foo-document
                      menu-item "foo"
                      (keymap
                       (hoge-index menu-item "hoge" (lambda nil (interactive) 1))
                       (separater menu-item "--single-line" nil)
                       (hage-index menu-item "hage" (lambda nil (interactive) 2))
                       (hige-index menu-item "hige" (lambda nil (interactive) 3))))))

実際はもっと細かく色々でけるっぽい.
これを, このメニューの解釈を icomp 側で処理する気にはなれないなあ. すくなくとも今は.
popup-menu っぽいのの実現は, 独自の仕様を考えてやることにするかなあ.

更新時刻

2008年, 2月17日, 2:35