|
7 | 7 | "log" |
8 | 8 | "os" |
9 | 9 | "os/signal" |
| 10 | + "path/filepath" |
10 | 11 | "regexp" |
11 | 12 | "runtime" |
12 | 13 | "runtime/pprof" |
@@ -222,6 +223,35 @@ func LoadInput(args []string) []*buffer.Buffer { |
222 | 223 | return buffers |
223 | 224 | } |
224 | 225 |
|
| 226 | +func checkBackup(name string) error { |
| 227 | + target := filepath.Join(config.ConfigDir, name) |
| 228 | + backup := util.AppendBackupSuffix(target) |
| 229 | + if info, err := os.Stat(backup); err == nil { |
| 230 | + input, err := os.ReadFile(backup) |
| 231 | + if err == nil { |
| 232 | + t := info.ModTime() |
| 233 | + msg := fmt.Sprintf(buffer.BackupMsg, t.Format("Mon Jan _2 at 15:04, 2006"), backup) |
| 234 | + choice := screen.TermPrompt(msg, []string{"r", "i", "a", "recover", "ignore", "abort"}, true) |
| 235 | + |
| 236 | + if choice%3 == 0 { |
| 237 | + // recover |
| 238 | + err := os.WriteFile(target, input, util.FileMode) |
| 239 | + if err != nil { |
| 240 | + return err |
| 241 | + } |
| 242 | + return os.Remove(backup) |
| 243 | + } else if choice%3 == 1 { |
| 244 | + // delete |
| 245 | + return os.Remove(backup) |
| 246 | + } else if choice%3 == 2 { |
| 247 | + // abort |
| 248 | + return errors.New("Aborted") |
| 249 | + } |
| 250 | + } |
| 251 | + } |
| 252 | + return nil |
| 253 | +} |
| 254 | + |
225 | 255 | func exit(rc int) { |
226 | 256 | for _, b := range buffer.OpenBuffers { |
227 | 257 | if !b.Modified() { |
@@ -269,6 +299,12 @@ func main() { |
269 | 299 | config.InitRuntimeFiles(true) |
270 | 300 | config.InitPlugins() |
271 | 301 |
|
| 302 | + err = checkBackup("settings.json") |
| 303 | + if err != nil { |
| 304 | + screen.TermMessage(err) |
| 305 | + exit(1) |
| 306 | + } |
| 307 | + |
272 | 308 | err = config.ReadSettings() |
273 | 309 | if err != nil { |
274 | 310 | screen.TermMessage(err) |
@@ -329,6 +365,12 @@ func main() { |
329 | 365 | screen.TermMessage(err) |
330 | 366 | } |
331 | 367 |
|
| 368 | + err = checkBackup("bindings.json") |
| 369 | + if err != nil { |
| 370 | + screen.TermMessage(err) |
| 371 | + exit(1) |
| 372 | + } |
| 373 | + |
332 | 374 | action.InitBindings() |
333 | 375 | action.InitCommands() |
334 | 376 |
|
|
0 commit comments