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

View File

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