From 2abc0be8446c6bba1b8cd1d2297da87485f35e70 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 16 Dec 2024 15:32:32 +0530 Subject: [PATCH] themes kitten: When using the Default theme as an auto switch theme include all the actual settings values Fixes #8124 --- docs/changelog.rst | 5 +++++ gen/go_code.py | 3 ++- kittens/themes/ui.go | 6 +++++- kitty/colors.py | 13 +++++++++++++ tools/themes/collection.go | 17 +++++++++++++++++ 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 9c8452c1b..15978b6b0 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -84,6 +84,11 @@ consumption to do the same tasks. Detailed list of changes ------------------------------------- +0.38.1 [future] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- themes kitten: When using the *Default* theme as an auto switch theme include all the actual settings values (:iss:`8124`) + 0.38.0 [2024-12-15] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/gen/go_code.py b/gen/go_code.py index 912a66c52..d06f614f7 100755 --- a/gen/go_code.py +++ b/gen/go_code.py @@ -583,7 +583,7 @@ def load_ref_map() -> dict[str, dict[str, str]]: def generate_constants() -> str: from kittens.hints.main import DEFAULT_REGEX from kittens.query_terminal.main import all_queries - from kitty.colors import ThemeFile + from kitty.colors import ThemeFile, default_theme from kitty.config import option_names_for_completion from kitty.fast_data_types import FILE_TRANSFER_CODE from kitty.options.utils import allowed_shell_integration_values, url_style_map @@ -629,6 +629,7 @@ var DocTitleMap = map[string]string{serialize_go_dict(ref_map['doc'])} var AllowedShellIntegrationValues = []string{{ {str(sorted(allowed_shell_integration_values))[1:-1].replace("'", '"')} }} var QueryNames = []string{{ {query_names} }} var CommentedOutDefaultConfig = "{serialize_as_go_string(commented_out_default_config())}" +var DefaultColorTheme = `{default_theme()}` var KittyConfigDefaults = struct {{ Term, Shell_integration, Select_by_word_characters, Url_excluded_characters, Shell string Wheel_scroll_multiplier int diff --git a/kittens/themes/ui.go b/kittens/themes/ui.go index c98385765..b62865951 100644 --- a/kittens/themes/ui.go +++ b/kittens/themes/ui.go @@ -525,7 +525,11 @@ func (self *handler) on_accepting_key_event(ev *loop.KeyEvent) error { scheme := func(name string) error { ev.Handled = true - self.themes_list.CurrentTheme().SaveInFile(utils.ConfigDir(), name) + { + theme := self.themes_list.CurrentTheme() + theme.GenerateDefaultSettings() + theme.SaveInFile(utils.ConfigDir(), name) + } self.update_recent() self.lp.Quit(0) return nil diff --git a/kitty/colors.py b/kitty/colors.py index 931b05a35..ba8987e3b 100644 --- a/kitty/colors.py +++ b/kitty/colors.py @@ -187,3 +187,16 @@ def patch_colors( if default_bg_changed: boss.default_bg_changed_for(w.id) w.refresh() + + +def default_theme() -> str: + from kitty.options.definition import definition + from kitty.options.types import defaults, option_names + ans = [] + + for name in option_names: + defval = getattr(defaults, name) + if isinstance(defval, Color) or name in nullable_colors or name == 'transparent_background_colors': + defval = definition.option_map[name].defval_as_string + ans.append(f'{name} {defval}') + return '\n'.join(ans) diff --git a/tools/themes/collection.go b/tools/themes/collection.go index 891c65df3..79af16a7c 100644 --- a/tools/themes/collection.go +++ b/tools/themes/collection.go @@ -22,8 +22,10 @@ import ( "sync" "time" + "kitty" "kitty/tools/cli" "kitty/tools/config" + "kitty/tools/tty" "kitty/tools/tui/loop" "kitty/tools/tui/subseq" "kitty/tools/utils" @@ -541,6 +543,7 @@ type Theme struct { zip_reader *zip.File is_user_defined bool path_for_user_defined_theme string + generate_default_settings bool } func (self *Theme) Name() string { return self.metadata.Name } @@ -549,6 +552,14 @@ func (self *Theme) Blurb() string { return self.metadata.Blurb } func (self *Theme) IsDark() bool { return self.metadata.Is_dark } func (self *Theme) IsUserDefined() bool { return self.is_user_defined } +func (self *Theme) GenerateDefaultSettings() func() { + orig := self.generate_default_settings + self.generate_default_settings = true + return func() { + self.generate_default_settings = orig + } +} + func (self *Theme) load_code() (string, error) { if self.zip_reader != nil { f, err := self.zip_reader.Open() @@ -586,6 +597,8 @@ func (self *Theme) SaveInDir(dirpath string) (err error) { return utils.AtomicUpdateFile(path, bytes.NewReader(utils.UnsafeStringToBytes(code)), 0o644) } +var debugprintln = tty.DebugPrintln + func (self *Theme) SaveInFile(config_dir, config_file_name string) (err error) { _ = os.MkdirAll(config_dir, 0o755) path := filepath.Join(config_dir, config_file_name) @@ -593,6 +606,10 @@ func (self *Theme) SaveInFile(config_dir, config_file_name string) (err error) { if err != nil { return err } + if self.generate_default_settings && self.Name() == "Default" { + code += "\n" + kitty.DefaultColorTheme + } + return utils.AtomicUpdateFile(path, bytes.NewReader(utils.UnsafeStringToBytes(code)), 0o644) }