示例#1
0
文件: main.py 项目: phongnh/kitty
 def do_window_resize(self,
                      is_decrease: bool = False,
                      is_horizontal: bool = True,
                      reset: bool = False,
                      multiplier: int = 1) -> None:
     resize_window = command_for_name('resize_window')
     increment = self.opts.horizontal_increment if is_horizontal else self.opts.vertical_increment
     increment *= multiplier
     if is_decrease:
         increment *= -1
     axis = 'reset' if reset else (
         'horizontal' if is_horizontal else 'vertical')
     cmdline = [
         resize_window.name, '--self', f'--increment={increment}',
         '--axis=' + axis
     ]
     opts, items = parse_subcommand_cli(resize_window, cmdline)
     payload = resize_window.message_to_kitty(global_opts, opts, items)
     send = {
         'cmd': resize_window.name,
         'version': version,
         'payload': payload,
         'no_response': False
     }
     self.write(encode_send(send))
示例#2
0
def generate_stub() -> None:
    from .cli import parse_option_spec, as_type_stub
    from .conf.definition import save_type_stub
    text = 'import typing\n\n\n'

    def do(otext=None,
           cls: str = 'CLIOptions',
           extra_fields: Sequence[str] = ()):
        nonlocal text
        text += as_type_stub(*parse_option_spec(otext),
                             class_name=cls,
                             extra_fields=extra_fields)

    do(extra_fields=('args: typing.List[str]', ))

    from .launch import options_spec
    do(options_spec(), 'LaunchCLIOptions')

    from .remote_control import global_options_spec
    do(global_options_spec(),
       'RCOptions',
       extra_fields=['no_command_response: typing.Optional[bool]'])

    from kittens.ask.main import option_text
    do(option_text(), 'AskCLIOptions')

    from kittens.remote_file.main import option_text
    do(option_text(), 'RemoteFileCLIOptions')

    from kittens.clipboard.main import OPTIONS
    do(OPTIONS(), 'ClipboardCLIOptions')

    from kittens.diff.main import OPTIONS
    do(OPTIONS(), 'DiffCLIOptions')

    from kittens.hints.main import OPTIONS
    do(OPTIONS(), 'HintsCLIOptions')

    from kittens.icat.main import options_spec
    do(options_spec(), 'IcatCLIOptions')

    from kittens.panel.main import OPTIONS
    do(OPTIONS(), 'PanelCLIOptions')

    from kittens.resize_window.main import OPTIONS
    do(OPTIONS(), 'ResizeCLIOptions')

    from kittens.show_error.main import OPTIONS
    do(OPTIONS(), 'ErrorCLIOptions')

    from kittens.unicode_input.main import OPTIONS
    do(OPTIONS(), 'UnicodeCLIOptions')

    from kitty.rc.base import all_command_names, command_for_name
    for cmd_name in all_command_names():
        cmd = command_for_name(cmd_name)
        if cmd.options_spec:
            do(cmd.options_spec, cmd.__class__.__name__ + 'RCOptions')

    save_type_stub(text, __file__)
示例#3
0
def write_cli_docs(all_kitten_names: Iterable[str]) -> None:
    from kitty.cli import option_spec_as_rst
    from kitty.launch import options_spec as launch_options_spec
    with open('generated/launch.rst', 'w') as f:
        f.write(
            option_spec_as_rst(appname='launch',
                               ospec=launch_options_spec,
                               heading_char='_',
                               message='''\
Launch an arbitrary program in a new kitty window/tab. Note that
if you specify a program-to-run you can use the special placeholder
:code:`@selection` which will be replaced by the current selection.
'''))
    with open('generated/cli-kitty.rst', 'w') as f:
        f.write(
            option_spec_as_rst(appname='kitty').replace(
                'kitty --to', 'kitty @ --to'))
    as_rst = partial(option_spec_as_rst, heading_char='_')
    from kitty.rc.base import all_command_names, command_for_name
    from kitty.remote_control import cli_msg, global_options_spec
    with open('generated/cli-kitty-at.rst', 'w') as f:
        p = partial(print, file=f)
        p('kitty @')
        p('-' * 80)
        p('.. program::', 'kitty @')
        p('\n\n' + as_rst(global_options_spec,
                          message=cli_msg,
                          usage='command ...',
                          appname='kitty @'))
        from kitty.rc.base import cli_params_for
        for cmd_name in sorted(all_command_names()):
            func = command_for_name(cmd_name)
            p(f'.. _at_{func.name}:\n')
            p('kitty @', func.name)
            p('-' * 120)
            p('.. program::', 'kitty @', func.name)
            p('\n\n' + as_rst(*cli_params_for(func)))
    from kittens.runner import get_kitten_cli_docs
    for kitten in all_kitten_names:
        data = get_kitten_cli_docs(kitten)
        if data:
            with open(f'generated/cli-kitten-{kitten}.rst', 'w') as f:
                p = partial(print, file=f)
                p('.. program::', 'kitty +kitten', kitten)
                p('\nSource code for', kitten)
                p('-' * 72)
                p(f'\nThe source code for this kitten is `available on GitHub <https://github.com/kovidgoyal/kitty/tree/master/kittens/{kitten}>`_.'
                  )
                p('\nCommand Line Interface')
                p('-' * 72)
                p('\n\n' +
                  option_spec_as_rst(data['options'],
                                     message=data['help_text'],
                                     usage=data['usage'],
                                     appname=f'kitty +kitten {kitten}',
                                     heading_char='^'))
 def change_theme(self, theme_name):
     """ Performs the theme change """
     set_colors = command_for_name("set_colors")
     cmdline = [set_colors.name, "-a", "-c", theme_name]
     opts, items = parse_subcommand_cli(set_colors, cmdline)
     payload = set_colors.message_to_kitty(self.global_opts, opts, items)
     send = {
         "cmd": set_colors.name,
         "version": version,
         "payload": payload,
         "no_response": False,
     }
     self.write(encode_send(send))
     remove(expanduser("~/.config/kitty/colors.conf"))
     symlink(theme_name, expanduser("~/.config/kitty/colors.conf"))
示例#5
0
def write_remote_control_protocol_docs() -> None:  # {{{
    from kitty.rc.base import (RemoteCommand, all_command_names,
                               command_for_name)
    field_pat = re.compile(r'\s*([a-zA-Z0-9_+]+)\s*:\s*(.+)')

    def format_cmd(p: Callable[..., None], name: str,
                   cmd: RemoteCommand) -> None:
        p(name)
        p('-' * 80)
        lines = (cmd.__doc__ or '').strip().splitlines()
        fields = []
        for line in lines:
            m = field_pat.match(line)
            if m is None:
                p(line)
            else:
                fields.append((m.group(1), m.group(2)))
        if fields:
            p('\nFields are:\n')
            for (name, desc) in fields:
                if '+' in name:
                    title = name.replace('+', ' (required)')
                else:
                    title = name
                    defval = cmd.get_default(name.replace('-', '_'), cmd)
                    if defval is not cmd:
                        title = f'{title} (default: {defval})'
                    else:
                        title = f'{title} (optional)'
                p(f':code:`{title}`')
                p(' ', desc), p()
        p(), p()

    with open('generated/rc.rst', 'w') as f:
        p = partial(print, file=f)
        for name in sorted(all_command_names()):
            cmd = command_for_name(name)
            if not cmd.__doc__:
                continue
            name = name.replace('_', '-')
            format_cmd(p, name, cmd)
示例#6
0
def generate_stub() -> None:
    from .cli import parse_option_spec, as_type_stub
    from .conf.utils import save_type_stub
    text = 'import typing\n\n\n'

    def do(otext=None,
           cls: str = 'CLIOptions',
           extra_fields: Sequence[str] = ()):
        nonlocal text
        text += as_type_stub(*parse_option_spec(otext),
                             class_name=cls,
                             extra_fields=extra_fields)

    do(extra_fields=('args: typing.List[str]', ))

    from .launch import options_spec
    do(options_spec(), 'LaunchCLIOptions')

    from .remote_control import global_options_spec
    do(global_options_spec(), 'RCOptions')

    from kittens.ask.main import option_text
    do(option_text(), 'AskCLIOptions')

    from kittens.remote_file.main import option_text
    do(option_text(), 'RemoteFileCLIOptions')

    from kittens.clipboard.main import OPTIONS
    do(OPTIONS(), 'ClipboardCLIOptions')

    from kittens.show_key.main import OPTIONS
    do(OPTIONS(), 'ShowKeyCLIOptions')

    from kittens.diff.main import OPTIONS
    do(OPTIONS(), 'DiffCLIOptions')

    from kittens.hints.main import OPTIONS
    do(OPTIONS(), 'HintsCLIOptions')

    from kittens.broadcast.main import OPTIONS
    do(OPTIONS(), 'BroadcastCLIOptions')

    from kittens.icat.main import options_spec
    do(options_spec(), 'IcatCLIOptions')

    from kittens.query_terminal.main import options_spec
    do(options_spec(), 'QueryTerminalCLIOptions')

    from kittens.panel.main import OPTIONS
    do(OPTIONS(), 'PanelCLIOptions')

    from kittens.resize_window.main import OPTIONS
    do(OPTIONS(), 'ResizeCLIOptions')

    from kittens.show_error.main import OPTIONS
    do(OPTIONS(), 'ErrorCLIOptions')

    from kittens.unicode_input.main import OPTIONS
    do(OPTIONS(), 'UnicodeCLIOptions')

    from kittens.themes.main import OPTIONS
    do(OPTIONS(), 'ThemesCLIOptions')

    from kittens.transfer.main import option_text as OPTIONS
    do(OPTIONS(), 'TransferCLIOptions')

    from kittens.ssh.copy import option_text as OPTIONS
    do(OPTIONS(), 'CopyCLIOptions')

    from kitty.rc.base import all_command_names, command_for_name
    for cmd_name in all_command_names():
        cmd = command_for_name(cmd_name)
        if cmd.options_spec:
            do(cmd.options_spec, f'{cmd.__class__.__name__}RCOptions')

    save_type_stub(text, __file__)