示例#1
0
文件: prewarm.py 项目: agriffis/kitty
def fork_prewarm_process(opts: Options,
                         use_exec: bool = False) -> Optional[PrewarmProcess]:
    stdin_read, stdin_write = safe_pipe()
    stdout_read, stdout_write = safe_pipe()
    death_notify_read, death_notify_write = safe_pipe()
    if use_exec:
        import subprocess
        tp = subprocess.Popen([
            kitty_exe(), '+runpy',
            f'from kitty.prewarm import exec_main; exec_main({stdin_read}, {stdout_write}, {death_notify_write})'
        ],
                              pass_fds=(stdin_read, stdout_write,
                                        death_notify_write))
        child_pid = tp.pid
        tp.returncode = 0  # prevent a warning when the popen object is deleted with the process still running
    else:
        child_pid = os.fork()
    if child_pid:
        # master
        os.close(stdin_read)
        os.close(stdout_write)
        os.close(death_notify_write)
        p = PrewarmProcess(child_pid, stdin_write, stdout_read,
                           death_notify_read)
        if use_exec:
            p.reload_kitty_config()
        return p
    # child
    os.close(stdin_write)
    os.close(stdout_read)
    os.close(death_notify_read)
    set_options(opts)
    exec_main(stdin_read, stdout_write, death_notify_write)
    raise SystemExit(0)
示例#2
0
def run_kitten(kitten: str, run_name: str = '__main__') -> None:
    import runpy
    original_kitten_name = kitten
    kitten = resolved_kitten(kitten)
    set_debug(kitten)
    if kitten in all_kitten_names():
        runpy.run_module(f'kittens.{kitten}.main', run_name=run_name)
        return
    # Look for a custom kitten
    if not kitten.endswith('.py'):
        kitten += '.py'
    from kitty.constants import config_dir
    path = path_to_custom_kitten(config_dir, kitten)
    if not os.path.exists(path):
        print('Available builtin kittens:', file=sys.stderr)
        for kitten in all_kitten_names():
            print(kitten, file=sys.stderr)
        raise SystemExit(f'No kitten named {original_kitten_name}')
    m = runpy.run_path(path,
                       init_globals={
                           'sys': sys,
                           'os': os
                       },
                       run_name='__run_kitten__')
    from kitty.fast_data_types import set_options
    try:
        m['main'](sys.argv)
    finally:
        set_options(None)
示例#3
0
 def create_screen(self, cols=5, lines=5, scrollback=5, cell_width=10, cell_height=20, options=None):
     final_options = {'scrollback_pager_history_size': 1024, 'click_interval': 0.5}
     if options:
         final_options.update(options)
     options = Options(merge_configs(defaults._asdict(), final_options))
     set_options(options)
     c = Callbacks()
     return Screen(c, lines, cols, scrollback, cell_width, cell_height, 0, c)
示例#4
0
 def set_options(self, options=None):
     final_options = {'scrollback_pager_history_size': 1024, 'click_interval': 0.5}
     if options:
         final_options.update(options)
     options = Options(merge_configs(defaults._asdict(), final_options))
     finalize_keys(options)
     finalize_mouse_mappings(options)
     set_options(options)
     return options
示例#5
0
文件: utils.py 项目: kovidgoyal/kitty
def set_kitty_opts(
    paths: Sequence[str], overrides: Sequence[str] = ()) -> 'Options':
    from kitty.config import load_config
    from kitty.fast_data_types import set_options
    from kitty.utils import suppress_error_logging
    with suppress_error_logging():
        opts = load_config(*paths, overrides=overrides or None)
        set_options(opts)
        return opts
示例#6
0
 def create_screen(self,
                   cols=5,
                   lines=5,
                   scrollback=5,
                   cell_width=10,
                   cell_height=20,
                   options={}):
     options = Options(merge_configs(defaults._asdict(), options))
     set_options(options)
     c = Callbacks()
     return Screen(c, lines, cols, scrollback, cell_width, cell_height, 0,
                   c)
