From 2d02ff1c5fa9a0a301a3f79485b551ca3311cc8d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 5 Jan 2025 20:16:43 +0530 Subject: [PATCH] Implement using effective kitty config options for kittens Also centralise reading of kitty options --- kittens/diff/mouse.go | 8 +++----- kittens/hints/marks.go | 8 +++----- kittens/ssh/utils.go | 8 +++----- kittens/themes/ui.go | 4 +--- tools/config/api.go | 16 ++++++++++++++++ tools/tui/mouse.go | 7 ++----- tools/tui/run.go | 7 +++---- 7 files changed, 31 insertions(+), 27 deletions(-) diff --git a/kittens/diff/mouse.go b/kittens/diff/mouse.go index 4e62ed985..eb8e35d3b 100644 --- a/kittens/diff/mouse.go +++ b/kittens/diff/mouse.go @@ -4,7 +4,6 @@ package diff import ( "fmt" - "path/filepath" "strconv" "strings" "sync" @@ -25,7 +24,7 @@ type KittyOpts struct { Copy_on_select bool } -func read_relevant_kitty_opts(path string) KittyOpts { +func read_relevant_kitty_opts() KittyOpts { ans := KittyOpts{Wheel_scroll_multiplier: kitty.KittyConfigDefaults.Wheel_scroll_multiplier} handle_line := func(key, val string) error { switch key { @@ -39,13 +38,12 @@ func read_relevant_kitty_opts(path string) KittyOpts { } return nil } - cp := config.ConfigParser{LineHandler: handle_line} - _ = cp.ParseFiles(path) + config.ReadKittyConfig(handle_line) return ans } var RelevantKittyOpts = sync.OnceValue(func() KittyOpts { - return read_relevant_kitty_opts(filepath.Join(utils.ConfigDir(), "kitty.conf")) + return read_relevant_kitty_opts() }) func (self *Handler) handle_wheel_event(up bool) { diff --git a/kittens/hints/marks.go b/kittens/hints/marks.go index e302bef6c..8b15b4aa8 100644 --- a/kittens/hints/marks.go +++ b/kittens/hints/marks.go @@ -8,7 +8,6 @@ import ( "errors" "fmt" "os/exec" - "path/filepath" "regexp" "slices" "strconv" @@ -211,7 +210,7 @@ type KittyOpts struct { Select_by_word_characters string } -func read_relevant_kitty_opts(path string) KittyOpts { +func read_relevant_kitty_opts() KittyOpts { ans := KittyOpts{ Select_by_word_characters: kitty.KittyConfigDefaults.Select_by_word_characters, Url_excluded_characters: kitty.KittyConfigDefaults.Url_excluded_characters} @@ -228,8 +227,7 @@ func read_relevant_kitty_opts(path string) KittyOpts { } return nil } - cp := config.ConfigParser{LineHandler: handle_line} - _ = cp.ParseFiles(path) // ignore errors and use defaults + config.ReadKittyConfig(handle_line) if ans.Url_prefixes == nil { ans.Url_prefixes = utils.NewSetWithItems(kitty.KittyConfigDefaults.Url_prefixes...) } @@ -237,7 +235,7 @@ func read_relevant_kitty_opts(path string) KittyOpts { } var RelevantKittyOpts = sync.OnceValue(func() KittyOpts { - return read_relevant_kitty_opts(filepath.Join(utils.ConfigDir(), "kitty.conf")) + return read_relevant_kitty_opts() }) var debugprintln = tty.DebugPrintln diff --git a/kittens/ssh/utils.go b/kittens/ssh/utils.go index 5dd2c932c..6c37566f4 100644 --- a/kittens/ssh/utils.go +++ b/kittens/ssh/utils.go @@ -6,7 +6,6 @@ import ( "fmt" "io" "os/exec" - "path/filepath" "regexp" "strconv" "strings" @@ -225,7 +224,7 @@ type KittyOpts struct { Term, Shell_integration string } -func read_relevant_kitty_opts(path string) KittyOpts { +func read_relevant_kitty_opts() KittyOpts { ans := KittyOpts{Term: kitty.KittyConfigDefaults.Term, Shell_integration: kitty.KittyConfigDefaults.Shell_integration} handle_line := func(key, val string) error { switch key { @@ -236,11 +235,10 @@ func read_relevant_kitty_opts(path string) KittyOpts { } return nil } - cp := config.ConfigParser{LineHandler: handle_line} - cp.ParseFiles(path) + config.ReadKittyConfig(handle_line) return ans } var RelevantKittyOpts = sync.OnceValue(func() KittyOpts { - return read_relevant_kitty_opts(filepath.Join(utils.ConfigDir(), "kitty.conf")) + return read_relevant_kitty_opts() }) diff --git a/kittens/themes/ui.go b/kittens/themes/ui.go index c98385765..e5674be59 100644 --- a/kittens/themes/ui.go +++ b/kittens/themes/ui.go @@ -7,7 +7,6 @@ import ( "io" "kitty" "maps" - "path/filepath" "regexp" "slices" "strings" @@ -170,8 +169,7 @@ func ReadKittyColorSettings() map[string]string { } return nil } - cp := config.ConfigParser{LineHandler: handle_line} - cp.ParseFiles(filepath.Join(utils.ConfigDir(), "kitty.conf")) + config.ReadKittyConfig(handle_line) return settings } diff --git a/tools/config/api.go b/tools/config/api.go index 693478272..12f431546 100644 --- a/tools/config/api.go +++ b/tools/config/api.go @@ -400,3 +400,19 @@ func ReloadConfigInKitty(in_parent_only bool) error { } return nil } + +func ReadKittyConfig(line_handler func(key, val string) error) error { + kitty_conf_path := "" + kp := os.Getenv("KITTY_PID") + if _, err := strconv.Atoi(kp); err == nil { + effective_config_path := filepath.Join(utils.CacheDir(), "effective-config", kp) + if unix.Access(effective_config_path, unix.R_OK) == nil { + kitty_conf_path = effective_config_path + } + } + if kitty_conf_path == "" { + kitty_conf_path = filepath.Join(utils.ConfigDir(), "kitty.conf") + } + cp := ConfigParser{LineHandler: line_handler} + return cp.ParseFiles(kitty_conf_path) +} diff --git a/tools/tui/mouse.go b/tools/tui/mouse.go index 72f222402..89890fa08 100644 --- a/tools/tui/mouse.go +++ b/tools/tui/mouse.go @@ -4,7 +4,6 @@ package tui import ( "fmt" - "path/filepath" "time" "kitty" @@ -268,9 +267,8 @@ func (m *MouseState) ApplyHoverStyles(lp *loop.Loop, style ...string) { if len(style) == 0 { if !m.default_url_style.loaded { m.default_url_style.loaded = true - conf := filepath.Join(utils.ConfigDir(), "kitty.conf") color, style := kitty.DefaultUrlColor, kitty.DefaultUrlStyle - cp := config.ConfigParser{LineHandler: func(key, val string) error { + line_handler := func(key, val string) error { switch key { case "url_color": color = val @@ -278,9 +276,8 @@ func (m *MouseState) ApplyHoverStyles(lp *loop.Loop, style ...string) { style = val } return nil - }, } - _ = cp.ParseFiles(conf) // ignore errors and use defaults + config.ReadKittyConfig(line_handler) if style != "none" && style != "" { m.default_url_style.value = fmt.Sprintf("u=%s uc=%s", style, color) } diff --git a/tools/tui/run.go b/tools/tui/run.go index 49ed7f2e6..e05a1dbb4 100644 --- a/tools/tui/run.go +++ b/tools/tui/run.go @@ -30,7 +30,7 @@ type KittyOpts struct { Shell, Shell_integration string } -func read_relevant_kitty_opts(path string) KittyOpts { +func read_relevant_kitty_opts() KittyOpts { ans := KittyOpts{Shell: kitty.KittyConfigDefaults.Shell, Shell_integration: kitty.KittyConfigDefaults.Shell_integration} handle_line := func(key, val string) error { switch key { @@ -41,8 +41,7 @@ func read_relevant_kitty_opts(path string) KittyOpts { } return nil } - cp := config.ConfigParser{LineHandler: handle_line} - _ = cp.ParseFiles(path) + config.ReadKittyConfig(handle_line) if ans.Shell == "" { ans.Shell = kitty.KittyConfigDefaults.Shell } @@ -63,7 +62,7 @@ func get_effective_ksi_env_var(x string) string { } var relevant_kitty_opts = sync.OnceValue(func() KittyOpts { - return read_relevant_kitty_opts(filepath.Join(utils.ConfigDir(), "kitty.conf")) + return read_relevant_kitty_opts() }) func get_shell_from_kitty_conf() (shell string) {