Add onAnyEvent callback (#3244)

Implement a radical approach to improving abilities of plugins to detect
and handle various changes of micro's state: add onAnyEvent callback
which is called, literally, after any event. A plugin can use this
callback to compare a state after the previous event and after the
current event, and thus is able to catch various events that cannot be
detected using other callbacks.

Some examples of such events:

- change of current working directory
- switching cursor focus between a bufpane and the command bar
- change of message text in the status bar
This commit is contained in:
Dmytro Maluka 2024-05-14 18:01:15 +02:00 committed by GitHub
parent 1f51d0b9e2
commit b70f0eb113
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 19 additions and 12 deletions

View file

@ -450,10 +450,6 @@ func DoEvent() {
os.Exit(0) os.Exit(0)
} }
if event == nil {
return
}
if e, ok := event.(*tcell.EventError); ok { if e, ok := event.(*tcell.EventError); ok {
log.Println("tcell event error: ", e.Error()) log.Println("tcell event error: ", e.Error())
@ -473,13 +469,20 @@ func DoEvent() {
return return
} }
_, resize := event.(*tcell.EventResize) if event != nil {
if resize { _, resize := event.(*tcell.EventResize)
action.InfoBar.HandleEvent(event) if resize {
action.Tabs.HandleEvent(event) action.InfoBar.HandleEvent(event)
} else if action.InfoBar.HasPrompt { action.Tabs.HandleEvent(event)
action.InfoBar.HandleEvent(event) } else if action.InfoBar.HasPrompt {
} else { action.InfoBar.HandleEvent(event)
action.Tabs.HandleEvent(event) } else {
action.Tabs.HandleEvent(event)
}
}
err := config.RunPluginFn("onAnyEvent")
if err != nil {
screen.TermMessage(err)
} }
} }

View file

@ -72,6 +72,10 @@ which micro defines:
* `preRune(bufpane, rune)`: runs before the composed rune will be inserted * `preRune(bufpane, rune)`: runs before the composed rune will be inserted
* `onAnyEvent()`: runs when literally anything happens. It is useful for
detecting various changes of micro's state that cannot be detected
using other callbacks.
For example a function which is run every time the user saves the buffer For example a function which is run every time the user saves the buffer
would be: would be: