mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-23 00:38:10 +02:00
Fix @selection not being expanded when calling handle_result in a kitten
This commit is contained in:
@@ -1925,20 +1925,23 @@ class Boss:
|
|||||||
action_on_removal: Callable[[int, 'Boss'], None] | None = None,
|
action_on_removal: Callable[[int, 'Boss'], None] | None = None,
|
||||||
default_data: dict[str, Any] | None = None
|
default_data: dict[str, Any] | None = None
|
||||||
) -> Any:
|
) -> Any:
|
||||||
orig_args, args = list(args), list(args)
|
|
||||||
from kittens.runner import CLIOnlyKitten, KittenMetadata, create_kitten_handler
|
from kittens.runner import CLIOnlyKitten, KittenMetadata, create_kitten_handler
|
||||||
is_wrapped = kitten in wrapped_kitten_names()
|
is_wrapped = kitten in wrapped_kitten_names()
|
||||||
try:
|
|
||||||
end_kitten = create_kitten_handler(kitten, orig_args)
|
|
||||||
except CLIOnlyKitten:
|
|
||||||
is_wrapped = True
|
|
||||||
end_kitten = KittenMetadata()
|
|
||||||
if window is None:
|
if window is None:
|
||||||
w = self.active_window
|
w = self.active_window
|
||||||
tab = self.active_tab
|
tab = self.active_tab
|
||||||
else:
|
else:
|
||||||
w = window
|
w = window
|
||||||
tab = w.tabref() if w else None
|
tab = w.tabref() if w else None
|
||||||
|
args = list(args)
|
||||||
|
if w is not None and '@selection' in args and (sel := self.data_for_at(which='@selection', window=w)):
|
||||||
|
args = [sel if xa == '@selection' else xa for xa in args]
|
||||||
|
try:
|
||||||
|
end_kitten = create_kitten_handler(kitten, args)
|
||||||
|
except CLIOnlyKitten:
|
||||||
|
is_wrapped = True
|
||||||
|
end_kitten = KittenMetadata()
|
||||||
|
|
||||||
if end_kitten.no_ui:
|
if end_kitten.no_ui:
|
||||||
return end_kitten.handle_result(None, w.id if w else 0, self)
|
return end_kitten.handle_result(None, w.id if w else 0, self)
|
||||||
|
|
||||||
@@ -1965,11 +1968,6 @@ class Boss:
|
|||||||
else:
|
else:
|
||||||
data = input_data if isinstance(input_data, bytes) else input_data.encode('utf-8')
|
data = input_data if isinstance(input_data, bytes) else input_data.encode('utf-8')
|
||||||
copts = common_opts_as_dict(get_options())
|
copts = common_opts_as_dict(get_options())
|
||||||
final_args: list[str] = []
|
|
||||||
for x in args:
|
|
||||||
if x == '@selection' and (sel := self.data_for_at(which='@selection', window=w)):
|
|
||||||
x = sel
|
|
||||||
final_args.append(x)
|
|
||||||
env = {
|
env = {
|
||||||
'KITTY_COMMON_OPTS': json.dumps(copts),
|
'KITTY_COMMON_OPTS': json.dumps(copts),
|
||||||
'KITTY_CHILD_PID': str(w.child.pid),
|
'KITTY_CHILD_PID': str(w.child.pid),
|
||||||
@@ -1999,7 +1997,7 @@ class Boss:
|
|||||||
try:
|
try:
|
||||||
overlay_window = tab.new_special_window(
|
overlay_window = tab.new_special_window(
|
||||||
SpecialWindow(
|
SpecialWindow(
|
||||||
cmd + final_args,
|
cmd + args,
|
||||||
stdin=data,
|
stdin=data,
|
||||||
env=env,
|
env=env,
|
||||||
cwd=w.cwd_of_child,
|
cwd=w.cwd_of_child,
|
||||||
|
|||||||
Reference in New Issue
Block a user