]> git.lizzy.rs Git - micro.git/commitdiff
Start implementing backup system
authorZachary Yedidia <zyedidia@gmail.com>
Sat, 21 Dec 2019 21:35:09 +0000 (16:35 -0500)
committerZachary Yedidia <zyedidia@gmail.com>
Wed, 25 Dec 2019 22:05:11 +0000 (17:05 -0500)
internal/buffer/backup.go [new file with mode: 0644]
internal/config/settings.go

diff --git a/internal/buffer/backup.go b/internal/buffer/backup.go
new file mode 100644 (file)
index 0000000..e9b91bc
--- /dev/null
@@ -0,0 +1,49 @@
+package buffer
+
+import (
+       "io"
+
+       "github.com/zyedidia/micro/internal/config"
+       "github.com/zyedidia/micro/internal/util"
+       "golang.org/x/text/encoding"
+)
+
+// Backup saves the current buffer to ConfigDir/backups
+func (b *Buffer) Backup() error {
+       if !b.Settings["backup"].(bool) {
+               return nil
+       }
+
+       name := config.ConfigDir + "/backups" + util.EscapePath(b.AbsPath)
+
+       err := overwriteFile(name, encoding.Nop, func(file io.Writer) (e error) {
+               if len(b.lines) == 0 {
+                       return
+               }
+
+               // end of line
+               eol := []byte{'\n'}
+
+               // write lines
+               if _, e = file.Write(b.lines[0].data); e != nil {
+                       return
+               }
+
+               for _, l := range b.lines[1:] {
+                       if _, e = file.Write(eol); e != nil {
+                               return
+                       }
+                       if _, e = file.Write(l.data); e != nil {
+                               return
+                       }
+               }
+               return
+       })
+
+       return err
+}
+
+// ApplyBackup applies the corresponding backup file to this buffer (if one exists)
+func (b *Buffer) ApplyBackup() error {
+       return nil
+}
index 19d2586c61e03e7c7fca7044443b15537660cd91..f8b42675187165c1730a911a7b9e1eb98034f1f2 100644 (file)
@@ -155,6 +155,7 @@ func GetGlobalOption(name string) interface{} {
 
 var defaultCommonSettings = map[string]interface{}{
        "autoindent":     true,
+       "backup":         true,
        "basename":       false,
        "colorcolumn":    float64(0),
        "cursorline":     true,