diff --git a/internal/action/bindings.go b/internal/action/bindings.go index b1f6462eff..fac4b70ed1 100644 --- a/internal/action/bindings.go +++ b/internal/action/bindings.go @@ -24,9 +24,16 @@ var Binder = map[string]func(e Event, action string){ "terminal": TermMapEvent, } +func writeFile(name string, txt []byte) error { + if _, err := os.Stat(name); errors.Is(err, fs.ErrNotExist) { + return os.WriteFile(name, txt, util.FileMode) + } + return util.SafeWriteInternal(name, txt, false) +} + func createBindingsIfNotExist(fname string) { if _, e := os.Stat(fname); errors.Is(e, fs.ErrNotExist) { - os.WriteFile(fname, []byte("{}"), util.FileMode) + writeFile(fname, []byte("{}")) } } @@ -305,7 +312,8 @@ func TryBindKey(k, v string, overwrite bool) (bool, error) { BindKey(k, v, Binder["buffer"]) txt, _ := json.MarshalIndent(parsed, "", " ") - return true, os.WriteFile(filename, append(txt, '\n'), util.FileMode) + txt = append(txt, '\n') + return true, writeFile(filename, txt) } return false, e } @@ -355,7 +363,8 @@ func UnbindKey(k string) error { } txt, _ := json.MarshalIndent(parsed, "", " ") - return os.WriteFile(filename, append(txt, '\n'), util.FileMode) + txt = append(txt, '\n') + return writeFile(filename, txt) } return e }