示例#7
0
文件: utils.py 项目: kovidgoyal/kitty
def kitty_opts() -> 'Options':
    from kitty.fast_data_types import get_options, set_options
    try:
        ans = cast(Optional['Options'], get_options())
    except RuntimeError:
        ans = None
    if ans is None:
        from kitty.cli import create_default_opts
        from kitty.utils import suppress_error_logging
        with suppress_error_logging():
            ans = create_default_opts()
            set_options(ans)
    return ans
示例#8
0
 def create_screen(self,
                   cols=5,
                   lines=5,
                   scrollback=5,
                   cell_width=10,
                   cell_height=20,
                   options=None):
     if options is None:
         options = {'scrollback_pager_history_size': 1024}
     options = Options(merge_configs(defaults._asdict(), options))
     set_options(options)
     c = Callbacks()
     return Screen(c, lines, cols, scrollback, cell_width, cell_height, 0,
                   c)
示例#9
0
文件: render.py 项目: kosmaks/kitty
def setup_for_testing(family='monospace', size=11.0, dpi=96.0):
    opts = defaults._replace(font_family=family)
    set_options(opts)
    sprites = {}

    def send_to_gpu(x, y, z, data):
        sprites[(x, y, z)] = data

    sprite_map_set_limits(100000, 100)
    set_send_sprite_to_gpu(send_to_gpu)
    set_logical_dpi(dpi, dpi)
    cell_width, cell_height = set_font_family(opts, override_font_size=size)
    prerender()
    return sprites, cell_width, cell_height
示例#10
0
文件: prewarm.py 项目: agriffis/kitty
def exec_main(stdin_read: int, stdout_write: int,
              death_notify_write: int) -> None:
    os.setsid()
    # SIGUSR1 is used for reloading kitty config, we rely on the parent process
    # to inform us of that
    signal.signal(signal.SIGUSR1, signal.SIG_IGN)
    signal.siginterrupt(signal.SIGUSR1, False)
    os.set_inheritable(stdin_read, False)
    os.set_inheritable(stdout_write, False)
    os.set_inheritable(death_notify_write, False)
    running_in_kitty(False)

    try:
        main(stdin_read, stdout_write, death_notify_write)
    finally:
        set_options(None)
示例#11
0
    def __enter__(self) -> Tuple[Dict[Tuple[int, int, int], bytes], int, int]:
        opts = defaults._replace(font_family=self.family, font_size=self.size)
        set_options(opts)
        sprites = {}

        def send_to_gpu(x: int, y: int, z: int, data: bytes) -> None:
            sprites[(x, y, z)] = data

        sprite_map_set_limits(100000, 100)
        set_send_sprite_to_gpu(send_to_gpu)
        try:
            set_font_family(opts)
            cell_width, cell_height = create_test_font_group(self.size, self.dpi, self.dpi)
            return sprites, cell_width, cell_height
        except Exception:
            set_send_sprite_to_gpu(None)
            raise
示例#12
0
    def __enter__(self):
        from collections import OrderedDict
        opts = defaults._replace(font_family=self.family, font_size=self.size)
        set_options(opts)
        sprites = OrderedDict()

        def send_to_gpu(x, y, z, data):
            sprites[(x, y, z)] = data

        sprite_map_set_limits(100000, 100)
        set_send_sprite_to_gpu(send_to_gpu)
        try:
            set_font_family(opts)
            cell_width, cell_height = create_test_font_group(
                self.size, self.dpi, self.dpi)
            return sprites, cell_width, cell_height
        except Exception:
            set_send_sprite_to_gpu(None)
            raise
示例#13
0
def edit_config_file(args: List[str]) -> None:
    from kitty.cli import create_default_opts
    from kitty.fast_data_types import set_options
    from kitty.utils import edit_config_file as f
    set_options(create_default_opts())
    f()
示例#14
0
 def tearDown(self):
     set_options(None)
示例#15
0
def handle_result(kargs, answer, target_window_id, boss):
    args, rest = cli.parse_args([])
    opts = cli.create_opts(args)
    boss.keymap = opts.keymap.copy()
    fast_data_types.set_options(opts, constants.is_wayland(), args.debug_rendering,
                                args.debug_font_fallback)