Add editor packages
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user