Événements¶
Les plugins réagissent à l'activité de l'éditeur via IEventBus. Les
événements sont de simples structs définis dans PluginEvents.h :
| Événement | Charge utile |
|---|---|
DocumentOpened |
DocumentId, std::filesystem::path |
DocumentClosed |
DocumentId |
DocumentSaved |
DocumentId |
TextChanged |
DocumentId, pos, addedBytes, removedBytes |
SelectionChanged |
DocumentId |
ActiveDocumentChanged |
DocumentId |
AppAboutToQuit |
(aucune) |
CommandShortcutChanged |
commandId, sequence (nouvelle combinaison portable ; "" = non lié) |
CommandShortcutChanged se déclenche quand le raccourci effectif d'une
commande change — un remappage par l'utilisateur dans le mappeur de
raccourcis, un import/une réinitialisation de keymap, ou une suppression de
conflit qui s'active/se lève. Les commandes liées à un menu n'ont besoin de
rien (l'hôte relie leur action) ; les commandes enregistrées avec
scope = command_scope::kPluginWindow s'abonnent et réappliquent la séquence
à leurs propres widgets (voir Commandes et menus).
S'abonner¶
subscribe est un template qui renvoie une Subscription (RAII). Gardez
l'abonnement vivant comme membre aussi longtemps que vous voulez que le
callback se déclenche ; sa destruction vous désabonne.
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
Conservez chaque Subscription comme membre du plugin afin que tous les
callbacks soient démontés automatiquement dans shutdown().