Do not use prewarming for wrapped kittens
This commit is contained in:
parent
35c1ebd3f9
commit
0903ae7b4d
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, DefaultDict, Dict, Generator, List, Optional,
|
|||||||
|
|
||||||
import kitty.fast_data_types as fast_data_types
|
import kitty.fast_data_types as fast_data_types
|
||||||
|
|
||||||
from .constants import handled_signals, is_freebsd, is_macos, kitten_exe, kitty_base_dir, shell_path, terminfo_dir
|
from .constants import handled_signals, is_freebsd, is_macos, kitten_exe, kitty_base_dir, shell_path, terminfo_dir, wrapped_kitten_names
|
||||||
from .types import run_once
|
from .types import run_once
|
||||||
from .utils import log_error, which
|
from .utils import log_error, which
|
||||||
|
|
||||||
@ -185,16 +185,31 @@ class ProcessDesc(TypedDict):
|
|||||||
cmdline: Optional[Sequence[str]]
|
cmdline: Optional[Sequence[str]]
|
||||||
|
|
||||||
|
|
||||||
def is_prewarmable(argv: Sequence[str]) -> bool:
|
def is_prewarmable(argv: List[str]) -> Tuple[bool, List[str]]:
|
||||||
if len(argv) < 3 or os.path.basename(argv[0]) != 'kitty':
|
if len(argv) < 3 or os.path.basename(argv[0]) != 'kitty':
|
||||||
return False
|
return False, argv
|
||||||
if argv[1][:1] not in '@+':
|
if argv[1][:1] != '+':
|
||||||
return False
|
return False, argv
|
||||||
if argv[1][0] == '@':
|
sw = ''
|
||||||
return True
|
|
||||||
if argv[1] == '+':
|
if argv[1] == '+':
|
||||||
return argv[2] != 'open'
|
which = argv[2]
|
||||||
return argv[1] != '+open'
|
if len(argv) > 3:
|
||||||
|
sw = argv[3]
|
||||||
|
else:
|
||||||
|
which = argv[1][1:]
|
||||||
|
if len(argv) > 2:
|
||||||
|
sw = argv[2]
|
||||||
|
if which == 'open':
|
||||||
|
return False, argv
|
||||||
|
if which == 'kitten' and sw in wrapped_kitten_names():
|
||||||
|
argv = list(argv)
|
||||||
|
argv[0] = kitten_exe()
|
||||||
|
if argv[1] == '+':
|
||||||
|
del argv[1:3]
|
||||||
|
else:
|
||||||
|
del argv[1]
|
||||||
|
return False, argv
|
||||||
|
return True, argv
|
||||||
|
|
||||||
|
|
||||||
@run_once
|
@run_once
|
||||||
@ -281,7 +296,7 @@ class Child:
|
|||||||
self.forked = True
|
self.forked = True
|
||||||
master, slave = openpty()
|
master, slave = openpty()
|
||||||
stdin, self.stdin = self.stdin, None
|
stdin, self.stdin = self.stdin, None
|
||||||
self.is_prewarmed = is_prewarmable(self.argv)
|
self.is_prewarmed, self.argv = is_prewarmable(self.argv)
|
||||||
if not self.is_prewarmed:
|
if not self.is_prewarmed:
|
||||||
ready_read_fd, ready_write_fd = os.pipe()
|
ready_read_fd, ready_write_fd = os.pipe()
|
||||||
os.set_inheritable(ready_write_fd, False)
|
os.set_inheritable(ready_write_fd, False)
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import os
|
|||||||
import pwd
|
import pwd
|
||||||
import sys
|
import sys
|
||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
from typing import TYPE_CHECKING, Any, Iterator, NamedTuple, Optional, Set
|
from typing import TYPE_CHECKING, Any, FrozenSet, Iterator, NamedTuple, Optional, Set
|
||||||
|
|
||||||
from .types import run_once
|
from .types import run_once
|
||||||
|
|
||||||
@ -296,3 +296,9 @@ def local_docs() -> str:
|
|||||||
if os.path.isdir(q):
|
if os.path.isdir(q):
|
||||||
return q
|
return q
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
|
||||||
|
@run_once
|
||||||
|
def wrapped_kitten_names() -> FrozenSet[str]:
|
||||||
|
import kitty.fast_data_types as f
|
||||||
|
return frozenset(f.wrapped_kitten_names())
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user