fix: fixed the settings back to their original implementation
This commit is contained in:
parent
93968e7333
commit
c126242ee1
@ -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,69 +202,27 @@ 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
|
|
||||||
currentVal := setting.Get(m.Settings()).(bool)
|
|
||||||
setting.Set(m, !currentVal)
|
setting.Set(m, !currentVal)
|
||||||
}
|
}
|
||||||
return nil
|
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
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
windowSetting := lookupWindowSetting(name)
|
|
||||||
if windowSetting != nil {
|
|
||||||
if windowSetting.Type == BoolSetting {
|
|
||||||
windowSetting.Set(m, false)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle assignment: option=value
|
// Handle assignment: option=value
|
||||||
if strings.Contains(opt, "=") {
|
if strings.Contains(opt, "=") {
|
||||||
parts := strings.SplitN(opt, "=", 2)
|
parts := strings.SplitN(opt, "=", 2)
|
||||||
@ -297,47 +244,15 @@ 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
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user