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 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)
|
||||||
|
|||||||
@ -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]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user