diff --git a/internal/command/handlers.go b/internal/command/handlers.go index 1a14129..d677ffa 100644 --- a/internal/command/handlers.go +++ b/internal/command/handlers.go @@ -6,7 +6,6 @@ import ( "strings" "git.gophernest.net/azpect/TextEditor/internal/action" - "git.gophernest.net/azpect/TextEditor/internal/core" tea "github.com/charmbracelet/bubbletea" ) @@ -107,14 +106,6 @@ func cmdSet(m action.Model, args []string) tea.Cmd { // Setting: Represents a configurable editor option. type Setting struct { - Name string - ShortForm string - Type SettingType - Get func(s core.EditorSettings) any - Set func(m action.Model, val any) -} - -type WindowSetting struct { Name string ShortForm string Type SettingType @@ -131,23 +122,21 @@ const ( StringSetting ) -// settingsMap defines all available editor settings +// settingsMap defines all available settings (both global and window-local) var settingsMap = []Setting{ + // Global editor settings { Name: "tabstop", ShortForm: "ts", Type: IntSetting, - Get: func(s core.EditorSettings) any { return s.TabStop }, + Get: func(m action.Model) any { return m.Settings().TabStop }, Set: func(m action.Model, val any) { s := m.Settings() s.TabStop = val.(int) m.SetSettings(s) }, }, -} - -// windowSettingsMap defines all available window settings -var windowSettingsMap = []WindowSetting{ + // Window-local settings { Name: "number", ShortForm: "nu", @@ -213,66 +202,24 @@ func lookupSetting(name string) *Setting { return nil } -// lookupWindowSetting: Finds a window setting by name, short form, or prefix. -func lookupWindowSetting(name string) *WindowSetting { - for i := range windowSettingsMap { - s := &windowSettingsMap[i] - if name == s.Name || name == s.ShortForm { - return s - } - // Prefix matching - if len(name) >= len(s.ShortForm) && strings.HasPrefix(s.Name, name) { - return s - } - } - return nil -} - // parseSetOption: Parses and applies a single :set option. func parseSetOption(m action.Model, opt string) error { // Handle toggle: option! if name, ok := strings.CutSuffix(opt, "!"); ok { setting := lookupSetting(name) - if setting != nil { - if setting.Type == BoolSetting { - // Toggle the boolean - currentVal := setting.Get(m.Settings()).(bool) - setting.Set(m, !currentVal) - } - return nil + if setting != nil && setting.Type == BoolSetting { + currentVal := setting.Get(m).(bool) + setting.Set(m, !currentVal) } - - windowSetting := lookupWindowSetting(name) - if windowSetting != nil { - if windowSetting.Type == BoolSetting { - // Toggle the boolean - currentVal := windowSetting.Get(m).(bool) - windowSetting.Set(m, !currentVal) - } - return nil - } - return nil } // Handle disable: nooption if name, ok := strings.CutPrefix(opt, "no"); ok { setting := lookupSetting(name) - if setting != nil { - if setting.Type == BoolSetting { - setting.Set(m, false) - } - return nil + if setting != nil && setting.Type == BoolSetting { + setting.Set(m, false) } - - windowSetting := lookupWindowSetting(name) - if windowSetting != nil { - if windowSetting.Type == BoolSetting { - windowSetting.Set(m, false) - } - return nil - } - return nil } @@ -297,46 +244,14 @@ func parseSetOption(m action.Model, opt string) error { boolVal := value == "true" || value == "1" || value == "yes" setting.Set(m, boolVal) } - return nil } - - windowSetting := lookupWindowSetting(name) - if windowSetting != nil { - switch windowSetting.Type { - case IntSetting: - intVal, err := strconv.Atoi(value) - if err != nil { - return err - } - windowSetting.Set(m, intVal) - case StringSetting: - windowSetting.Set(m, value) - case BoolSetting: - // Handle :set option=true / :set option=false - boolVal := value == "true" || value == "1" || value == "yes" - windowSetting.Set(m, boolVal) - } - return nil - } - return nil } // Handle enable: option (boolean only) setting := lookupSetting(opt) - if setting != nil { - if setting.Type == BoolSetting { - setting.Set(m, true) - } - return nil - } - - windowSetting := lookupWindowSetting(opt) - if windowSetting != nil { - if windowSetting.Type == BoolSetting { - windowSetting.Set(m, true) - } - return nil + if setting != nil && setting.Type == BoolSetting { + setting.Set(m, true) } return nil