Hi!
Thanks all for the great discussion!
Just so I understand: we are talking about simple cases of offering multiple actions (possibly on objects),
and not more complex things such as the export menu, with async options etc?
> Tentatively, I am thinking about the following:
>
> For a given Emacs "prefix" command (e.g. org-open-at-point), we define a
> set of customizations:
>
> 1. List of possible actions: ((name1 . action1 props) (name2 . action2 ...) ...)
> PROPS is a plist defining extra properties like key-binding, display
> string, maybe something else to be used in the future.
> 2. Menu interface to use (transient, context-menu, embark, which-key)
> 3. Layout settings for the specific interfaces. For example, transient
> layout definition.
Do we need 3? Could we decide on a way to specify layout properties in props?
We could have e.g. a group name which would translate to a transient column.
The citation follower prototype works similarly to right click menus of
mainstream desktop environments - i.e. it allows the user to optionally
select an alternative action while providing a default.
You "right click" by -4 prefix, and can also invert this behavior to show
the menu by default, and invoking the default action if called with a -4 prefix.
Yeah. I am not 100% sure if adding an abstraction layer is a great idea.
Another idea I was considering is similar to what you propose: have some
kind of hook like `context-menu-functions', but accepting an extra
argument - menu type (context menu, transient, which-key, etc.). Then, it
should produce appropriate menu spec.
However, this will require Elisp to customize things. Also not ideal.
My naive take:
Should we make a macro for creating this kind of simple menu? It would take a name, a docstring, parameters passed to the action, a default action name, and a default list of actions.
It would then create
1. a function that invokes the menu, passing the parameters.
2. a customization group with options for:
2.1. the actions list.
2.2. the default action.
2.3. whether to show menu by default (or by -4 prefix)
2.4. the menu system to invoke (default transient)?
3. a transient menu.
Does this sound reasonable? I probably miss something. I would be happy to try to make this, but am a bit swamped with the holidays, so it would have to wait a bit.
Cheers,
Tor-björn