From 94d056ed4f6b61c97e2c121e093d43d44a91c27a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 18 May 2024 13:27:34 +0530 Subject: [PATCH] Wire up applying of font config --- kittens/choose_fonts/final.go | 23 +++++++++++++++++++++++ kittens/choose_fonts/main.go | 27 +++++++++++++++++++++++---- kittens/choose_fonts/ui.go | 1 + 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/kittens/choose_fonts/final.go b/kittens/choose_fonts/final.go index 599c3a65a..4d640d856 100644 --- a/kittens/choose_fonts/final.go +++ b/kittens/choose_fonts/final.go @@ -2,9 +2,12 @@ package choose_fonts import ( "fmt" + "path/filepath" "strings" + "kitty/tools/config" "kitty/tools/tui/loop" + "kitty/tools/utils" ) var _ = fmt.Print @@ -72,6 +75,26 @@ func (self *final_pane) on_key_event(event *loop.KeyEvent) (err error) { self.handler.current_pane = &self.handler.faces return self.handler.draw_screen() } + if event.MatchesPressOrRepeat("enter") { + event.Handled = true + patcher := config.Patcher{Write_backup: true} + path := filepath.Join(utils.ConfigDir(), "kitty.conf") + updated, err := patcher.Patch(path, "KITTY_FONTS", self.settings.serialized(), "font_family", "bold_font", "italic_font", "bold_italic_font") + if err != nil { + return err + } + if updated { + switch self.handler.opts.Reload_in { + case "parent": + config.ReloadConfigInKitty(true) + case "all": + config.ReloadConfigInKitty(false) + } + } + self.lp.Quit(0) + return nil + + } return } diff --git a/kittens/choose_fonts/main.go b/kittens/choose_fonts/main.go index 7309770f3..8cb3366d6 100644 --- a/kittens/choose_fonts/main.go +++ b/kittens/choose_fonts/main.go @@ -13,7 +13,7 @@ var _ = fmt.Print var debugprintln = tty.DebugPrintln var output_on_exit string -func main() (rc int, err error) { +func main(opts *Options) (rc int, err error) { if err = kitty_font_backend.start(); err != nil { return 1, err } @@ -32,7 +32,7 @@ func main() (rc int, err error) { return 1, err } lp.MouseTrackingMode(loop.FULL_MOUSE_TRACKING) - h := &handler{lp: lp} + h := &handler{lp: lp, opts: opts} lp.OnInitialize = func() (string, error) { lp.AllowLineWrapping(false) lp.SetWindowTitle(`Choose a font for kitty`) @@ -67,13 +67,32 @@ func main() (rc int, err error) { return lp.ExitCode(), nil } +type Options struct { + Reload_in string +} + func EntryPoint(root *cli.Command) { ans := root.AddSubCommand(&cli.Command{ - Name: "choose-fonts", + Name: "choose-fonts", + ShortDescription: "Choose the fonts used in kitty", Run: func(cmd *cli.Command, args []string) (rc int, err error) { - return main() + opts := Options{} + if err = cmd.GetOptionValues(&opts); err != nil { + return 1, err + } + return main(&opts) }, }) + ans.Add(cli.OptionSpec{ + Name: "--reload-in", + Dest: "Reload_in", + Type: "choices", + Choices: "parent, all, none", + Default: "parent", + Help: `By default, this kitten will signal only the parent kitty instance it is +running in to reload its config, after making changes. Use this option to +instead either not reload the config at all or in all running kitty instances.`, + }) clone := root.AddClone(ans.Group, ans) clone.Hidden = false clone.Name = "choose_fonts" diff --git a/kittens/choose_fonts/ui.go b/kittens/choose_fonts/ui.go index 0576bdbb2..4cc6a36e6 100644 --- a/kittens/choose_fonts/ui.go +++ b/kittens/choose_fonts/ui.go @@ -40,6 +40,7 @@ type pane interface { } type handler struct { + opts *Options lp *loop.Loop state State err_mutex sync.Mutex