Zdarzenia¶
Wtyczki reagują na aktywność edytora przez IEventBus. Zdarzenia to zwykłe
struktury zdefiniowane w PluginEvents.h:
| Zdarzenie | Ładunek |
|---|---|
DocumentOpened |
DocumentId, std::filesystem::path |
DocumentClosed |
DocumentId |
DocumentSaved |
DocumentId |
TextChanged |
DocumentId, pos, addedBytes, removedBytes |
SelectionChanged |
DocumentId |
ActiveDocumentChanged |
DocumentId |
AppAboutToQuit |
(brak) |
CommandShortcutChanged |
commandId, sequence (nowy przenośny akord; "" = niezwiązane) |
CommandShortcutChanged odpala się, gdy zmienia się efektywny skrót
polecenia — przemapowanie przez użytkownika w mapperze skrótów, import/reset
mapy klawiszy albo włączenie/zdjęcie tłumienia konfliktu. Polecenia powiązane z
menu nie potrzebują niczego (host przepina ich akcję); polecenia zarejestrowane
ze scope = command_scope::kPluginWindow subskrybują i ponownie stosują
sekwencję do własnych widżetów (zobacz
Polecenia i menu).
Subskrypcja¶
subscribe to szablon zwracający Subscription (RAII). Trzymaj subskrypcję
przy życiu jako pole składowe tak długo, jak callback ma się odpalać; jej
zniszczenie wypisuje z subskrypcji.
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
Trzymaj każdą Subscription jako pole składowe wtyczki, aby wszystkie
callbacki sprzątały się automatycznie w shutdown().