From 289fc03b9f4319820c878ceb781372ca98cf90df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6ran=20Karl?= <3951388+JoeKar@users.noreply.github.com> Date: Thu, 17 Sep 2026 18:28:06 +0200 Subject: [PATCH 1/2] micro: Remove `Screen.Fini()` on `recover()` The screen is usually closed with `exit()`. This was overseen in commit e15bb88270a4cb6048f5f1354dd134f97c0cde38 (#3273). --- cmd/micro/micro.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index 44596a391b..25d8ae23f8 100644 --- a/cmd/micro/micro.go +++ b/cmd/micro/micro.go @@ -387,9 +387,6 @@ func main() { defer func() { if err := recover(); err != nil { - if screen.Screen != nil { - screen.Screen.Fini() - } if e, ok := err.(*lua.ApiError); ok { fmt.Println("Lua API error:", e) } else { From 2e76eb4e1b1b53b9177f7676852943e0cdfbc036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6ran=20Karl?= <3951388+JoeKar@users.noreply.github.com> Date: Thu, 17 Sep 2026 18:32:47 +0200 Subject: [PATCH 2/2] micro: Run plugin's `deinit()` on `exit()` This allows plugins to do some cleanup short before micro is exited. --- cmd/micro/micro.go | 5 +++++ runtime/help/plugins.md | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index 25d8ae23f8..e0c409e138 100644 --- a/cmd/micro/micro.go +++ b/cmd/micro/micro.go @@ -290,6 +290,11 @@ func checkBackup(name string) error { } func exit(rc int) { + err := config.RunPluginFn("deinit") + if err != nil { + screen.TermMessage(err) + } + for _, b := range buffer.OpenBuffers { if !b.Modified() { b.Fini() diff --git a/runtime/help/plugins.md b/runtime/help/plugins.md index 27d099973a..c61d59905a 100644 --- a/runtime/help/plugins.md +++ b/runtime/help/plugins.md @@ -55,7 +55,8 @@ that micro defines: * `postinit()`: initialization function called after the `init()` function of all plugins has been called. -* `deinit()`: cleanup function called when your plugin is unloaded or reloaded. +* `deinit()`: cleanup function called when your plugin is unloaded, reloaded or + micro exited. * `onBufferOpen(buf)`: runs when a buffer is opened. The input contains the buffer object.