From 890a149a5de89f87d680ec36663ba6ba4b5bdd9b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 24 Jun 2021 12:31:17 +0530 Subject: [PATCH] Move generation of query responses into the query classes --- kittens/query_terminal/main.py | 33 +++++++++++++++++++++++++++++---- kitty/terminfo.py | 12 +++++------- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/kittens/query_terminal/main.py b/kittens/query_terminal/main.py index 9fbdaaacd..4e7dda5ab 100644 --- a/kittens/query_terminal/main.py +++ b/kittens/query_terminal/main.py @@ -4,15 +4,16 @@ import re import sys -from binascii import unhexlify, hexlify +from binascii import hexlify, unhexlify from contextlib import suppress -from typing import Dict, Iterable, List, Type +from typing import Dict, Iterable, List, Type, Optional from kitty.cli import parse_args from kitty.cli_stub import QueryTerminalCLIOptions -from kitty.constants import appname -from kitty.utils import TTYIO +from kitty.constants import appname, str_version +from kitty.options.types import Options from kitty.terminfo import names +from kitty.utils import TTYIO class Query: @@ -45,6 +46,10 @@ class Query: def output_line(self) -> str: return self.ans + @staticmethod + def get_result(opts: Options) -> str: + raise NotImplementedError() + all_queries: Dict[str, Type[Query]] = {} @@ -60,6 +65,10 @@ class TerminalName(Query): query_name: str = 'TN' help_text: str = f'Terminal name ({names[0]})' + @staticmethod + def get_result(opts: Options) -> str: + return appname + @query class TerminalVersion(Query): @@ -67,6 +76,10 @@ class TerminalVersion(Query): query_name: str = 'kitty-query-version' help_text: str = 'Terminal version, for e.g.: 0.19.2' + @staticmethod + def get_result(opts: Options) -> str: + return str_version + @query class AllowHyperlinks(Query): @@ -74,6 +87,18 @@ class AllowHyperlinks(Query): query_name: str = 'kitty-query-allow_hyperlinks' help_text: str = 'yes, no or ask' + @staticmethod + def get_result(opts: Options) -> str: + return 'ask' if opts.allow_hyperlinks == 0b11 else ('yes' if opts.allow_hyperlinks else 'no') + + +def get_result(name: str) -> Optional[str]: + from kitty.fast_data_types import get_options + q = all_queries.get(name) + if q is None: + return None + return q.get_result(get_options()) + def do_queries(queries: Iterable, cli_opts: QueryTerminalCLIOptions) -> Dict[str, str]: actions = tuple(all_queries[x]() for x in queries) diff --git a/kitty/terminfo.py b/kitty/terminfo.py index b8d9de169..8fc5eb4ec 100644 --- a/kitty/terminfo.py +++ b/kitty/terminfo.py @@ -479,17 +479,15 @@ def get_capabilities(query_string: str, opts: 'Options') -> Generator[str, None, if name in ('TN', 'name'): yield result(encoded_query_name, names[0]) elif name.startswith('kitty-query-'): + from kittens.query_terminal.main import get_result name = name[len('kitty-query-'):] - if name == 'version': - from .constants import str_version - yield result(encoded_query_name, str_version) - elif name == 'allow_hyperlinks': - yield result(encoded_query_name, - 'ask' if opts.allow_hyperlinks == 0b11 else ('yes' if opts.allow_hyperlinks else 'no')) - else: + rval = get_result(name) + if rval is None: from .utils import log_error log_error('Unknown kitty terminfo query:', name) yield result(encoded_query_name) + else: + yield result(encoded_query_name, rval) else: try: val = queryable_capabilities[name]