fix: fixed the settings back to their original implementation

This commit is contained in:
Hayden Hargreaves 2026-03-06 18:11:33 -07:00
parent 93968e7333
commit c126242ee1

View File

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