diff --git a/docs/kittens/custom.rst b/docs/kittens/custom.rst index f6d84c0f0..7c39e10ef 100644 --- a/docs/kittens/custom.rst +++ b/docs/kittens/custom.rst @@ -298,108 +298,6 @@ So if you run kitty from another kitty instance, the output will be visible in the first kitty instance. -Adding options to kittens ----------------------------- - -If you would like to use kitty's config framework to make your kittens -configurable, you will need some boilerplate. Put the following files in the -directory of your kitten. - -:file:`kitten_options_definition.py` - -.. code-block:: python - - from kitty.conf.types import Action, Definition - - definition = Definition( - '!kitten_options_utils', - Action( - 'map', 'parse_map', - {'key_definitions': 'kitty.conf.utils.KittensKeyMap'}, - ['kitty.types.ParsedShortcut', 'kitty.conf.utils.KeyAction'] - ), - ) - - agr = definition.add_group - egr = definition.end_group - opt = definition.add_option - map = definition.add_map - - # main options {{{ - agr('main', 'Main') - - opt('some_option', '33', - option_type='some_option_parser', - long_text=''' - Help text for this option - ''' - ) - egr() # }}} - - # shortcuts {{{ - agr('shortcuts', 'Keyboard shortcuts') - - map('Quit', 'quit q quit') - egr() # }}} - - -:file:`kitten_options_utils.py` - -.. code-block:: python - - from kitty.conf.utils import KittensKeyDefinition, key_func, parse_kittens_key - - func_with_args, args_funcs = key_func() - FuncArgsType = Tuple[str, Sequence[Any]] - - def some_option_parser(val: str) -> int: - return int(val) + 3000 - - def parse_map(val: str) -> Iterable[KittensKeyDefinition]: - x = parse_kittens_key(val, args_funcs) - if x is not None: - yield x - -Then run:: - - kitty +runpy 'from kitty.conf.generate import main; main()' /path/to/kitten_options_definition.py - -You can parse and read the options in your kitten using the following code: - -.. code-block:: python - - from .kitten_options_types import Options, defaults - from kitty.conf.utils import load_config as _load_config, parse_config_base - from typing import Optional, Iterable, Dict, Any - - def load_config(*paths: str, overrides: Optional[Iterable[str]] = None) -> Options: - from .kitten_options_parse import ( - create_result_dict, merge_result_dicts, parse_conf_item - ) - - def parse_config(lines: Iterable[str]) -> Dict[str, Any]: - ans: Dict[str, Any] = create_result_dict() - parse_config_base( - lines, - parse_conf_item, - ans, - ) - return ans - - overrides = tuple(overrides) if overrides is not None else () - opts_dict, found_paths = _load_config(defaults, parse_config, merge_result_dicts, *paths, overrides=overrides) - opts = Options(opts_dict) - opts.config_paths = found_paths - opts.all_config_paths = paths - opts.config_overrides = overrides - return opts - -See `the code -`__ -for the builtin :doc:`diff kitten ` for examples of creating more -options and keyboard shortcuts. - - Developing builtin kittens for inclusion with kitty ----------------------------------------------------------