diff --git a/kittens/choose_fonts/ui.go b/kittens/choose_fonts/ui.go index 25e5792a7..d313eb558 100644 --- a/kittens/choose_fonts/ui.go +++ b/kittens/choose_fonts/ui.go @@ -25,16 +25,18 @@ const ( ) type handler struct { - lp *loop.Loop - fonts map[string][]ListedFont - state State - err_mutex sync.Mutex - err_in_worker_thread error - mouse_state tui.MouseState - render_count uint - render_lines tui.RenderLines - font_sz_in_pts float64 - logical_dpi_x, logical_dpi_y float64 + lp *loop.Loop + fonts map[string][]ListedFont + state State + err_mutex sync.Mutex + err_in_worker_thread error + mouse_state tui.MouseState + render_count uint + render_lines tui.RenderLines + text_style struct { + font_sz, dpi_x, dpi_y float64 + foreground, background string + } // Listing rl *readline.Readline @@ -263,7 +265,7 @@ func (h *handler) handle_listing_text(text string, from_key_event bool, in_brack func (h *handler) initialize() { h.lp.SetCursorVisible(false) h.lp.OnQueryResponse = h.on_query_response - h.lp.QueryTerminal("font_size", "dpi_x", "dpi_y") + h.lp.QueryTerminal("font_size", "dpi_x", "dpi_y", "foreground", "background") h.rl = readline.New(h.lp, readline.RlInit{DontMarkPrompts: true, Prompt: "Family: "}) h.variable_data_requested_for = utils.NewSet[string](256) h.draw_screen() @@ -293,17 +295,21 @@ func (h *handler) on_query_response(key, val string, valid bool) error { } switch key { case "font_size": - if err := set_float(key, val, &h.font_sz_in_pts); err != nil { + if err := set_float(key, val, &h.text_style.font_sz); err != nil { return err } - case "logical_dpi_x": - if err := set_float(key, val, &h.logical_dpi_x); err != nil { + case "dpi_x": + if err := set_float(key, val, &h.text_style.dpi_x); err != nil { return err } - case "logical_dpi_y": - if err := set_float(key, val, &h.logical_dpi_y); err != nil { + case "dpi_y": + if err := set_float(key, val, &h.text_style.dpi_y); err != nil { return err } + case "foreground": + h.text_style.foreground = val + case "background": + h.text_style.background = val } return nil } diff --git a/kittens/query_terminal/main.py b/kittens/query_terminal/main.py index a57903e38..8a5aefee0 100644 --- a/kittens/query_terminal/main.py +++ b/kittens/query_terminal/main.py @@ -175,6 +175,41 @@ class DpiY(Query): return f'{cf["logical_dpi_y"]:g}' +@query +class Foreground(Query): + name: str = 'foreground' + help_text: str = 'The current foreground color as a 24-bit # color code' + + @staticmethod + def get_result(opts: Options, window_id: int, os_window_id: int) -> str: + from kitty.fast_data_types import Color, get_boss + boss = get_boss() + w = boss.window_id_map.get(window_id) + if w is None: + return opts.foreground.as_sharp + col = w.screen.color_profile.default_fg + r, g, b = col >> 16, (col >> 8) & 0xff, col & 0xff + return Color(r, g, b).as_sharp + + +@query +class Background(Query): + name: str = 'background' + help_text: str = 'The current background color as a 24-bit # color code' + + @staticmethod + def get_result(opts: Options, window_id: int, os_window_id: int) -> str: + from kitty.fast_data_types import Color, get_boss + boss = get_boss() + w = boss.window_id_map.get(window_id) + if w is None: + return opts.background.as_sharp + col = w.screen.color_profile.default_bg + r, g, b = col >> 16, (col >> 8) & 0xff, col & 0xff + return Color(r, g, b).as_sharp + + + @query class ClipboardControl(Query): name: str = 'clipboard_control' diff --git a/kitty/fast_data_types.pyi b/kitty/fast_data_types.pyi index 081a6278e..aaae6b153 100644 --- a/kitty/fast_data_types.pyi +++ b/kitty/fast_data_types.pyi @@ -728,6 +728,7 @@ class Color: class ColorProfile: + default_fg: int default_bg: int def as_dict(self) -> Dict[str, Optional[int]]: