command: Prevent re-writing settings in case of local option (#3178)

* command: Prevent re-writing settings in case of local option

* command: Refactor SetGlobalOptionNative()

Co-authored-by: Dmitry Maluka <dmitrymaluka@gmail.com>

---------

Co-authored-by: Dmitry Maluka <dmitrymaluka@gmail.com>
This commit is contained in:
Jöran Karl 2024-04-11 18:35:13 +02:00 committed by GitHub
parent acb0d763df
commit 426aa9bb8b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -513,74 +513,69 @@ func (h *BufPane) NewTabCmd(args []string) {
} }
func SetGlobalOptionNative(option string, nativeValue interface{}) error { func SetGlobalOptionNative(option string, nativeValue interface{}) error {
local := false // check for local option first...
for _, s := range config.LocalSettings { for _, s := range config.LocalSettings {
if s == option { if s == option {
local = true MainTab().CurPane().Buf.SetOptionNative(option, nativeValue)
break return nil
} }
} }
if !local { // ...if it's not local continue with the globals
config.GlobalSettings[option] = nativeValue config.GlobalSettings[option] = nativeValue
config.ModifiedSettings[option] = true config.ModifiedSettings[option] = true
delete(config.VolatileSettings, option) delete(config.VolatileSettings, option)
if option == "colorscheme" { if option == "colorscheme" {
// LoadSyntaxFiles() // LoadSyntaxFiles()
config.InitColorscheme() config.InitColorscheme()
for _, b := range buffer.OpenBuffers { for _, b := range buffer.OpenBuffers {
b.UpdateRules() b.UpdateRules()
} }
} else if option == "infobar" || option == "keymenu" { } else if option == "infobar" || option == "keymenu" {
Tabs.Resize() Tabs.Resize()
} else if option == "mouse" { } else if option == "mouse" {
if !nativeValue.(bool) { if !nativeValue.(bool) {
screen.Screen.DisableMouse() screen.Screen.DisableMouse()
} else {
screen.Screen.EnableMouse()
}
} else if option == "autosave" {
if nativeValue.(float64) > 0 {
config.SetAutoTime(int(nativeValue.(float64)))
config.StartAutoSave()
} else {
config.SetAutoTime(0)
}
} else if option == "paste" {
screen.Screen.SetPaste(nativeValue.(bool))
} else if option == "clipboard" {
m := clipboard.SetMethod(nativeValue.(string))
err := clipboard.Initialize(m)
if err != nil {
return err
}
} else { } else {
for _, pl := range config.Plugins { screen.Screen.EnableMouse()
if option == pl.Name { }
if nativeValue.(bool) && !pl.Loaded { } else if option == "autosave" {
pl.Load() if nativeValue.(float64) > 0 {
_, err := pl.Call("init") config.SetAutoTime(int(nativeValue.(float64)))
if err != nil && err != config.ErrNoSuchFunction { config.StartAutoSave()
screen.TermMessage(err) } else {
} config.SetAutoTime(0)
} else if !nativeValue.(bool) && pl.Loaded { }
_, err := pl.Call("deinit") } else if option == "paste" {
if err != nil && err != config.ErrNoSuchFunction { screen.Screen.SetPaste(nativeValue.(bool))
screen.TermMessage(err) } else if option == "clipboard" {
} m := clipboard.SetMethod(nativeValue.(string))
err := clipboard.Initialize(m)
if err != nil {
return err
}
} else {
for _, pl := range config.Plugins {
if option == pl.Name {
if nativeValue.(bool) && !pl.Loaded {
pl.Load()
_, err := pl.Call("init")
if err != nil && err != config.ErrNoSuchFunction {
screen.TermMessage(err)
}
} else if !nativeValue.(bool) && pl.Loaded {
_, err := pl.Call("deinit")
if err != nil && err != config.ErrNoSuchFunction {
screen.TermMessage(err)
} }
} }
} }
} }
} }
if local { for _, b := range buffer.OpenBuffers {
MainTab().CurPane().Buf.SetOptionNative(option, nativeValue) b.SetOptionNative(option, nativeValue)
} else {
for _, b := range buffer.OpenBuffers {
b.SetOptionNative(option, nativeValue)
}
} }
return config.WriteSettings(filepath.Join(config.ConfigDir, "settings.json")) return config.WriteSettings(filepath.Join(config.ConfigDir, "settings.json"))