This is a library for computing context menus based on text properties and overlays. The intended use is to have tools that annotate source code and others that use these annotations, without requiring a direct coupling between them, but maintaining discoverability.
Major modes that wish to use this library should first define an
appropriate value for prop-menu-item-functions
. Then, they should
bind prop-menu-by-completing-read
to an appropriate
key. Optionally, a mouse pop-up can be added by binding
prop-menu-show-menu
to a mouse event.
For example, the following value for prop-menu-item-functions
creates a popup menu that will describe faces that are set in either
text or overlay properties:
(setq-local prop-menu-item-functions
(list (lambda (plist)
(let ((face (plist-get plist 'face)))
(when face
(list (list "Describe face" (lambda ()
(interactive)
(describe-face face)))))))))
Note that this setting requires lexical scope.