1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
#!/usr/bin/env python
# License: GPLv3 Copyright: 2025, Kovid Goyal <kovid at kovidgoyal.net>
import re
import sys
from kitty.conf.types import Definition
from kitty.constants import appname
from kitty.simple_cli_definitions import CONFIG_HELP, get_option_maps, grab_keyboard_docs, panel_options_spec, parse_option_spec
help_text = 'A quick access terminal window that you can bring up instantly with a keypress or a command.'
definition = Definition(
'!kittens.quick_access_terminal',
)
agr = definition.add_group
egr = definition.end_group
opt = definition.add_option
panel_opts = get_option_maps(parse_option_spec(panel_options_spec())[0])[0]
def migrate_help(x: str) -> str:
def sub(m: re.Match[str]) -> str:
return f':opt:`{m.group(1)}`'
ans = re.sub(r':option:`--(\S+?)`', sub, x)
return ans.replace('Use the special value :code:`list`', 'Run :code:`kitten panel --output-name list`')
def help_of(x: str) -> str:
return migrate_help(panel_opts[x].help)
agr('qat', 'Window appearance')
opt('lines', '25', long_text=panel_opts['lines'].help)
opt('columns', '80', long_text=panel_opts['columns'].help)
opt('edge', 'top', choices=panel_opts['edge'].choices, long_text=help_of('edge'))
opt('background_opacity', '0.85', option_type='unit_float', long_text='''
The background opacity of the window. This works the same as the kitty
option of the same name, it is present here as it has a different
default value for the quick access terminal.
''')
opt('hide_on_focus_loss', 'no', option_type='to_bool', long_text='''
Hide the window when it loses keyboard focus automatically. Using this option
will force :opt:`focus_policy` to :code:`on-demand`.
''')
opt('grab_keyboard', 'no', option_type='to_bool', long_text=grab_keyboard_docs)
opt('margin_left', '0', option_type='int', long_text=help_of('margin_left'))
opt('margin_right', '0', option_type='int', long_text=help_of('margin_right'))
opt('margin_top', '0', option_type='int', long_text=help_of('margin_top'))
opt('margin_bottom', '0', option_type='int', long_text=help_of('margin_bottom'))
opt('+kitty_conf', '',
long_text='Path to config file to use for kitty when drawing the window. Can be specified multiple times. By default, the'
' normal kitty.conf is used. Relative paths are resolved with respect to the kitty config directory.'
)
opt('+kitty_override', '', long_text='Override individual kitty configuration options, can be specified multiple times.'
' Syntax: :italic:`kitty_override name=value`. For example: :code:`kitty_override font_size=20`.'
)
opt('app_id', f'{appname}-quick-access',
long_text='On Wayland set the :italic:`namespace` of the layer shell surface.'
' On X11 set the WM_CLASS assigned to the quick access window. (Linux only)')
opt('output_name', '', long_text=help_of('output_name'))
opt('start_as_hidden', 'no', option_type='to_bool',
long_text='Whether to start the quick access terminal hidden. Useful if you are starting it as part of system startup.')
opt('focus_policy', 'exclusive', choices=panel_opts['focus_policy'].choices, long_text=help_of('focus_policy'))
def options_spec() -> str:
return f'''
--config -c
type=list
completion=type:file ext:conf group:"Config files" kwds:none,NONE
{CONFIG_HELP.format(conf_name='quick-access-terminal', appname=appname)}
--override -o
type=list
Override individual configuration options, can be specified multiple times.
Syntax: :italic:`name=value`. For example: :italic:`-o lines=12`
--detach
type=bool-set
Detach from the controlling terminal, if any, running in an independent child process,
the parent process exits immediately.
--detached-log
Path to a log file to store STDOUT/STDERR when using :option:`--detach`
--instance-group
default=quick-access
The unique name of this quick access terminal Use a different name if you want multiple such terminals.
--debug-rendering
type=bool-set
For debugging interactions with the compositor/window manager.
--debug-input
type=bool-set
For debugging interactions with the compositor/window manager.
'''
def main(args: list[str]) -> None:
raise SystemExit('This kitten should be run as: kitten quick-access-terminal')
if __name__ == '__main__':
main(sys.argv)
elif __name__ == '__doc__':
cd: dict = sys.cli_docs # type: ignore
cd['usage'] = '[cmdline-to-run ...]'
cd['options'] = options_spec
cd['help_text'] = help_text
cd['short_desc'] = help_text
elif __name__ == '__conf__':
sys.options_definition = definition # type: ignore
|