DRYer
Make CLI Only kittens run in overlay windows when run via the kitten action mapping by default.
This commit is contained in:
parent
d8dc237af7
commit
24f01136c7
3 changed files with 32 additions and 22 deletions
|
|
@ -1,8 +1,6 @@
|
|||
import os
|
||||
if __name__ == '__main__':
|
||||
import os
|
||||
import sys
|
||||
|
||||
from kitty.constants import kitten_exe
|
||||
|
||||
|
||||
def main(args: 'list[str]') -> None:
|
||||
# allow running this kitten via map key kitten choose-fonts
|
||||
os.execlp(kitten_exe(), 'kitten', *args)
|
||||
from kitty.constants import kitten_exe
|
||||
os.execlp(kitten_exe(), 'kitten', *sys.argv)
|
||||
|
|
|
|||
|
|
@ -7,10 +7,11 @@
|
|||
import sys
|
||||
from contextlib import contextmanager
|
||||
from functools import partial
|
||||
from typing import TYPE_CHECKING, Any, Dict, FrozenSet, Generator, List, Optional, cast
|
||||
from typing import TYPE_CHECKING, Any, Callable, Dict, FrozenSet, Generator, List, NamedTuple, Optional, cast
|
||||
|
||||
from kitty.constants import list_kitty_resources
|
||||
from kitty.types import run_once
|
||||
from kitty.typing import BossType, WindowType
|
||||
from kitty.utils import resolve_abs_or_config_path
|
||||
|
||||
aliases = {'url_hints': 'hints'}
|
||||
|
|
@ -72,16 +73,27 @@ def import_kitten_main_module(config_dir: str, kitten: str) -> Dict[str, Any]:
|
|||
}
|
||||
|
||||
|
||||
def create_kitten_handler(kitten: str, orig_args: List[str]) -> Any:
|
||||
class KittenMetadata(NamedTuple):
|
||||
handle_result: Callable[[Any, int, BossType], None] = lambda *a: None
|
||||
|
||||
type_of_input: Optional[str] = None
|
||||
no_ui: bool = False
|
||||
has_ready_notification: bool = False
|
||||
open_url_handler: Optional[Callable[[BossType, WindowType, str, int, str], bool]] = None
|
||||
|
||||
|
||||
|
||||
def create_kitten_handler(kitten: str, orig_args: List[str]) -> KittenMetadata:
|
||||
from kitty.constants import config_dir
|
||||
kitten = resolved_kitten(kitten)
|
||||
m = import_kitten_main_module(config_dir, kitten)
|
||||
ans = partial(m['end'], [kitten] + orig_args)
|
||||
setattr(ans, 'type_of_input', getattr(m['end'], 'type_of_input', None))
|
||||
setattr(ans, 'no_ui', getattr(m['end'], 'no_ui', False))
|
||||
setattr(ans, 'has_ready_notification', getattr(m['end'], 'has_ready_notification', False))
|
||||
setattr(ans, 'open_url_handler', getattr(m['end'], 'open_url_handler', None))
|
||||
return ans
|
||||
handle_result = m['end']
|
||||
return KittenMetadata(
|
||||
handle_result=partial(handle_result, [kitten] + orig_args),
|
||||
type_of_input=getattr(handle_result, 'type_of_input', None),
|
||||
no_ui=getattr(handle_result, 'no_ui', False),
|
||||
has_ready_notification=getattr(handle_result, 'has_ready_notification', False),
|
||||
open_url_handler=getattr(handle_result, 'open_url_handler', None))
|
||||
|
||||
|
||||
def set_debug(kitten: str) -> None:
|
||||
|
|
|
|||
|
|
@ -1897,13 +1897,13 @@ def run_kitten_with_metadata(
|
|||
default_data: Optional[Dict[str, Any]] = None
|
||||
) -> Any:
|
||||
orig_args, args = list(args), list(args)
|
||||
from kittens.runner import CLIOnlyKitten, create_kitten_handler
|
||||
from kittens.runner import CLIOnlyKitten, KittenMetadata, create_kitten_handler
|
||||
is_wrapped = kitten in wrapped_kitten_names()
|
||||
try:
|
||||
end_kitten = create_kitten_handler(kitten, orig_args)
|
||||
except CLIOnlyKitten as err:
|
||||
self.show_error(f'Cannot run the {kitten} kitten', str(err))
|
||||
return
|
||||
is_wrapped = kitten in wrapped_kitten_names()
|
||||
except CLIOnlyKitten:
|
||||
is_wrapped = True
|
||||
end_kitten = KittenMetadata()
|
||||
if window is None:
|
||||
w = self.active_window
|
||||
tab = self.active_tab
|
||||
|
|
@ -1911,7 +1911,7 @@ def run_kitten_with_metadata(
|
|||
w = window
|
||||
tab = w.tabref() if w else None
|
||||
if end_kitten.no_ui:
|
||||
return end_kitten(None, getattr(w, 'id', None), self)
|
||||
return end_kitten.handle_result(None, w.id if w else 0, self)
|
||||
|
||||
if w is not None and tab is not None:
|
||||
if not is_wrapped:
|
||||
|
|
@ -1968,7 +1968,7 @@ def run_kitten_with_metadata(
|
|||
copy_colors_from=w
|
||||
)
|
||||
wid = w.id
|
||||
overlay_window.actions_on_close.append(partial(self.on_kitten_finish, wid, custom_callback or end_kitten, default_data=default_data))
|
||||
overlay_window.actions_on_close.append(partial(self.on_kitten_finish, wid, custom_callback or end_kitten.handle_result, default_data=default_data))
|
||||
overlay_window.open_url_handler = end_kitten.open_url_handler
|
||||
if action_on_removal is not None:
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue