Port recent changes from cli.py to Go

This commit is contained in:
Kovid Goyal 2022-08-24 15:11:08 +05:30
parent 9d56f8eed2
commit 7bb310d3af
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 30 additions and 3 deletions

View File

@ -1,6 +1,7 @@
#!./kitty/launcher/kitty +launch
# License: GPLv3 Copyright: 2022, Kovid Goyal <kovid at kovidgoyal.net>
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()

View File

@ -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))

View File

@ -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":