Move generation of query responses into the query classes
This commit is contained in:
parent
5b3ac259ce
commit
890a149a5d
@ -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)
|
||||
|
||||
@ -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]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user