This commit is contained in:
Kovid Goyal 2025-05-20 11:16:49 +05:30
parent 868e0c6b97
commit 197cfbc1b1
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C
3 changed files with 30 additions and 36 deletions

View file

@ -28,7 +28,7 @@ from kitty.fast_data_types import (
set_layer_shell_config,
toggle_os_window_visibility,
)
from kitty.simple_cli_definitions import build_panel_cli_spec
from kitty.simple_cli_definitions import panel_options_spec
from kitty.types import LayerShellConfig
from kitty.typing_compat import BossType
from kitty.utils import log_error
@ -40,7 +40,7 @@ usage = '[cmdline-to-run ...]'
def panel_kitten_options_spec() -> str:
if not hasattr(panel_kitten_options_spec, 'ans'):
setattr(panel_kitten_options_spec, 'ans', build_panel_cli_spec({}))
setattr(panel_kitten_options_spec, 'ans', panel_options_spec())
ans: str = getattr(panel_kitten_options_spec, 'ans')
return ans

View file

@ -1,11 +1,12 @@
#!/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, grab_keyboard_docs
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.'
@ -17,22 +18,27 @@ 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='''
The number of lines shown in the window, when the window is along the top or bottom edges of the screen.
If it has the suffix :code:`px` then it sets the height of the window in pixels instead of lines.
''',)
opt('lines', '25', long_text=panel_opts['lines']['help'])
opt('columns', '80',
long_text='''
The number of columns shown in the window, when the window is along the left or right edges of the screen.
If it has the suffix :code:`px` then it sets the width of the window in pixels instead of columns.
''',)
opt('columns', '80', long_text=panel_opts['columns']['help'])
opt('edge', 'top', choices=('top', 'bottom', 'left', 'right'),
long_text='Which edge of the screen to place the window along')
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
@ -47,17 +53,13 @@ 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='Set the left margin for the window, in pixels. Has no effect for windows on the right edge of the screen.')
opt('margin_left', '0', option_type='int', long_text=help_of('margin_left'))
opt('margin_right', '0', option_type='int',
long_text='Set the right margin for the window, in pixels. Has no effect for windows on the left edge of the screen.')
opt('margin_right', '0', option_type='int', long_text=help_of('margin_right'))
opt('margin_top', '0', option_type='int',
long_text='Set the top margin for the window, in pixels. Has no effect for windows on the bottom edge of the screen.')
opt('margin_top', '0', option_type='int', long_text=help_of('margin_top'))
opt('margin_bottom', '0', option_type='int',
long_text='Set the bottom margin for the window, in pixels. Has no effect for windows on the top edge of the screen.')
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'
@ -73,23 +75,12 @@ opt('app_id', f'{appname}-quick-access',
' On X11 set the WM_CLASS assigned to the quick access window. (Linux only)')
opt('output_name', '', long_text='''
The panel can only be displayed on a single monitor (output) at a time. This allows
you to specify which output is used, by name. If not specified the compositor will choose an
output automatically, typically the last output the user interacted with or the primary monitor.
You can get a list of available outputs by running: :code:`kitten panel --output-name list`.
''')
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=('exclusive', 'on-demand'), long_text='''
How to manage window focus. A value of :code:`exclusive` means prevent other windows from getting focus.
However, whether this works is entirely dependent on the compositor/desktop environment.
It does not have any effect on macOS and KDE, for example. Note that on sway using :code:`on-demand` means
the compositor will not focus the window when it appears until you click on it, which is why the default is set
to :code:`exclusive`.
''')
opt('focus_policy', 'exclusive', choices=panel_opts['focus_policy']['choices'], long_text=help_of('focus_policy'))

View file

@ -762,4 +762,7 @@ For internal debugging use.
'''.format(appname=appname, listen_on_defn=listen_on_defn, grab_keyboard_docs=grab_keyboard_docs, **d)
def panel_options_spec() -> str:
return build_panel_cli_spec(panel_defaults)
# }}}