Move generation of query responses into the query classes

This commit is contained in:
Kovid Goyal 2021-06-24 12:31:17 +05:30
parent 5b3ac259ce
commit 890a149a5d
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 34 additions and 11 deletions

View File

@ -4,15 +4,16 @@
import re import re
import sys import sys
from binascii import unhexlify, hexlify from binascii import hexlify, unhexlify
from contextlib import suppress 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 import parse_args
from kitty.cli_stub import QueryTerminalCLIOptions from kitty.cli_stub import QueryTerminalCLIOptions
from kitty.constants import appname from kitty.constants import appname, str_version
from kitty.utils import TTYIO from kitty.options.types import Options
from kitty.terminfo import names from kitty.terminfo import names
from kitty.utils import TTYIO
class Query: class Query:
@ -45,6 +46,10 @@ class Query:
def output_line(self) -> str: def output_line(self) -> str:
return self.ans return self.ans
@staticmethod
def get_result(opts: Options) -> str:
raise NotImplementedError()
all_queries: Dict[str, Type[Query]] = {} all_queries: Dict[str, Type[Query]] = {}
@ -60,6 +65,10 @@ class TerminalName(Query):
query_name: str = 'TN' query_name: str = 'TN'
help_text: str = f'Terminal name ({names[0]})' help_text: str = f'Terminal name ({names[0]})'
@staticmethod
def get_result(opts: Options) -> str:
return appname
@query @query
class TerminalVersion(Query): class TerminalVersion(Query):
@ -67,6 +76,10 @@ class TerminalVersion(Query):
query_name: str = 'kitty-query-version' query_name: str = 'kitty-query-version'
help_text: str = 'Terminal version, for e.g.: 0.19.2' help_text: str = 'Terminal version, for e.g.: 0.19.2'
@staticmethod
def get_result(opts: Options) -> str:
return str_version
@query @query
class AllowHyperlinks(Query): class AllowHyperlinks(Query):
@ -74,6 +87,18 @@ class AllowHyperlinks(Query):
query_name: str = 'kitty-query-allow_hyperlinks' query_name: str = 'kitty-query-allow_hyperlinks'
help_text: str = 'yes, no or ask' 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]: def do_queries(queries: Iterable, cli_opts: QueryTerminalCLIOptions) -> Dict[str, str]:
actions = tuple(all_queries[x]() for x in queries) actions = tuple(all_queries[x]() for x in queries)

View File

@ -479,17 +479,15 @@ def get_capabilities(query_string: str, opts: 'Options') -> Generator[str, None,
if name in ('TN', 'name'): if name in ('TN', 'name'):
yield result(encoded_query_name, names[0]) yield result(encoded_query_name, names[0])
elif name.startswith('kitty-query-'): elif name.startswith('kitty-query-'):
from kittens.query_terminal.main import get_result
name = name[len('kitty-query-'):] name = name[len('kitty-query-'):]
if name == 'version': rval = get_result(name)
from .constants import str_version if rval is None:
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:
from .utils import log_error from .utils import log_error
log_error('Unknown kitty terminfo query:', name) log_error('Unknown kitty terminfo query:', name)
yield result(encoded_query_name) yield result(encoded_query_name)
else:
yield result(encoded_query_name, rval)
else: else:
try: try:
val = queryable_capabilities[name] val = queryable_capabilities[name]