読者です 読者をやめる 読者になる 読者になる

Emacsでwidgetのボタン作ったけどクリックのイベントが発生しなくてハマった

現象

表題まんまなんですが、customize-groupとかで出てくるようなボタンが作りたくて、

(widget-create 'push-button
               :tag " Hoge "
               :action `(lambda (widget &optional event)
                          (message "Clicked!!!")))

のような感じでボタンは作れました。
...が、クリックしても"Clicked!!!"が表示されません。。

解決

マウスクリックに対するキーマップを設定する必要がありました。
冷静に考えれば当然なんですが、widgetって何か特別な感じがしてさっぱり気が付きませんでした。

widget-keymapという、そういう設定がしてあるキーマップがあるので、
こだわりがないなら、set-keymap-parentや、use-local-mapで、これを使えば良いかと思います。

あとがき

地味に大分ハマった…。
ググって出てくるサンプルは:actionとか:notifyを指定するってなってて、
結局、customize-groupのソース追っかけて彷徨ってたら気がついた。
初歩的なことだよ、ワトソン君。的な感じ?