Skip to content

Commit

Permalink
themes kitten: When using the Default theme as an auto switch theme i…
Browse files Browse the repository at this point in the history
…nclude all the actual settings values

Fixes #8124
  • Loading branch information
kovidgoyal committed Dec 16, 2024
1 parent d3f93cb commit 2abc0be
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 2 deletions.
5 changes: 5 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down
3 changes: 2 additions & 1 deletion gen/go_code.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -629,6 +629,7 @@ def generate_constants() -> str:
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
Expand Down
6 changes: 5 additions & 1 deletion kittens/themes/ui.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 13 additions & 0 deletions kitty/colors.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
17 changes: 17 additions & 0 deletions tools/themes/collection.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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 }
Expand All @@ -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()
Expand Down Expand Up @@ -586,13 +597,19 @@ 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)
code, err := self.Code()
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)
}

Expand Down

0 comments on commit 2abc0be

Please sign in to comment.