Zum Inhalt

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.