Events¶
Plugins reagieren auf Editor-Aktivität über IEventBus. Events sind einfache
Structs, die in PluginEvents.h definiert sind:
| Event | Payload |
|---|---|
DocumentOpened |
DocumentId, std::filesystem::path |
DocumentClosed |
DocumentId |
DocumentSaved |
DocumentId |
TextChanged |
DocumentId, pos, addedBytes, removedBytes |
SelectionChanged |
DocumentId |
ActiveDocumentChanged |
DocumentId |
AppAboutToQuit |
(keine) |
CommandShortcutChanged |
commandId, sequence (neues portables Kürzel; "" = unbelegt) |
CommandShortcutChanged feuert, wenn sich der effektive Shortcut eines
Commands ändert — ein Benutzer-Remap im Shortcut-Mapper, ein
Keymap-Import/-Reset oder eine Konfliktunterdrückung, die greift oder
aufgehoben wird. Menügebundene Commands brauchen nichts (der Host bindet ihre
Action neu); Commands, die mit scope = command_scope::kPluginWindow
registriert sind, abonnieren das Event und wenden die Sequenz erneut auf ihre
eigenen Widgets an (siehe Commands & Menüs).
Abonnieren¶
subscribe ist ein Template, das eine Subscription (RAII) zurückliefert.
Halten Sie die Subscription als Member am Leben, solange der Callback feuern
soll; ihre Zerstörung hebt das Abonnement auf.
m_sub = ctx.events().subscribe<MTE::plugin::DocumentSaved>(
[this](const MTE::plugin::DocumentSaved& e) {
// react to e.id ...
});
class IEventBus {
public:
template <class Event>
Subscription subscribe(std::function<void(const Event&)> cb);
// Forwards to a type-erased subscribeRaw(std::type_index, ...) internally.
};
Tip
Halten Sie jede Subscription als Plugin-Member, damit alle Callbacks in
shutdown() automatisch abgebaut werden.