serialize: Don't save undo stack if saveundo=off (#4003)

Micro always saves the undo stack information into the serialized buffer
file as long as either `saveundo` or `savecursor` is enabled. Whereas in
the case when only `savecursor` is enabled, while `saveundo` is
disabled, this information is not used afterwards, so it only wastes the
disk space in `~/.config/micro/buffers`. (And given that currently micro
never automatically removes any serialized buffer files, it may
significantly contribute to the overall ever growing size of the
`~/.config/micro/buffers` directory.)

So avoid saving the undo info if `saveundo` is disabled. This makes the
size of each serialized buffer file with savecursor=on saveundo=off
small and predictable, e.g. around 600 bytes in my observations (whereas
without this fix, it may grow indefinitely big, depending on the number
of modifications the user made before saving the file).
This commit is contained in:
Dmytro Maluka
2026-02-10 20:32:16 +01:00
committed by GitHub
parent 1317a2deb1
commit 4aa706cbc5

View File

@@ -29,12 +29,16 @@ func (b *Buffer) Serialize() error {
return nil
}
buffer := SerializedBuffer{
Cursor: b.GetActiveCursor().Loc,
ModTime: b.ModTime,
}
if b.Settings["saveundo"].(bool) {
buffer.EventHandler = b.EventHandler
}
var buf bytes.Buffer
err := gob.NewEncoder(&buf).Encode(SerializedBuffer{
b.EventHandler,
b.GetActiveCursor().Loc,
b.ModTime,
})
err := gob.NewEncoder(&buf).Encode(buffer)
if err != nil {
return err
}
@@ -76,7 +80,7 @@ func (b *Buffer) Unserialize() error {
b.StartCursor = buffer.Cursor
}
if b.Settings["saveundo"].(bool) {
if b.Settings["saveundo"].(bool) && buffer.EventHandler != nil {
// We should only use last time's eventhandler if the file wasn't modified by someone else in the meantime
if b.ModTime == buffer.ModTime {
b.EventHandler = buffer.EventHandler