From 7bb310d3afb7805e9dde7ad65876da8a1c3cc3ef Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 24 Aug 2022 15:11:08 +0530 Subject: [PATCH] Port recent changes from cli.py to Go --- gen-rc-go.py | 18 ++++++++++++++++-- setup.py | 2 +- tools/cli/infrastructure.go | 13 +++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/gen-rc-go.py b/gen-rc-go.py index 4c52a3797..cc109834d 100755 --- a/gen-rc-go.py +++ b/gen-rc-go.py @@ -1,6 +1,7 @@ #!./kitty/launcher/kitty +launch # License: GPLv3 Copyright: 2022, Kovid Goyal +import json import os import subprocess from typing import Dict, List, Tuple, Union @@ -8,9 +9,11 @@ from typing import Dict, List, Tuple, Union import kitty.constants as kc from kittens.tui.operations import Mode from kitty.cli import OptionDict, OptionSpecSeq, parse_option_spec -from kitty.rc.base import RemoteCommand, all_command_names, command_for_name -from kitty.key_names import functional_key_name_aliases, character_key_name_aliases from kitty.key_encoding import config_mod_map +from kitty.key_names import ( + character_key_name_aliases, functional_key_name_aliases +) +from kitty.rc.base import RemoteCommand, all_command_names, command_for_name def serialize_as_go_string(x: str) -> str: @@ -198,7 +201,16 @@ def serialize_go_dict(x: Union[Dict[str, int], Dict[int, str], Dict[int, int], D return '{' + ', '.join(ans) + '}' +def load_ref_map() -> Dict[str, Dict[str, str]]: + with open('kitty/docs_ref_map_generated.h') as f: + raw = f.read() + raw = raw.split('{', 1)[1].split('}', 1)[0] + data = json.loads(bytes(bytearray(json.loads(f'[{raw}]')))) + return data # type: ignore + + def main() -> None: + ref_map = load_ref_map() with open('constants_generated.go', 'w') as f: dp = ", ".join(map(lambda x: f'"{serialize_as_go_string(x)}"', kc.default_pager_for_help)) f.write(f'''\ @@ -220,6 +232,8 @@ var DefaultPager []string = []string{{ {dp} }} var FunctionalKeyNameAliases = map[string]string{serialize_go_dict(functional_key_name_aliases)} var CharacterKeyNameAliases = map[string]string{serialize_go_dict(character_key_name_aliases)} var ConfigModMap = map[string]uint16{serialize_go_dict(config_mod_map)} +var RefMap = map[string]string{serialize_go_dict(ref_map['ref'])} +var DocTitleMap = map[string]string{serialize_go_dict(ref_map['doc'])} ''') with open('tools/cmd/at/template.go') as f: template = f.read() diff --git a/setup.py b/setup.py index 01949cd28..1cb8125a5 100755 --- a/setup.py +++ b/setup.py @@ -883,7 +883,7 @@ def update_go_generated_files(args: Options, kitty_exe: str) -> None: rc_sources = [x for x in glob.glob('kitty/rc/*.py') if os.path.basename(x) not in ('base.py', '__init__.py')] rc_objects = glob.glob('tools/cmd/at/*_generated.go') generated = rc_objects + glob.glob('constants_generated.go') - sources = ['gen-rc-go.py', 'kitty/constants.py', 'setup.py', 'tools/cmd/at/template.go'] + rc_sources + sources = ['gen-rc-go.py', 'kitty/constants.py', 'setup.py', 'kitty/docs_ref_map_generated.h', 'tools/cmd/at/template.go'] + rc_sources if generated: oldest_generated = min(map(os.path.getmtime, generated)) newest_source = max(map(os.path.getmtime, sources)) diff --git a/tools/cli/infrastructure.go b/tools/cli/infrastructure.go index ec76d4bd5..290eed75a 100644 --- a/tools/cli/infrastructure.go +++ b/tools/cli/infrastructure.go @@ -273,7 +273,20 @@ func prettify(text string) string { case "env", "envvar": return ref_hyperlink(val, "envvar-") case "doc": + text, target := text_and_target(val) + if text == target { + target = strings.Trim(target, "/") + if title, ok := kitty.DocTitleMap[target]; ok { + val = title + " <" + target + ">" + } + } return ref_hyperlink(val, "doc-") + case "iss": + return ref_hyperlink(val, "issues-") + case "pull": + return ref_hyperlink(val, "pull-") + case "disc": + return ref_hyperlink(val, "discussions-") case "ref": return ref_hyperlink(val, "") case "ac":