Make reload_conf_in_all_kitties re-useable

This commit is contained in:
Kovid Goyal 2021-08-08 09:38:29 +05:30
parent ca9143bebc
commit 5a47e0d2e4
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 38 additions and 35 deletions

View File

@ -12,17 +12,15 @@ import signal
import tempfile
import zipfile
from contextlib import suppress
from typing import (
Any, Callable, Dict, Iterable, Iterator, List, Match, Optional, Tuple,
Union
)
from typing import Any, Callable, Dict, Iterator, Match, Optional, Tuple, Union
from urllib.error import HTTPError
from urllib.request import Request, urlopen
from kitty.config import atomic_save, parse_config
from kitty.constants import cache_dir, config_dir, is_macos
from kitty.constants import cache_dir, config_dir
from kitty.options.types import Options as KittyOptions
from kitty.rgb import Color
from kitty.utils import reload_conf_in_all_kitties
from ..choose.match import match
@ -30,28 +28,6 @@ MARK_BEFORE = '\033[33m'
MARK_AFTER = '\033[39m'
def is_kitty_gui(cmd: List[str]) -> bool:
if not cmd:
return False
if os.path.basename(cmd[0]) != 'kitty':
return False
if len(cmd) == 1:
return True
if '+' in cmd or '@' in cmd or cmd[1].startswith('+') or cmd[1].startswith('@'):
return False
return True
def get_all_processes() -> Iterable[int]:
if is_macos:
from kitty.fast_data_types import get_all_processes as f
yield from f()
else:
for c in os.listdir('/proc'):
if c.isdigit():
yield int(c)
def patch_conf(raw: str) -> str:
addition = '# BEGIN_KITTY_THEME\ninclude current-theme.conf\n# END_KITTY_THEME'
nraw, num = re.subn(r'^# BEGIN_KITTY_THEME.+?# END_KITTY_THEME', addition, raw, flags=re.MULTILINE | re.DOTALL)
@ -296,14 +272,7 @@ class Theme:
if 'KITTY_PID' in os.environ:
os.kill(int(os.environ['KITTY_PID']), signal.SIGUSR1)
elif reload_in == 'all':
from kitty.child import cmdline_of_process # type: ignore
for pid in get_all_processes():
try:
cmd = cmdline_of_process(pid)
except Exception:
continue
if cmd and is_kitty_gui(cmd):
os.kill(pid, signal.SIGUSR1)
reload_conf_in_all_kitties()
class Themes:

View File

@ -717,3 +717,37 @@ def get_new_os_window_size(
w = width or metrics['width']
h = height or metrics['height']
return w, h
def get_all_processes() -> Iterable[int]:
if is_macos:
from kitty.fast_data_types import get_all_processes as f
yield from f()
else:
for c in os.listdir('/proc'):
if c.isdigit():
yield int(c)
def is_kitty_gui_cmdline(*cmd: str) -> bool:
if not cmd:
return False
if os.path.basename(cmd[0]) != 'kitty':
return False
if len(cmd) == 1:
return True
if '+' in cmd or '@' in cmd or cmd[1].startswith('+') or cmd[1].startswith('@'):
return False
return True
def reload_conf_in_all_kitties() -> None:
import signal
from kitty.child import cmdline_of_process # type: ignore
for pid in get_all_processes():
try:
cmd = cmdline_of_process(pid)
except Exception:
continue
if cmd and is_kitty_gui_cmdline(*cmd):
os.kill(pid, signal.SIGUSR1)