Files
wen/internal/editor/buffer/save.go
T

67 lines
1.2 KiB
Go
Raw Normal View History

2026-10-26 02:32:03 +00:00
package buffer
import (
"bytes"
"fmt"
"os"
"time"
)
// TODO: save to temporary file, then move over current file.
// TODO: autosave; track dirty buffer.
func (b *Buffer) Save() error {
var buf bytes.Buffer
switch len(b.lines) {
case 1:
if l := b.lines[0]; l.Length() != 0 {
if _, err := buf.WriteString(l.String()); err != nil {
return fmt.Errorf(
"failed to write to buffer: %v", err,
)
}
if _, err := buf.WriteRune('\n'); err != nil {
return fmt.Errorf(
"failed to write to buffer: %v", err,
)
}
}
default:
for _, l := range b.lines {
if _, err := buf.WriteString(l.String()); err != nil {
return fmt.Errorf(
"failed to write to buffer: %v", err,
)
}
if _, err := buf.WriteRune('\n'); err != nil {
return fmt.Errorf(
"failed to write to buffer: %v", err,
)
}
}
}
if err := os.WriteFile(
b.name,
buf.Bytes(),
0666,
); err != nil {
return fmt.Errorf("failed to write file: %v", err)
}
b.saved = time.Now()
return nil
}
func (b *Buffer) SaveAs(name string) error {
old := b.name
b.name = name
if err := b.Save(); err != nil {
b.name = old
return fmt.Errorf("failed to save file as %s: %w", name, err)
}
return nil
}