diff --git a/gen-go-code.py b/gen-go-code.py index a0bcd3971..54ab4507a 100755 --- a/gen-go-code.py +++ b/gen-go-code.py @@ -49,7 +49,7 @@ def replace(template: str, **kw: str) -> str: json_field_types: Dict[str, str] = { 'bool': 'bool', 'str': 'string', 'list.str': '[]string', 'dict.str': 'map[string]string', 'float': 'float64', 'int': 'int', - 'scroll_amount': '[2]interface{}', 'spacing': 'interface{}', 'colors': 'interface{}', + 'scroll_amount': 'interface{}', 'spacing': 'interface{}', 'colors': 'interface{}', } @@ -124,10 +124,7 @@ def build_go_code(name: str, cmd: RemoteCommand, seq: OptionSpecSeq, template: s jd.append(f.go_declaration()) jc: List[str] = [] handled_fields: Set[str] = set() - try: - jc.extend(cmd.args.as_go_code(name, field_types, handled_fields)) - except TypeError: - print(f'Cant parse args for cmd: {name}', file=sys.stderr) + jc.extend(cmd.args.as_go_code(name, field_types, handled_fields)) for field in json_fields: if field.field in option_map: @@ -137,7 +134,6 @@ def build_go_code(name: str, cmd: RemoteCommand, seq: OptionSpecSeq, template: s pass else: print(f'Cant map field: {field.field} for cmd: {name}', file=sys.stderr) - print('TODO: test set_window_logo, set_window_background, set_font_size, send_text, env, scroll_window', file=sys.stderr) argspec = cmd.args.spec if argspec: @@ -232,6 +228,7 @@ def update_at_commands() -> None: os.remove(dest) with open(dest, 'w') as f: f.write(code) + print('TODO: test set_window_logo, set_window_background, set_font_size, send_text, env, scroll_window', file=sys.stderr) def main() -> None: diff --git a/kitty/rc/base.py b/kitty/rc/base.py index 5cadd0752..d1df3a29a 100644 --- a/kitty/rc/base.py +++ b/kitty/rc/base.py @@ -193,12 +193,13 @@ class ArgsHandling: yield f'args = append(args, "{x}")' yield '}' if self.minimum_count > -1: - yield f'if len(args) < {self.minimum_count} {{ return fmt.Errorf("%s", Must specify at least {self.minimum_count} arguments to {cmd_name}) }}' + yield f'if len(args) < {self.minimum_count} {{ return fmt.Errorf("%s", "Must specify at least {self.minimum_count} arguments to {cmd_name}") }}' if self.args_choices: achoices = tuple(self.args_choices()) yield 'achoices := map[string]bool{' + ' '.join(f'"{x}":true,' for x in achoices) + '}' yield 'for _, a := range args {' yield 'if !achoices[a] { return fmt.Errorf("Not a valid choice: %s. Allowed values are: %s", a, "' + ', '.join(achoices) + '") }' + yield '}' if self.json_field: jf = self.json_field dest = f'payload.{jf.capitalize()}' @@ -240,6 +241,7 @@ class ArgsHandling: return if jt == 'dict.str': yield f'{dest} = parse_key_val_args(args)' + return raise TypeError(f'Unknown args handling for cmd: {cmd_name}') diff --git a/kitty/rc/set_background_image.py b/kitty/rc/set_background_image.py index e91af9932..fda1b095b 100644 --- a/kitty/rc/set_background_image.py +++ b/kitty/rc/set_background_image.py @@ -63,7 +63,7 @@ default=false Don't wait for a response from kitty. This means that even if setting the background image failed, the command will exit with a success code. ''' + '\n\n' + MATCH_WINDOW_OPTION - args = RemoteCommand.Args(spec='PATH_TO_PNG_IMAGE', count=1, special_parse='!read_window_logo(args[0])', completion={ + args = RemoteCommand.Args(spec='PATH_TO_PNG_IMAGE', count=1, json_field='data', special_parse='!read_window_logo(args[0])', completion={ 'files': ('PNG Images', ('*.png',))}) images_in_flight: Dict[str, IO[bytes]] = {} is_asynchronous = True diff --git a/kitty/rc/set_background_opacity.py b/kitty/rc/set_background_opacity.py index dfabf9f4d..e00968ef7 100644 --- a/kitty/rc/set_background_opacity.py +++ b/kitty/rc/set_background_opacity.py @@ -37,7 +37,7 @@ By default, background opacity are only changed for the currently active window. cause background opacity to be changed in all windows. ''' + '\n\n' + MATCH_WINDOW_OPTION + '\n\n' + MATCH_TAB_OPTION.replace('--match -m', '--match-tab -t') - args = RemoteCommand.Args(spec='OPACITY', count=1, json_field='opacity') + args = RemoteCommand.Args(spec='OPACITY', count=1, json_field='opacity', special_parse='parse_opacity(args[0])') def message_to_kitty(self, global_opts: RCOptions, opts: 'CLIOptions', args: ArgsType) -> PayloadType: opacity = max(0.1, min(float(args[0]), 1.0)) diff --git a/tools/cmd/at/main.go b/tools/cmd/at/main.go index 6e46e4ba4..8c9fa3371 100644 --- a/tools/cmd/at/main.go +++ b/tools/cmd/at/main.go @@ -9,7 +9,6 @@ import ( "fmt" "io" "os" - "strconv" "strings" "time" diff --git a/tools/cmd/at/scroll_window.go b/tools/cmd/at/scroll_window.go index 008be3759..d70a44052 100644 --- a/tools/cmd/at/scroll_window.go +++ b/tools/cmd/at/scroll_window.go @@ -8,8 +8,8 @@ import ( "strings" ) -func parse_scroll_amount(amt string) ([2]interface{}, error) { - var ans [2]interface{} +func parse_scroll_amount(amt string) ([]interface{}, error) { + var ans = make([]interface{}, 2) if amt == "start" || amt == "end" { ans[0] = amt ans[1] = nil diff --git a/tools/cmd/at/set_background_opacity.go b/tools/cmd/at/set_background_opacity.go new file mode 100644 index 000000000..039b49a6e --- /dev/null +++ b/tools/cmd/at/set_background_opacity.go @@ -0,0 +1,19 @@ +// License: GPLv3 Copyright: 2022, Kovid Goyal, + +package at + +import "strconv" + +func parse_opacity(arg string) (float64, error) { + ans, err := strconv.ParseFloat(arg, 64) + if err != nil { + return 0, nil + } + if ans < 0.1 { + ans = 0.1 + } + if ans > 1 { + ans = 1 + } + return ans, nil +}