| Index | index by Group | index by Distribution | index by Vendor | index by creation date | index by Name | Mirrors | Help | Search |
| Name: python313-click-extra | Distribution: openSUSE Tumbleweed |
| Version: 8.6.2 | Vendor: openSUSE |
| Release: 1.1 | Build date: Tue Jul 28 06:57:48 2026 |
| Group: Unspecified | Build host: reproducible |
| Size: 2960940 | Source RPM: python-click-extra-8.6.2-1.1.src.rpm |
| Packager: http://bugs.opensuse.org | |
| Url: https://github.com/kdeldycke/click-extra | |
| Summary: Drop-in replacement for Click to make user-friendly and colorful CLI | |
🌈 Drop-in replacement for Click to make user-friendly and colorful CLI
GPL-2.0-or-later
* Tue Jul 28 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 8.6.2:
* Treat an unreaped zombie as a dead process in the run_cli
process-group teardown tests, so they pass in a build sandbox with
no init to reap orphans (like Alpine's abuild container).
- update to 8.6.1:
* Deprecated: ClickExtraConfig, PrebakeConfig and TestSuiteConfig
resolve again from the top-level click_extra namespace, warning
and redirecting to click_extra.config; removed in 9.0.0.
* Deprecated: The click_extra.test_plan module and the top-level
TestPlanConfig, parse_test_plan, run_test_plan and
DEFAULT_TEST_PLAN names warn and resolve to their test_suite
replacements; removed in 9.0.0.
* Deprecated: prebake_dunder, prebake_version and
discover_package_init_files resolve again from
click_extra.version, warning and redirecting to
click_extra.prebake; removed in 9.0.0.
* Deprecated: Importing INDENT, PROMPT, args_cleanup or
format_cli_prompt from click_extra.testing now warns and
redirects to click_extra.execution; removed in 9.0.0.
* Ship the test suite and the docs and CI files it reads in the
PyPI sdist, so downstream packagers can build and test without
a Git checkout.
* Add a [tool.setuptools] shim so builds that fall back to
setuptools still bundle the themes.toml and py.typed data
files.
* Fix the source line reported in click:run variable-conflict
errors when a MyST directive's body ends in blank lines.
* Fix the MkDocs test tree erroring instead of self-skipping when
mkdocs-click is absent but mkdocs and pymdown-extensions are
present.
* Mon Jul 27 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 8.6.0:
* Add OperationTrail, the batch-reporting companion of
run_jobs/run_lanes: each operation leaves a persistent ✓/✘ line
and the batch closes with a timed summary. Adds the trail_glyph
and trail_line helpers.
* Add column-order and row-order options to {matrix} blocks
(newest-first/oldest-first), defaulting both axes to
newest-first so the most recent compatibility information reads
from the upper-left corner.
* Refresh each python:render :mirror: block through click-extra
refresh-directives with the source file's directory on
sys.path, so a block importing a sibling helper module resolves
offline as it does at build time.
* Fix test-suite --command resolving a venv's symlinked Python
interpreter (.venv/bin/python) to its base target, silently
dropping the venv's installed packages.
* Upload coverage from the once-only test job to Codecov, and
move the package-install CLI checks to a dedicated CI job
skipped on pull requests.
* Thu Jul 23 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 8.5.0:
* Breaking: Rename the --show-params flag to --params. Its
parameter ID changes from show_params to params, its
environment variable suffix from _SHOW_PARAMS to _PARAMS, and
click-extra wrap --show-params becomes click-extra wrap
- -params. ShowParamsOption and @show_params_option keep their
names.
* Add the click_extra.sphinx.myst_docstrings Sphinx extension:
write Python docstrings in MyST markdown, transparently
converted to reST at build time, keeping sphinx.ext.autodoc and
sphinx_autodoc_typehints unmodified. Absorbed from
repomatic.myst_docstrings.
* Add a convert-to-myst subcommand migrating a package's reST
docstrings and comments to MyST in place, idempotently: string
literals and other runtime code pass through byte-for-byte.
Absorbed from repomatic, along with the sphinx-apidoc stub
converter click_extra.rst_to_myst and the public
convert_source().
* Add a :mirror: flag to the python:render Sphinx directive: the
block's generated Markdown is mirrored into the source .md
between <!-- mirror --> markers, reviewable in raw diffs;
builds regenerate it in memory, never writing to the source.
* Extend click-extra refresh-directives to also refresh
python:render :mirror: regions, alongside {matrix} blocks, by
executing each mirror block's Python.
* Add a start_new_session option to run_cli(): the child leads
its own POSIX session and process group, and every kill path
signals the whole group, so grandchildren are reaped. Off by
default to keep interactive prompts working; no-op on Windows.
* Add a themes demo subcommand (click-extra themes) printing a
sample help screen rendered under every built-in theme, for a
quick terminal preview of all palettes.
* Promote ctx.render_table and ctx.print_table to methods on
click_extra.Context, reading the --table-format and --sort-by
selections from the context's shared meta so they work from any
subcommand. TableFormatOption and SortByOption remain drop-ins
on click and cloup commands; ctx.render_table now honors
- -sort-by.
* Warn on configuration keys unknown to the config_schema when
the section is schema-only, instead of dropping them silently;
strict mode still raises, and sections mixing CLI parameters
stay silent. Exposed as warn_unknown on make_schema_callable()
and schema_warn_unknown on run_config_validation().
* Convert all of click-extra's own docstrings and comments from
reST to MyST.
* Fix a group-level --theme not reaching the CLI wrapped by
click-extra wrap: the target's help now renders in the chosen
palette instead of falling back to the default dark theme.
* Fix click-extra refresh-directives rewriting {matrix} examples
nested inside longer code fences: documented illustrations are
copied verbatim, never refreshed or executed.
* Thu Jul 16 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 8.4.0:
* Breaking: Remove the historical from click_extra.version import
prebake_* compatibility imports; the pre-baking helpers are
only importable from click_extra.prebake.
* Breaking: Remove the leaked annotations and warnings entries
from the package's public API: both were star-import artifacts,
not Click, Cloup or Click Extra API.
* Breaking: Move args_cleanup, format_cli_prompt, PROMPT and
INDENT from click_extra.testing to click_extra.execution; all
but PROMPT stay importable from their historical home.
* Breaking: Remove the dead CarapaceCompletion.is_empty() method
and the deprecated alert parser's current_depth().
* Add a --tree flag to the default option set: it prints the
whole hierarchy of nested subcommands as a tree (names,
aliases, operand metavars and one-line descriptions), then
exits. The new click_extra.tree module exposes
render_command_tree(), TreeOption and @tree_option.
* Add a --tree mode to click-extra wrap: prints the subcommand
tree of any foreign Click CLI without running it, with the same
target resolution as --show-params and --man.
* Help screens and the --tree view now style subcommand aliases
with the alias theme slot and their parenthetical punctuation
with alias_secondary; aliases used to take the subcommand slot
and the punctuation stayed plain.
* Table formats able to express styles natively (html,
unsafehtml, mediawiki, textile, jira and the four latex*
variants) now translate the ANSI codes carried by cells and
headers to the format's own styling markup instead of stripping
them.
* An explicit --color no longer injects raw ANSI codes into the
markup formats supporting native styling; the raw passthrough
escape hatch remains for the formats without.
* Add split_ansi() and render_ansi() plus the ansi_to_html(),
ansi_to_jira(), ansi_to_latex() and ansi_to_textile()
converters to click_extra.styling.
* Add run_cli(args) to click_extra.execution: a subprocess.run
work-alike that logs the invocation as a copy-pasteable prompt
line and streams the child's output to the logger as it is
produced; a per-call label tags each streamed record.
* format_cli_prompt now styles each token family with the theme
slot it holds elsewhere in a CLI's output; the binary-path
renderer behind it is public as highlight_bin_name(program).
* Add the Duration parameter type to click_extra.types: parses a
friendly duration (7 days, 12h), an ISO 8601 duration (P7D) or
an RFC 3339 timestamp into a datetime.timedelta; zero, empty
and future values parse to None.
* One --sort-by can now serve subcommands rendering heterogeneous
tables: SortByOption accepts bare column IDs resolved per
table, print_table() and render_table() headers accept
ColumnSpec instances and (label, column_id) pairs, and
column_sort_key() is public. An explicit default=() declares no
default sort.
* Add the isolated_app_dir fixture to click_extra.pytest:
repoints click.get_app_dir-based configuration discovery at a
fresh per-test directory, so in-process CLI invocations never
read the host's real configuration folder.
* Add install_interrupt_handler(ctx) and
terminate_live_processes() to click_extra.execution: the first
Ctrl+C now SIGTERMs every subprocess spawned through run_cli.
* Log records emitted while a Spinner animates on the same stream
are now printed through Spinner.echo(), on their own line above
the animation, instead of garbling the in-progress frame. Adds
active_spinner() to click_extra.spinner.
* Add temporary_env() to click_extra.envvar: a context manager
applying environment variable changes for the duration of a
block, then restoring every touched variable.
* Expose generator_tag() in click_extra.parameters: the
provenance tag stamped into generated man pages and Carapace
completion specs.
* Unify the palettes materializing the 16 ANSI colors as concrete
RGB: Style CSS output, contrast math and the first 16 slots of
the indexed palette now share the palette the documentation
renders terminal sessions with.
* select_row accepts any Mapping, not just dict, so read-only row
shapes project without a copy.
* test-suite now runs its target binaries through run_cli: each
invocation is disclosed as a themed prompt line and its output
streams live to DEBUG logs.
* print_table() now honors a --color forced on a parent group:
the raw-ANSI escape hatch used to be ignored when the color
option was not declared on the very command printing the table.
* --color/--no-color now reach output produced from background
threads: StreamHandler consults the process-wide
invocation_color() instead of click.echo's thread-local context
lookup.
* Formatter no longer mutates a record's levelname in place: a
record formatted several times no longer accumulates styling or
glued labels.
* Style.from_ansi() now parses the parameter-less reset escape
(\x1b[m) and ignores all selective reset codes (22-29, 39, 49,
55), not just the full 0 reset.
* ConfigOption.excluded_params now resolves the CLI's --help
option ID from Click at runtime instead of assuming it is named
help; the option keeps being excluded from configuration files
if Click ever renames it.
* ExtraOption.handle_parse_result now pre-records the parameter
source of every option, not just eager ones, so non-eager
callbacks and types keep introspecting their provenance on
Click 8.4.0.
* The --jobs sequential-execution warning now fires only for an
explicit auto/max request; the option's own default logs it at
info level.
* test-suite no longer crashes on non-UTF-8 binary output:
undecodable bytes are escaped into the captured stream, and the
subprocess inherits PYTHONIOENCODING=utf8.
* A test-suite case skipped by only_platforms now reports the
platforms it requires; the message used to name the current
platform.
* regex_fullmatch_line_by_line now reports a regular line
mismatch instead of crashing with an IndexError when the regex
and the checked content do not have the same number of lines.
* Add a binaries page to the documentation: a searchable,
sortable catalog of every released standalone executable with
download links, VirusTotal analyses and a detection trend
chart.
* Coverage now uploads to Codecov from one runner per OS and
Python version, on released Click and Cloup only; the Test
Analytics upload and its junit.xml artifact are dropped.
* Wed Jul 08 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 8.3.0:
* Add a click:config Sphinx directive documenting a CLI's
config_schema: a summary table plus one section per option, with
docstring, type, default, and a TOML example. Adds
schema_field_infos(), field_docstrings() and SchemaFieldInfo to
the public API.
* Disable mouse zoom on the class inheritance diagrams of the
documentation's API sections, so they no longer hijack page
scrolling; the fullscreen viewer keeps zoom.
* Add tests covering 256-color palette index 0 and empty-string
colors in Style, gated on runtime probes of Click 8.5.0's color
validation.
* Thu Jul 02 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 8.2.0:
* Add a --export-config FORMAT option to every @command and
@group: it renders the resolved configuration on <stdout> in
any writable format (toml, yaml, json, json5, jsonc, hjson,
xml), then exits. Adds ExportConfigOption,
@export_config_option and SERIALIZABLE_FORMATS to the public
API.
* Add --theme=auto: it selects the dark or light palette from the
terminal background, detected from CLITHEME, COLORFGBG or a
live OSC 11 query; the default stays dark. Adds
resolve_background and query_osc_background to
click_extra.color, resolve_auto_theme and AUTO_THEME to
click_extra.theme.
* Add run_lanes(func, lanes) and resolve_jobs(ctx, count) to
click_extra.execution: run each lane serially while distinct
lanes run concurrently, sized by --jobs; expose the
worker-count policy shared with run_jobs. A serial_at_debug
keyword collapses both fan-outs to sequential at DEBUG
verbosity.
* Add the always-on matrix Sphinx directive, rendering a
package's release compatibility matrix from its git tags, for
the Python interpreter ({matrix} python) or a dependency
({matrix} <distribution>) axis; a comment-marker form renders
the embedded table on GitHub too.
* Add the click-extra refresh-directives command (wrapping
click_extra.sphinx.matrix.update_matrix_blocks) to regenerate
the tables embedded in {matrix} directive blocks and <!--
matrix … --> marker regions; its --check mode flags stale
tables in CI.
* Publish format_cli_prompt in click_extra.testing (was the
private _format_cli_prompt): render a themed, copy-pasteable
prompt simulating a CLI invocation.
* Fix Carapace dynamic completion: an option's value or a
subcommand argument with a custom shell_complete now resolves
through the generated spec, instead of returning empty or
root-level candidates.
* Fix EnumChoice shell completion on Click 8.4.0: completion
candidates are now normalized, so they match the option's
accepted values instead of appearing as raw uppercase enum
names.
* Fix run_jobs blocking on Ctrl+C during parallel execution: an
interrupt now drops queued items and returns immediately,
instead of waiting for every in-flight task to finish.
* Add a documentation page on Typer compatibility, explaining why
click-extra cannot be combined with Typer and how to get the
same options natively.
* Wed Jul 01 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 8.1.4:
* Skip the EnumChoice shell-completion case-folding test on Click
8.3.
- update to 8.1.3:
* Mark test as network-dependent
- update to 8.1.2:
* The runner pytest fixture now pins HOME and its platform
equivalents inside its isolated filesystem, making
configuration-file discovery independent of the ambient
environment.
* The Sphinx, MkDocs and Carapace tests now self-skip when their
optional dependencies are missing, so downstream packagers no
longer need to --ignore them.
- update to 8.1.1:
* Fix multiple and variadic (nargs=-1) options typed with
EnumChoice: their tuple default was stringified as a whole
(str((MyEnum.FOO,))) instead of per member, so the default
tripped Click's Value must be an iterable check when the option
was left unset.
* Fix decorator_factory leaking options across uses of a
pre-instantiated decorator: when command() is stored (e.g. in a
pytest parametrize list) and reused, Click mutated the shared
params list by extending it with each decorated function's
options, adding duplicates on every reuse. The fix re-evaluates
params_func() fresh on each application.
- update to 8.1.0:
* Breaking:
- Rename the test-plan subcommand to test-suite, its
- -plan-file/--plan-envvar options to
- -suite-file/--suite-envvar, its [tool.<cli>.test-plan]
config section to [tool.<cli>.test-suite], the
click_extra.test_plan module to click_extra.test_suite, and
the
TestPlanConfig/parse_test_plan/run_test_plan/DEFAULT_TEST_PLAN
API to
TestSuiteConfig/parse_test_suite/run_test_suite/DEFAULT_TEST_SUITE.
The CLITestCase class and the [[cases]] file structure keep
their names.
- Replace the test-suite config's inline field with a native
cases array under [tool.<cli>.test-suite.cases] (or set file
to a suite path). Adds the cases field to TestSuiteConfig and
the cases_from_data helper.
- ClickExtraConfig, TestSuiteConfig, and PrebakeConfig are no
longer re-exported from the top-level click_extra namespace;
import them from click_extra.config.
* Add a Carapace completion exporter: the click_extra.carapace
module serializes a Click command tree to carapace-spec YAML
for native shell completion, behind a new carapace extra. The
to_carapace_spec, dump_carapace_spec, write_carapace_spec and
install_carapace_spec API answers click#3188.
* Add a --carapace mode to the wrap command: click-extra wrap
- -carapace SCRIPT prints the target CLI's spec, and --install
writes it into Carapace's user spec directory. Mutually
exclusive with --man and --show-params.
* The wrap command now accepts a local project directory, reading
its console-script entry point from pyproject.toml or setup.cfg
so a checked-out project can be wrapped without installing it
first.
* Add the @sort_by_option decorator for the --sort-by table
option, composing with option groups and constraints; it
accepts ColumnSpec definitions and a columns= registry so one
column tuple drives both --columns and --sort-by. Closes
click-extra#1777.
* Decorators built by decorator_factory carry proper signatures:
their option class's constructor surfaces in help(), the REPL
and autodoc, and overloaded type hints let basedpyright,
pyright and mypy infer the produced command or decorated
callback. Closes click-extra#1781.
* @version_option accepts an explicit version string as its first
positional argument (@version_option("1.2.3")), for drop-in
compatibility with Click.
* A test-suite file may now be in any list-capable config format
detected from its extension: TOML and JSON (built-in), plus
YAML, JSON5, JSONC and Hjson (with their extras). Adds the
load_test_suite helper and SUITE_FORMATS constant.
* Accept a bare integer timeout in a test-suite case, coercing it
to a float instead of rejecting it.
* Default the test-suite config file to
./tests/cli-test-suite.toml, which parses with the built-in
tomllib and so needs no optional extra.
* Add an all extra that pulls in every optional feature at once.
* Centralize config format reading, serialization, and detection
in click_extra.config with the new serialize_content,
read_file, and format_from_path helpers, joining the existing
parse_content.
* Add iter_subcommands and make_resilient_context to
click_extra.parameters for enumerating a group's visible
subcommands and building a parse-free introspection context.
* Add the CONFIG_PATH_METADATA_KEY and
NORMALIZE_KEYS_METADATA_KEY named constants for the schema
field-metadata keys, alongside the existing
EXTENSION_METADATA_KEY.
* Man pages now render optional-value options like --color as
- -color[=auto|always|never] and drop the spurious value metavar
on repeatable count options like -v/--verbose.
* When introspection (--man, --show-params, --carapace) cannot
find a Click command in the resolved module, the error now
explains that an entry point importing its command lazily must
be addressed with module:function notation.
* Unify the "missing optional dependency" error messages behind a
shared missing_extra_message helper, pointing at the canonical
pip install click-extra[<extra>] install target.
* Restrict pytest collection to the tests folder and switch to
importlib import mode, fixing import file mismatch errors when
building from a packaged source tree alongside an installed
copy. Closes click-extra#1779.
* Show the same configuration across all eight supported formats
(TOML, YAML, JSON, JSON5, JSONC, Hjson, INI, XML) in a tabbed
block in the configuration docs.
* Silence ambiguous cross-reference warnings in the Sphinx
documentation build for the ColumnSpec, ConfigFormat,
ConfigValidator and LogLevel classes re-exported at the package
root.
* Tue Jun 23 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 8.0.1:
Redo a proper release.
- update to 8.0.0:
No changelog available
* Thu Jun 18 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.20.1:
* Fix the MkDocs plugin and Sphinx directives leaving Rich-based
CLIs (such as rich-click) colorless in rendered documentation.
* Thu Jun 18 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.20.0:
* Add MultiChoice to click_extra.types: a Click ParamType for
comma-separated multi-pick from a fixed set of values, the
pick-many counterpart to click.Choice.
* Extend the --show-params table with seven new columns (Is flag,
Flag value, Is bool flag, Multiple, Nargs, Prompt, Confirmation
prompt).
* Add the --columns option (ColumnsOption, @columns_option) for
SQL SELECT-style column selection on both --show-params and the
standalone click-extra show-params subcommand.
* Add a click:tree Sphinx directive that walks a Click command
tree and expands into a summary table plus one {click:run}
- -help block per command. MyST-only.
* Fix click-extra show-params ignoring the top-level
- -table-format option and rendering its default as the enum
name instead of the kebab-case ID.
* Fix click-extra show-params and click-extra man resolving
auto-generated environment variables as empty; the envvars
column now matches what Click reads at runtime.
* Fix the MkDocs plugin stripping ANSI escape codes but rendering
no colors: it now generates the ANSI Pygments stylesheet and
registers it through extra_css, so the -Ansi-* classes it emits
are styled.
* Drop duplicate and dead CSS classes from ANSI HTML rendering:
compound tokens like Token.Ansi.Bold.Cyan now emit -Ansi
- Ansi-Bold -Ansi-Cyan instead of repeating -Ansi-Bold and
adding an unstyled -Ansi-Bold-Cyan.
- update to 7.19.0:
* Add an --output-dir DIR option to the click-extra man
subcommand. With it set, the command writes one .1 file per
(sub)command in the resolved tree into DIR (created if missing)
instead of printing a single page to stdout. Suitable for
invocation from a release pipeline or a distributor's build
phase (Debian's override_dh_installman, Guix'
install-man-page), without a project-local wrapper script.
* Add a click_extra_manpages Sphinx configuration value (and the
matching click_extra.sphinx.manpages module) and a
click-extra-manpages directive. Projects enabling
click_extra.sphinx can declare one or more {"script",
"prog_name", "output_dir", "render_html"} entries to emit the
corresponding Click command tree(s) as roff .1 files into
<outdir>/<output_dir>/ on every HTML build. Each script is
resolved the same way click-extra man does (console-script
entry point, module:function, .py path, or module name); only
HTML-family builders trigger the hook. When mandoc or groff is
on PATH, every .1 also gets a browser-viewable .html sibling.
The click-extra-manpages directive renders a relative-URL
bullet list of all declared pages; it works at any depth in the
doc tree.
* Fix ExtraVersionOption.package_version resolving to None when
the package's top-level module name differs from its installed
distribution name (PIL vs Pillow, jwt vs PyJWT). The lookup now
falls back to importlib.metadata.packages_distributions() on
PackageNotFoundError. Ambiguous mappings (one import name to
several distributions) still return None and log a debug
message; pass package_name explicitly to disambiguate. Mirrors
the upstream fix in PR pallets/click#3582.
* Mon Jun 01 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.18.0:
* Add a --man option to the default set of @extra_command and
@extra_group (via default_extra_params()): it prints the
command's man page (roff) to stdout and exits. Also available
as the @man_option decorator for plain Click CLIs.
* Add an --accessible option to the default set of @extra_command
and @extra_group (via default_extra_params()). Enabling it, or
setting the ACCESSIBLE environment variable, is equivalent to
- -no-color --table-format plain: it strips ANSI codes and
renders tables without Unicode box-drawing characters, for
screen readers. An explicit --color or --table-format (on the
command line or in a configuration file) keeps precedence. Also
available as the @accessible_option decorator and the
AccessibleOption class.
* Add a man subcommand to the click-extra CLI: click-extra man
SCRIPT [SUBCOMMAND]... renders the man page (roff) of any
external Click CLI without running it, resolving the target
like show-params (console_scripts entry point, module:function
notation, .py file, or module name). Both subcommands now also
load .py file targets, which previously raised an unhandled
error.
* Generate man pages programmatically with the new
click_extra.man_page module: render_manpage() for a single
command, render_manpages() for the whole command tree (one page
per subcommand), and write_manpages() to write .1 files (handy
from a Debian override_dh_installman rule). Pages follow the
man-pages(7) layout, discover subcommands dynamically, honor
Click's \b no-rewrap marker and SOURCE_DATE_EPOCH for
reproducible builds, and mirror Cloup option groups as .SS
subsections (ungrouped options fall under an Other options
heading).
* Add a pre-configured -0/--zero-exit option flag, exposed as the
@zero_exit_option decorator and the ZeroExitOption class. It
stores the user's intent in ctx.meta under the new ZERO_EXIT
key but does not alter the exit code itself: downstream code
reads it to decide whether to suppress its non-zero "problems
found" status.
* Consolidate the --time, --jobs and -0/--zero-exit options into
a single click_extra.execution module. The click_extra.jobs and
click_extra.timer submodules are removed: their decorators and
classes (timer_option, jobs_option, TimerOption, JobsOption,
CPU_COUNT, DEFAULT_JOBS) remain importable from the click_extra
root. The --show-params table now reports these options under
click_extra.execution.
* Honor the standard POSIXLY_CORRECT environment variable. When
it is present in the environment (regardless of value),
ExtraContext forces allow_interspersed_args to False, so every
Click Extra command and group stops parsing options at the
first positional argument, matching GNU getopt-based tools.
* Add the run_config_validation() function and the
ValidationReport dataclass to click_extra.config (both
re-exported from the package root). They run the CLI-parameter
strict check, the typed schema build, and every registered
ConfigValidator in a single pass, returning the typed schema
instance, the extracted extension sub-trees, and the list of
ValidationErrors. collect_all=True gathers every error;
collect_all=False stops at the first. Both --validate-config
and normal --config loading now delegate to this primitive.
* Unify configuration-loading errors under the single
ValidationError type. Unknown CLI-parameter keys (strict=True)
and unknown schema fields (schema_strict=True) previously
surfaced as an uncaught ValueError traceback during --config
loading; they now stop the run with a critical-level log and
exit code 1, the same failure mode as extension-validator
errors. Code that caught ValueError from config loading should
catch the SystemExit from the exit (or use --validate-config /
run_config_validation() to inspect errors without exiting).
* Fix schema_strict=True wrongly rejecting the contents of a
configuration field marked as an extension point with
EXTENSION_METADATA_KEY when the field's Python type is not a
mapping. The dataclass adapter now honors the marker the same
way the outer strict check does, so the marked sub-tree is kept
intact instead of being flattened and reported as unknown keys.
- update to 7.17.2:
* Add Mermaid diagrams throughout the documentation to render
resolution and layering rules previously carried by prose or
nested lists: configuration-file source selection and value
precedence (config.md), the Click / Cloup / click-extra class
layering and the @command/@group default-option bundle
(commands.md), --color/--no-color ANSI enablement
(colorize.md), the {version} and {exec_name} fallback chains
(version.md), the decorator_factory subclass guardrail
(decorators.md), and environment-variable id resolution
(envvar.md).
- update to 7.17.1:
* Bundle click_extra/themes.toml into the Nuitka standalone
binaries via a new [tool.nuitka] include-package-data setting.
The 7.17.0 binaries aborted at startup with FileNotFoundError:
themes.toml because the data file backing the built-in themes
was not packaged, so Nuitka could not find it when
click_extra.theme loaded it through importlib.resources.
- update to 7.17.0:
* All built-in themes now apply the man-pages(7) font convention:
literal tokens (command and subcommand names, aliases, option
flags, choice values) render bold, and replaceable tokens
(metavars, argument names) render italic, layered on top of
each palette's colors. The split is declared by the new
LITERAL_STYLES / REPLACEABLE_STYLES frozensets in
click_extra.theme, and a test enforces that every built-in
theme keeps it. To avoid piling bold onto slots that already
stand out, heading (now color + underline), deprecated, and
search drop their bold; critical keeps it, as it is the only
cue distinguishing it from error. In light and solarized_dark,
heading is recolored (to magenta and violet respectively) so it
stays distinct from the now-bold options and subcommands it
previously shared a color with.
* Add a manpage built-in theme: a colorless palette rendering the
same bold-literal / italic-replaceable convention with no
color, shadowing how man-pages(7) typesets a command.
Selectable via --theme manpage.
* HelpCommand now raises click.NoSuchCommand instead of
click.UsageError when an unknown subcommand is requested. The
user sees did-you-mean suggestions: Error: No such command
'instal'. (Did you mean one of: 'install', 'uninstall'?).
* Bump the Click floor to 8.4.1. Click 8.4.0 (PR
pallets/click#3423) injects a space between an option's help
text and its (DEPRECATED) label. The 8.4.1 floor (not 8.4.0) is
required because Click 8.4.0 (PR pallets/click#3404) delayed
set_parameter_source until after process_value, so eager
callbacks that introspect ctx.get_parameter_source(self.name)
read None and missed whether the option was set from the
command line, environment, or default. This broke ColorOption's
NO_COLOR/FORCE_COLOR precedence detection, ConfigOption's
explicit-vs-autodiscover branching, and ShowParamsOption's
Source column. Click 8.4.1 (PR pallets/click#3484) restores the
pre-8.4.0 contract.
* Remove the HelpExtraFormatter.write_usage override. Click 8.4.0
(PR pallets/click#3420) made TextWrapper measure visible width
instead of raw bytes, so the 24-bit-RGB-theme wrap workaround
is no longer needed.
* Drop the explicit type=UNPROCESSED from
NoConfigOption.__init__. Click 8.4.0 (PR pallets/click#3363)
auto-detects UNPROCESSED for flag_value with non-basic types,
so the flag_value=NO_CONFIG sentinel reaches Option unchanged
on its own.
* Bump the requests floor to 2.34. Requests 2.34.0 ships inline
type annotations, so the types-requests stub package is no
longer needed and has been removed from the typing dependency
group.
* Bump the myst-parser floor in the docs dependency group to 5.1.
Doc builds now use myst-parser's native "alert" syntax
extension (added in 5.1.0) instead of the in-tree regex
converter in click_extra.sphinx.alerts; "alert" is added to
myst_enable_extensions in docs/conf.py. The in-tree converter
remains in place for the base test dependency group, where
myst-parser>=4 still resolves to 4.x on Python 3.10.
* Drop the colorama test-matrix variation. Click PR
pallets/click#3505 merged the Colorama-removal branch into
stable, making a dedicated CI axis unnecessary.
* Fri May 15 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.16.1:
* Fix ConfigOption mutating its cached params_template when
merging user configuration. '_recursive_update' updates its
first argument in place, so back-to-back invocations of the
same CLI (Sphinx builds, test runners, REPLs) leaked keys set
by an earlier --config into the current invocation's
default_map. Both the --config load path and --validate-config
now pass a deep copy of the template.
- update to 7.16.0:
* Theme system overhaul. Four branded palettes join the built-in
catalog: solarized_dark (Ethan Schoonover), dracula (Zeno
Rocha), nord (Arctic Ice Studio), and monokai (Wimer
Hazenberg), hand-curated for the semantic roles click-extra
exposes (option, metavar, choice, deprecated, envvar, …). The
full catalog now ships as click_extra/themes.toml (a TOML data
file) instead of Python subclasses, loaded at import time via
importlib.resources for proper wheel/zipapp support.
BUILTIN_THEMES is the single public dict of {name:
HelpExtraTheme}; access individual palettes via
BUILTIN_THEMES["dark"], BUILTIN_THEMES["solarized_dark"], etc.
Adding a built-in theme is a one-file data edit: declare a
[<name>] table with one inline-table per styled slot, no Python
needed. Breaking: the click_extra.themes module is removed
(import from click_extra or click_extra.theme); the six
per-theme UPPER_CASE constants (DARK, DRACULA, LIGHT, MONOKAI,
NORD, SOLARIZED_DARK) are removed (use BUILTIN_THEMES["<name>"]
instead).
* Breaking: default_theme module attribute replaced by the
get_default_theme() / set_default_theme(theme) accessors. The
previous module-attribute pattern silently froze whatever was
bound at import time when consumers (e.g. ExtraVersionOption's
style defaults) captured default_theme.invoked_command as a
default function parameter, so later overrides via
wrap.patch_click() didn't propagate. The function pair always
observes the current value. click_extra.wrap.patch_click() now
calls set_default_theme().
* Breaking: OK and KO pre-rendered constants removed. They were
frozen at import time against the dark theme, so --theme light
invocations still showed dark-themed glyphs in --show-params
output. Replaced with OK_GLYPH = "✓" and KO_GLYPH = "✘" raw
strings; style at the call site via
get_current_theme().success(OK_GLYPH) / .error(KO_GLYPH) so the
rendering follows the active theme.
* Breaking: theme_registry no longer accepts a Callable[[],
HelpExtraTheme] value; only HelpExtraTheme instances are valid
entries. The runtime-detection-via-callable pattern was
documented but never used; loading themes from --config is the
supported equivalent (see Themes from your --config file).
* New ThemeChoice is now a fresh click.ParamType (not a
click.Choice subclass), exposing the same choices /
case_sensitive / normalize_choice duck-type interface so
click_extra.colorize keeps per-choice token coloring. Avoids
the fragile no-op setter the previous subclass design relied
on.
* New TELEMETRY context-meta key in click_extra.context;
TelemetryOption now writes the reconciled value to
ctx.meta[click_extra.context.TELEMETRY] instead of an ad-hoc
ctx.telemetry attribute, aligning with every other option's
storage pattern. Breaking: consumers reading ctx.telemetry
directly must switch to context.get(ctx, context.TELEMETRY).
* Callback method renames for harmonized verb taxonomy (set_<key>
writes to ctx.meta[<key>]; init_<system> wires up sibling
machinery): ColorOption.disable_colors → set_color (also fixes
the misleading name — the callback handles enable too);
TelemetryOption.save_telemetry → set_telemetry;
TimerOption.register_timer_on_close → init_timer.
ColorOption.set_color and ThemeOption.set_theme are now bound
methods (not @staticmethod).
* New click_extra.styling module — a feature-rich Style subclass
of cloup.Style, transparently shadowed as from click_extra
import Style. Additions: compact single-line __repr__; hex
shorthand constructor (Style(fg="#f1fa8c") and 3-digit #abc);
__str__ returning a styled "sample" for REPL visualization;
composition operator a | b (right operand wins); cascade(base)
for theme-inheritance fills; to_dict() / from_dict() for
TOML/JSON round-trip; to_css() emitting CSS declarations;
from_ansi() parsing SGR sequences back into a Style;
contrast_ratio(other) for WCAG 2.x luminance ratio. Equality
and hash ignore the lazy _style_kwargs cache so identical
styles compare equal regardless of call history. WCAG AA Large
contrast gates added for all branded themes. The module also
exposes fields_to_dict, dict_to_fields, and cascade_fields as
shared dataclass-roundtrip helpers used internally by both
Style and HelpExtraTheme.
* HelpExtraTheme gains to_dict() / from_dict() / cascade(base).
to_dict() emits only slots that diverge from the default;
from_dict() rejects unknown keys so typos surface immediately.
cascade(base) layers a sparse override on top of a full
palette: config-set slots win, unset slots inherit from the
base.
* --config now reads user-defined theme palettes from the config
file. Every [<cli>.themes.<name>] table (or
[tool.<cli>.themes.<name>] in pyproject.toml) is parsed via
HelpExtraTheme.from_dict and available to --theme for the
current invocation. Known names cascade on top of the matching
built-in; unknown names become stand-alone themes. The registry
update lands on ctx.meta under
click_extra.context.THEME_OVERRIDES and never mutates the
module-level theme_registry, so back-to-back invocations don't
cross-contaminate. A built-in ConfigValidator for the themes
extension path is auto-registered on every ConfigOption, so
malformed entries surface as ValidationError with a rooted path
during --validate-config and at normal load time. wrap inherits
the same behavior automatically.
* --theme now uses ThemeChoice, a click.Choice subclass whose
choices property reads the live registry (global plus
per-context overrides) at every lookup. Themes loaded from
- -config appear as valid choices and in the --help metavar with
no extra wiring. Subclassing click.Choice preserves the
per-token colorization that click_extra.colorize already
applies to choice metavars.
* Extend configuration validation with an app-defined hook for
sub-trees whose keys are data rather than CLI flag names. New
public types: ConfigValidator (binds a dotted extension_path to
a callable that inspects the matching sub-tree),
ValidationError (rooted path, message, optional code), and the
EXTENSION_METADATA_KEY dataclass-field flag for marking
extension points whose Python type isn't a mapping. Validators
are registered through a new config_validators= kwarg on
ExtraCommand / ExtraGroup (and the @command / @group /
@config_option decorators), and run during both
- -validate-config and normal --config loading. Schema-typed
dict[str, X] fields are also recognized as extension points.
- -validate-config now collects every error before exiting and
surfaces all failures with the same ValidationError shape.
* Flip the AnsiColorLexer.true_color default to True. 24-bit RGB
sequences now render as inline style="color: #rrggbb" spans by
default in Sphinx, MkDocs, and pygmentize output. Behavior
change for downstream HTML: documents that previously used
Ansi-C{n} CSS classes now use inline RGB styles. The old
behavior is still available as
AnsiColorLexer(true_color=False). Add :emphasize-result-lines:
option to click:run and python:run Sphinx directives so authors
can highlight specific lines in the captured output
independently of :emphasize-lines: on the source block. Fix
HelpExtraFormatter.write_usage to bypass Click's wrap_text when
the styled usage fits on a single visible line: 24-bit RGB
themes embed 17+ bytes of ANSI escape per token, inflating
Click's byte-based line measurement and causing premature
mid-token wraps on branded themes.
* Fix pyproject.toml CWD discovery to skip files lacking a
[tool.<cli_name>] section. An unrelated pyproject.toml (like a
dotfiles repo's [tool.ruff]) no longer shadows the user's
app-dir config.
* Fix ExtraVerbosity.set_level() to no-op during
ctx.resilient_parsing, preventing spurious logger level changes
during help rendering, shell completion, and any
make_context(resilient_parsing=True) path. Fix reset_loggers
double-registration: when both --verbosity and -v are passed,
the close callback is now registered at most once per
invocation via a sentinel in ctx.meta.
* Inner bracket-field slots (envvar, default, required,
range_label) fall back to the bracket slot's style when left at
identity. A theme that sets only bracket now colours the entire
bracket field uniformly — structural tokens and value tokens
alike — so a minimal palette never renders value tokens
unstyled inside a styled bracket.
* Deprecate click_extra.sphinx.alerts now that myst-parser 5.1.0
ships a native "alert" syntax extension.
click_extra.sphinx.setup() registers the regex-based
GitHub-alerts converter only when the installed myst-parser is
below the new MYST_NATIVE_ALERTS_VERSION constant
(Version("5.1.0")); on newer releases it logs a migration
notice pointing at myst_enable_extensions = [..., "alert"] and
skips the hook. The converter also emits a % empty alert body
MyST comment placeholder so a bare > [!TIP] renders as a
title-only admonition, matching myst-parser 5.1+'s output
instead of being silently dropped. Slated for removal once the
myst-parser floor moves to >=5.1.
* Relax default_config_file_pattern in click_extra.pytest to make
* .json5 and *.jsonc optional in the regex, so test assertions
pass in hermetic builds where those optional extras are not
installed.
- update to 7.15.0:
* Add opt-in 24-bit true-color rendering to the ANSI Pygments
stack. Pass true_color=True to AnsiColorLexer, AnsiFilter, or
any session lexer (like get_lexer_by_name("ansi-shell-session",
true_color=True)) to preserve SGR 38;2;r;g;b and 48;2;r;g;b
sequences as Token.Ansi.FG_{rrggbb} / Token.Ansi.BG_{rrggbb}
tokens instead of quantizing them to the 256-color palette.
AnsiHtmlFormatter renders those tokens as inline style="color:
[#]rrggbb" / style="background-color: #rrggbb" spans. The default
behavior (256-color quantization) is unchanged.
* New click_extra.theme module centralizes all theme machinery:
HelpExtraTheme, default_theme, nocolor_theme, OK, KO,
ThemeOption, theme_option decorator, theme_registry, and
register_theme(). Every click-extra command now accepts --theme
[dark|light]; downstream consumers can extend the choice list
via register_theme(). The active theme for a CLI run is stored
in ctx.meta[context.THEME] by ThemeOption and retrieved via
get_current_theme(), so back-to-back invocations in the same
process (Sphinx builds, test runners, REPLs) no longer leak
- -theme choices into each other. The wrap subcommand reads the
theme from the parent group's context rather than carrying its
own --theme. Adds a corresponding docs/theme.md user guide.
Breaking: downstream code importing theme symbols directly from
click_extra.colorize must update to click_extra.theme; the
canonical from click_extra import HelpExtraTheme path is
unaffected.
* New click_extra.context module consolidates ExtraContext (moved
from click_extra.commands) and a documented registry of every
ctx.meta key Click Extra writes or reads: RAW_ARGS,
CONF_SOURCE, CONF_FULL, TOOL_CONFIG, VERBOSITY_LEVEL,
VERBOSITY, VERBOSE, START_TIME, JOBS, TABLE_FORMAT, SORT_BY,
and THEME. The get() and set() helpers replace scattered
ctx.meta.get(key, ...) calls throughout the codebase. Replaces
the former click_extra.ctx_meta module. Breaking: from
click_extra.commands import ExtraContext and from click_extra
import ctx_meta must be updated to from click_extra.context
import ExtraContext and from click_extra import context
respectively; the canonical from click_extra import
ExtraContext path is unaffected.
* Add python:source, python:run, python:render,
python:render-myst, and python:render-rst Sphinx directives
under a new python domain in click_extra.sphinx. They mirror
click:source / click:run for arbitrary Python (no Click CLI
required): python:source runs silently and shows source,
python:run captures stdout and renders it in a code block
(default lexer text, override via :language:), and the render
family parses the captured stdout as live document content:
generated tables, headings, admonitions, and cross-references
become first-class document nodes rather than a code block.
python:render uses the host file's parser; python:render-myst
forces MyST parsing (so a .rst host can embed MyST-generated
content); python:render-rst forces reST parsing (so a .md host
can embed reST-generated content). The Python and Click runners
hold independent per-document namespaces. The render family
replaces the docs_update.py regenerator + marker-region pattern
many downstream projects use; the same logic now lives inline
in the doc page and runs at build time, so the rendered HTML is
always current.
* Breaking change: the click:* and python:* Sphinx directives are
now disabled by default. Both families execute arbitrary Python
at build time with full Sphinx-process privileges (filesystem,
network, environment secrets), so registering them on every
project that imports click_extra.sphinx silently expanded the
attack surface of every consumer. To re-enable, add
click_extra_enable_exec_directives = True to conf.py. Always-on
features (the ANSI-capable Pygments HTML formatter and the
GitHub-alerts → MyST/reST converter) are unaffected. Without
the flag, click:source, click:run, python:source, python:run,
python:render, python:render-myst, and python:render-rst are
not registered and any reference to them produces an "Unknown
directive" warning at build time.
* Tighten Click floor from 8.1 to 8.3.1. The relaxation in 7.14.1
went further than needed; 8.3.1 is the minimum that ships the
parameter-name fix we depend on.
* Move --cov and --cov-report=term from pyproject.toml
[tool.pytest].addopts into the CI workflow. Removes pytest-cov
as an unconditional test-time dependency for downstream
packagers.
* Move tests/test_mkdocs.py into tests/mkdocs/. Downstream
packagers can skip it with --ignore=tests/mkdocs without
pulling in mkdocs-click.
* Loosen default_debug_*_version_details regex helpers to also
match None for git_long_hash, git_short_hash, and git_date.
Lets debug-output tests pass when the source tree has no .git
directory (Guix git-fetch, sdist installs).
* Mark test_ansi_lexers_candidates with the new network marker.
Sandboxed builds can exclude it with pytest -m "not network".
* Make tests/test_table.py tolerate tabulate <0.10: branch the
asciidoc fixture on the cell-alignment marker (<8 vs 8<) and
skip the colon-grid parametrize case when the format is aliased
to grid.
* Wed Apr 29 2026 Steve Kowalik <steven.kowalik@suse.com>
- Update to 7.14.1:
* Relax Click requirement back to 8.1. Replace ParameterSource ordered
comparisons in ConfigOption with explicit set membership so the code
works on both the regular Enum (Click 8.1/8.2) and the
IntEnum (Click 8.3+).
* Relax tabulate requirement back to 0.9. Backport the colon_grid format
by aliasing it to grid at module load when tabulate < 0.10 is installed.
- Drop installing click-extra-demo, which has been removed.
* Sun Apr 26 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.14.0:
* Add wrap subcommand: click-extra wrap SCRIPT [ARGS]... applies
help colorization to any installed Click CLI without modifying
its source. Supports --theme option and
[tool.click-extra.wrap.<script>] config sections for persistent
CLI defaults. Resolves SCRIPT via console_scripts entry points,
module:function notation, .py file paths, or bare module names.
Unknown subcommand names fall through to wrap automatically, so
click-extra flask --help works without typing wrap. run is kept
as an alias.
* Add show-params subcommand: click-extra show-params SCRIPT
[SUBCOMMAND]... introspects any external Click CLI's parameters
and displays them as a table. Supports all --table-format
renderings. Drills into nested subcommands. Auto-discovers the
Click command when the entry point is a wrapper function.
* Style Spec. column with option theme (cyan) and Python type
with metavar theme (cyan dim) in both --show-params and
show-params, matching help-screen conventions.
* Add get_param_spec() and format_param_row() as public API in
click_extra.parameters. get_param_spec() extracts option-spec
strings and handles hidden-param unhiding. format_param_row()
is the shared cell renderer for both --show-params and
show-params tables.
* Make ParamStructure.get_param_type() a @staticmethod. Returns
str for unrecognised custom types instead of raising
ValueError.
* Replace render-matrix subcommand with individual colors,
styles, palette, 8color, and gradient subcommands grouped under
a "Demo" section. Remove the click-extra-demo entry point.
* Move Sphinx tests into tests/sphinx/. Downstream packagers can
skip them with --ignore=tests/sphinx without pulling in Sphinx
dependencies.
* Bump Click requirement to 8.3.3. Simplify ParameterSource
comparisons in ConfigOption using the new IntEnum ordering.
* Sat Apr 18 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.13.0:
* Add MkDocs plugin for ANSI color rendering in code blocks.
Install with pip install click-extra[mkdocs], then add
click-extra to your mkdocs.yml plugins list. Patches
pymdownx.highlight formatters to use AnsiHtmlFormatter.
* Automatically patch mkdocs-click code blocks to use the
ansi-output lexer when the click-extra MkDocs plugin is
enabled. CLI help text with ANSI escape codes now renders with
colors instead of garbled [1m/[0m sequences.
* Fix API reference sections rendering as raw RST markup instead
of formatted documentation. Wrap all automodule and
autoclasstree directives in eval-rst blocks to force RST
parsing, working around MyST-Parser's MockState.nested_parse()
treating autodoc output as Markdown.
* Add OSC 8 hyperlink support to AnsiColorLexer and
AnsiHtmlFormatter. Terminal hyperlinks in CLI output are
rendered as clickable HTML <a> tags in Sphinx documentation.
Other OSC sequences are now fully stripped instead of leaking
their payload as visible text.
- update to 7.12.0:
* Add JobsOption and jobs_option decorator for controlling
parallel execution. Defaults to available CPUs minus one. Warns
when the requested count is clamped or exceeds available cores.
* Improve error messages for single-dash multi-character tokens.
When Click splits -dbgwrong character by character and reports
"No such option: -d", ExtraCommand now catches that and
re-raises with the full token and close-match suggestions.
* Replace pygments-ansi-color dependency with inline ANSI SGR
parser. Adds support for italic (SGR 3), underline (SGR 4),
reverse video (SGR 7), strikethrough (SGR 9), and 24-bit RGB
colors (quantized to the 256-color palette). The token
namespace changes from Token.Color.*/Token.C.* to a unified
Token.Ansi.*, and CSS classes change accordingly (from
.-Color-*/.-C-* to .-Ansi-*). Fixes bold, italic, underline,
and other text attributes not rendering in Sphinx/Furo: Furo's
dark-mode CSS generator injected color: #D0D0D0 fallbacks for
every Pygments style dict entry, overriding foreground color
rules on compound tokens. All SGR attribute CSS is now injected
separately via EXTRA_ANSI_CSS.
* Rename lexer_map to LEXER_MAP.
* Change render-matrix --matrix=<choice> option to a positional
argument: render-matrix <choice>. Add palette, 8color, and
gradient choices. palette shows a compact 256-color indexed
swatch. 8color shows all standard foreground/background
combinations. gradient renders 24-bit RGB gradients alongside
their 256-color quantized equivalents to visualize the palette
resolution limits.
* Fix render-matrix colors background color column headers: the
color swatches were styled as foreground instead of background
colors.
- update to 7.11.0:
* Add serialize_data() and print_data() functions for serializing
arbitrary nested Python data (not just tabular rows) to JSON,
HJSON, TOML, YAML, and XML. Complements the existing
render_table()/print_table() pair.
* Add sort_key parameter to render_table() and print_table() for
pre-render row sorting.
* Catch ImportError from missing optional dependencies in
print_table() and print_data(), producing a clean one-line
error instead of a traceback. The print_data() package
parameter lets downstream projects customize install
instructions.
* Add print_sorted_table() and SortByOption for column-based
table sorting. SortByOption generates a --sort-by CLI option
from column definitions and auto-wires ctx.print_table to the
sorted variant.
* Add auto-injected help subcommand to ExtraGroup. mycli help
shows group help, mycli help subcommand shows that subcommand's
help (with nested group resolution). mycli help --search term
searches all subcommands for matching options or descriptions.
Disable with help_command=False.
* Relax ParamStructure._recurse_cmd to skip subcommands whose
name collides with a top-level parameter (e.g. the help
subcommand vs Click's --help option) instead of raising.
* Expose HelpKeywords dataclass and collect_keywords() as public
API for extending help screen highlighting. collect_keywords()
(renamed from the private _collect_keywords()) can be
overridden to customize keyword collection.
* Add extra_keywords and excluded_keywords parameters to
ExtraCommand and ExtraGroup. extra_keywords injects additional
strings for highlighting; excluded_keywords suppresses
highlighting of specific strings. Both accept a HelpKeywords
instance.
* Switch deprecated-message highlighting from pre-collected
keyword sets to a case-insensitive regex. Manually-added
markers like (Deprecated) or (deprecated: reason) in help
strings are now styled alongside Click-native (DEPRECATED)
markers.
* Style individual choices inside their own metavar
([json|csv|xml]) as structural elements. Excluded choices and
cross_ref_highlight=False only suppress free-text highlighting;
the metavar itself is always styled.
* Propagate excluded_keywords from parent groups to subcommands.
Parent exclusions are merged with child exclusions so that
choices excluded at the group level are not styled in
subcommand descriptions.
* Fix command aliases not being highlighted in help screens.
Aliases rendered by Cloup inside parenthetical groups (like
backup (save, freeze)) were not matched by the subcommand
highlighting regex, which only recognized 2-space-indented
names.
* Fix choice cross-reference highlighting bleeding into bracket
fields. When a default value contained a choice keyword (e.g.
outline in rounded-outline), the choice style would override
the default value style. Bracket fields are now
placeholder-protected before cross-reference passes run.
* Fix parent-context choice collection always normalizing
(lowercasing) case-insensitive choices, ignoring custom
metavars. Parent choices with a custom metavar now preserve
original case, matching the behavior already applied to the
current command's parameters.
* Mon Apr 13 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.10.1:
* Fix pipe and github table formats to produce
mdformat-compatible separator rows, preventing a formatting
cycle between tabulate and mdformat.
* Replace hardcoded test matrix with repomatic metadata-managed
matrix; OS, Python, and stability axes are now computed
dynamically, with custom Click/Cloup version axes via
[tool.repomatic.test-matrix]. PRs get a reduced matrix to save
CI minutes. Drops Python 3.15t (free-threaded), aligning with
repomatic v6.10.0 defaults.
* Replace {eval-rst}-wrapped automodule and autoclasstree
directives with native MyST syntax in all docs.
* Fri Apr 03 2026 Dirk Müller <dmueller@suse.com>
- update to 7.10.0:
* Highlight parent group names in subcommand help text, so
ancestor command names are colored even when interleaved with
options.
* Add `range_label`, `required`, and `argument` theme slots to
`HelpExtraTheme`. Argument metavars are now styled separately
from option metavars.
* Add `cross_ref_highlight` flag to `HelpExtraTheme`. Set to
`False` to disable free-text highlighting of options,
choices, arguments, metavars, and CLI names in descriptions
and docstrings. Structural elements (bracket fields,
deprecated messages, subcommand lists) are always styled.
* Add type-aware flattening, field metadata, and nested
dataclass support to `config_schema`. `flatten_config_keys()`
and `normalize_config_keys()` accept an `opaque_keys`
parameter to preserve data-keyed dicts. Fields support
`click_extra.config_path` and `click_extra.normalize_keys`
metadata. Nested dataclass fields are recursively
instantiated with the same normalize/flatten/opaque logic.
* Fix help text highlighting of hyphenated option names (e.g.
`--table-format` split at the first hyphen), argument names
(e.g. `keys`) colliding with option keywords, and substring
matches in compound keywords (e.g. `outline` inside `rounded-
outline`).
* Fix enum coloring: use `normalize_choice()` to produce the
exact strings shown in the metavar instead of raw enum member
names.
* Wed Apr 01 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.9.0:
* Add flatten_config_keys() utility to flatten nested config
dicts into a single level by joining keys with a separator.
* Flatten nested config dicts before dataclass field matching in
config_schema, so nested TOML sub-tables (e.g.
[tool.myapp.sub-section]) map to flat dataclass fields (e.g.
sub_section_key).
* Add schema_strict parameter to ConfigOption and
ExtraCommand/ExtraGroup: when True, unknown config keys raise
ValueError during dataclass schema validation instead of being
silently dropped.
* Auto-discover pyproject.toml from the current working directory
upward to the VCS root before falling back to the app config
directory. Matches the discovery behavior of uv, ruff, and
mypy. Only active during auto-discovery (not when --config is
passed explicitly).
* Instantiate config_schema defaults when no config file is
found, so get_tool_config() never returns None when a schema is
configured.
* Forward included_params from ExtraCommand/ExtraGroup to
ConfigOption. Allows @group(included_params=()) to disable
merge_default_map when config keys are schema-only and would
collide with subcommand names.
* Move prebake_version(), prebake_dunder(), and
discover_package_init_files() from ExtraVersionOption static
methods to module-level functions in click_extra.version.
Import them directly: from click_extra.version import
prebake_version.
* Add git_tag template field. Resolved from a __git_tag__ dunder
or git describe --tags --exact-match HEAD at runtime. Returns
the tag name if HEAD is at a tagged commit.
* Add git_tag_sha template field. Resolved from a __git_tag_sha__
dunder on the CLI module, with a git subprocess fallback.
Replaces the old __tag_sha__ convention.
* Git template fields (git_branch, git_long_hash, git_short_hash,
git_date) now check for pre-baked __<field>__ dunders on the
CLI module before falling back to subprocess calls. Enables
compiled binaries (Nuitka/PyInstaller) to embed git metadata at
build time.
* Add click-extra prebake CLI with three subcommands: prebake all
bakes __version__ and all git fields in one pass, prebake
version injects Git hashes into __version__, and prebake field
replaces any empty dunder variable. Field names auto-wrap with
__...__ (e.g. git_tag_sha becomes __git_tag_sha__). All
subcommands auto-discover target files from [project.scripts].
* Add empty __git_*__ dunder placeholders to
click_extra/__init__.py for dogfooding the prebake system.
* Pin image URLs in readme.md and docs/tutorial.md to the release
tag at bump time, and restore them to main on the next dev
bump.
* Tue Mar 10 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.8.0:
* Add config_schema parameter to ConfigOption and
ExtraCommand/ExtraGroup for typed configuration access via
dataclasses or custom callables.
* Add fallback_sections parameter for legacy configuration
section name migration with deprecation warnings.
* Add normalize_config_keys() utility to convert kebab-case
config keys to snake_case Python identifiers.
* Add get_tool_config() helper to retrieve typed configuration
from context.
* Check more variations of local, stable and dev CLI invocations.
* Adopt RUF022 rule to let ruff enforce __all__ sorting.
* Fix ruff 0.15.5 lint errors.
* Mon Mar 09 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.7.0:
* Add version_fields parameter to ExtraCommand and ExtraGroup.
Forwards any ExtraVersionOption template field (e.g. prog_name,
version, git_branch) from the command decorator without
replacing the default params list.
* Lazily evaluate version metadata fields in ctx.meta.
* Remove version parameter from ExtraCommand and ExtraGroup.
* Add hjson, json, json5, jsonc, toml, xml and yaml table formats
for --table-format.
* Add TableFormat.is_markup property.
* Strip ANSI color codes from markup table formats (csv, html,
latex, rst, etc.) by default. Use --color to preserve them.
* Add [toml] extra dependency group for TOML table output via
tomlkit.
* Emit native types (booleans, nulls, lists) in --show-params
output for structured serialization formats (JSON, YAML, TOML,
HJSON, XML).
* Fix --show-params ignoring --table-format when it appears first
on the command line.
* Expand dotted keys in configuration files (e.g.
"subcommand.option": value) into nested dicts before merging,
to allow for mixing flat dot-notation and nested structures.
* Only capture timer start time when --time is actually
requested.
* Add click-extra entry point so uvx click-extra works out of the
box. The click-extra-demo alias is kept for backward
compatibility.
* Fri Mar 06 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.6.5:
* Bump tabulate requirement from >=0.9 to >=0.10.
* Add new colon-grid table format.
* Replace custom github table renderer with tabulate's pipe
format. Backport of python-tabulate#410.
* Wed Mar 04 2026 Dirk Müller <dmueller@suse.com>
- update to 7.6.4:
* Fix `ExtraVersionOption.cli_frame()` crashing in Nuitka-
compiled binaries where all stack frames belong to the Click
ecosystem.
* Fix `ExtraVersionOption.module_version` returning `None` in
`__main__` entry points by checking the parent package's
`__version__`.
* Fix test plan for Nuitka-compiled binary.
* Add `@pytest.mark.once` marker for platform-independent
structural tests. Run them in a single CI job instead of
across the full matrix.
* Mon Mar 02 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.6.3:
* Fix test_default_pattern_roaming_force_posix test failures when
XDG_CONFIG_HOME is set. Closes {issue}1541.
* Mon Mar 02 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.6.2:
* Add ExtraVersionOption.prebake_version() static method to pre-bake
__version__ strings with Git hashes at compile time, complementing
the runtime version property for Nuitka/PyInstaller binaries.
* Fri Feb 27 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.6.1:
* Fix test failures when optional config format dependencies are not
installed. Closes {issue}1538.
* Fri Feb 27 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.6.0:
* Add '_default_subcommands' reserved configuration key to
auto-invoke subcommands when none are provided on the CLI.
Closes {issue}1405.
* Add '_prepend_subcommands' reserved configuration key to always
prepend subcommands to every invocation (requires chain=True).
Closes {issue}1405.
* Add --validate-config option to validate configuration files.
* Add ConfigFormat.PYPROJECT_TOML format for [tool.*] section
support in pyproject.toml. Closes {issue}1524.
* Stop parent directory walk on inaccessible directories.
* Add stop_at parameter to @config_option to limit parent
directory walking. Defaults to VCS. Closes {issue}651.
* Add VCS sentinel and VCS_DIRS constant for VCS root detection.
* Resolve relative paths to absolute in parent_patterns before
yielding.
* Add included_params allowlist to ConfigOption and
@config_option, the inverse of excluded_params. Closes
{issue}1362.
* Add human-friendly display labels to ConfigFormat.
* Switch back from SPLIT to BRACE flag for multi-format config
file patterns. Fixes a bug where only the first format received
the directory prefix with SPLIT.
* Hard code icon workaround for Sphinx index entries.
* Automatically append Git short hash as a PEP 440 local version
identifier to .dev versions (e.g., 1.2.3.dev0+abc1234).
* Skip Git hash suffix for versions that already contain +
(pre-baked local identifiers) to avoid invalid double-suffixed
versions.
* Recognize LLM environment variable to strip ANSI codes when
running under an AI agent.
* Thu Feb 26 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.5.3:
* Allow disabling of autodiscovery of configuration files by
setting default=NO_CONFIG on @config_option. Closes
{issue}1495.
* Implement resolve_any_xref in ClickDomain to prevent
MyST-Parser warning. Closes {issue}1502.
* Fix subcommand conflict detection checking against root-level
params instead of parent params. Closes {pr}1286.
- update to 7.5.2:
* Fix GitHub alerts converter mangling list-table directive
content. Closes {issue}1490.
* Replace Dependabot by Renovate.
* Move click_extra/docs_update.py to docs/docs_update.py.
* Add pygments-ansi-color to docs dependency group for lexer
table generation.
* Fri Feb 06 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.5.1:
* Add new aligned table format with single-space column separators
and no borders.
* Fix parallel mode support in Sphinx extension. Closes {issue}1482.
* Tue Feb 03 2026 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.5.0:
* Fix TableFormat.GITHUB to render proper alignment hints in the
separator row (:---, :---:, ---:).
* Move auto-lock time from 8:43 to 4:43.
* Set cooldown period via the pyproject.toml.
* Add Download link to project metadata.
* Include license file in package.
* Replace deprecated codecov/test-results-action by
codecov/codecov-action.
* Remove utilization workaround for macos-15-intel.
* Bump requirement of extra-platforms to 8.0.0.
* Fri Dec 12 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.4.0:
- Add cooldown period for dependabot and uv.lock updates.
- Uncap all dependencies.
- Replace tool.uv section by build-system.
- Merge all label jobs into a single one.
- Unlock a CPU core stuck at 100% utilization on
macos-15-intel.
- update to 7.3.0:
- Add click:source directive as an alias to click:example
directive in Sphinx extension.
- Flag click:example directive as deprecated in favor of
click:source.
- Add support for nested GitHub alerts.
- Fix fetching version when the CLI is implemented as a
standalone script and not as a package module.
- update to 7.2.0:
- Add support for auto-conversion of GitHub alerts into MyST
admonitions in Sphinx extension.
- Rename click-extra demo CLI to click-extra-demo to avoid
confusion with the package name.
- Run tests on ubuntu-slim GitHub Actions runner.
- Run docs update job on ubuntu-slim runner.
* Sat Nov 22 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.1.0:
* Add support for aliases in EnumChoice type.
* Register pre-configured render_table() utility in the context when
table_format is set, in the same spirit as print_table().
* Wed Nov 19 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 7.0.1:
* Restore support for @extra_command, @extra_group and
@extra_version_option, but mark them as deprecated.
- update to 7.0.0:
* Allow parent directories search for configuration files. Adds
search_parents argument on @config_file. Closes {issue}651.
* Allow fine-tuning of configuration file format pattern
matching. Replaces formats argument on @config_file by
file_format_patterns.
* Adds search_pattern_flags and file_pattern_flags arguments on
@config_file to allow user to tweak pattern matching behavior.
* Use | as separator for multiple file patterns instead of {,}
syntax. Replace glob.BRACE by glob.SPLIT for search pattern
flags. Force glob.SPLIT for file pattern flags.
* Remove glob.IGNORECASE flag to make case-sensitivity determined
by the underlying platform at runtime.
* Force glob.NODIR for search pattern flags to speed up search.
* Rename click_extra.config.Formats enum to
click_extra.config.ConfigFormat. Expose it at the root
click_extra module.
* Eat our own dog food: add a click-extra CLI to run self-tests.
* Override base decorators and classes with Click Extra's own
variants:
- @command now points to what was @extra_command.
- @group now points to what was @extra_group.
- Option class now points to click_extra.Option, which is a
subclass of cloup.Option.
- Argument class now points to click_extra.Argument, which is a
subclass of cloup.Argument.
- @option now instantiates click_extra.Option by default.
- @argument now instantiates click_extra.Argument by default.
- @version_option now points to what was @extra_version_option.
- Now if you want to use the previous aliases to Click's and
Cloup's originals, import them directly from click or cloup
instead of click_extra, which makes origination clearer.
* Remove @extra_command, @extra_group and @extra_version_option.
* Remove no_redefined argument in
click_extra.pytest.command_decorators() method.
* Validates that classes passed to the cls parameter of
decorators are subclasses of the expected base classes.
* Normalize the default value of EnumChoice parameters to their
string choice representation in help screens.
* Run tests on Python 3.14t and 3.15t free-threaded variants.
* Wed Nov 05 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 6.2.0:
* Add new EnumChoice type for fine-tunable Enum-based
choices. Expose EnumChoice and ChoiceSource at the root
click_extra module.
* Relax dependencies to support Python 3.10. Closes {issue}1385.
* Re-introduce tomli dependency for Python 3.10 users.
* Skip tests on intermediate Python versions (3.11, 3.12 and 3.13)
to reduce CI load.
* Sun Nov 02 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 6.1.0:
* Add support for JSON5, JSONC and HJSON configuration files.
* YAML and XML configuration support is now optional. You need to
install the click_extra[yaml] and click_extra[xml] extra
dependency groups to enable it.
* Add new @lazy_group decorator and LazyGroup class to create
groups that only load their subcommands when invoked. Closes
{issue}1332.
* Move all custom types to click_extra._types module.
* Avoid importing all types at runtime to reduce startup time.
* Upgrade tests runs from macos-13 to macos-15-intel, and from
macos-15 to macos-26.
* Use astral-sh/setup-uv action to install uv.
* Wed Oct 22 2025 Steve Kowalik <steven.kowalik@suse.com>
- Update to 6.0.3:
* Fix @config_option to accept Path objects as default value.
* Add official support of Python 3.14.
* Add --table-format option by default on @extra_command and @extra_group.
* Let --table-format and --no-color affect the rendering of --show-params
table.
* Swap Class and Spec. columns in --show-params output.
* Classify table formats into two categories: markup formats and
plain-text formats.
* Fix display in --show-params for parameters sharing the same name.
* Fix detection in the --version option of the module in which the user's
CLI is implemented.
* Rename click_extra.tabulate namespace to click_extra.table.
* Expose click._utils.UNSET and click.logging.LogLevel at the root
click_extra module.
* Replace unmaintained mergedeep dependency by deepmerge.
- Ship the license and readme in the binary packages.
* Fri Aug 08 2025 Matej Cepl <mcepl@cepl.eu>
- Currently broken, waiting on the resolution of the upstream
click 8.2.2 drama (gh#pallets/click#3024).
- update to 5.1.0:
* Add support for MyST Markdown syntax for click:example and
click:run Sphinx directives.
* Add support for all code-block options to click:example and
click:run: :linenos:, :lineno-start:, :emphasize-lines:,
:force:, :caption:, :name:, :class: and :dedent:.
* Add new :show-source:/:hide-source:,
:show-results:/:hide-results: and :language: options to
click:example and click:run. Closes {issue}719.
* Support non-string choices in colored help screens. Closes
{issue}1284.
* Replace LOG_LEVELS mapping with LogLevel enum.
* Remove DEFAULT_LEVEL_NAME constants.
* Fix rendering of default values in --show-params output.
* Fix reconciliation of flags' environment variables.
* Force requirement on cloup >= 3.0.7.
* Be more informative when error is found in click:example and
click:run Sphinx directives by displaying the path of the
original document and the line number of the error.
* Sat May 31 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 5.0.2:
* Set ExtraCommand default prog_name to CLI's name to avoid it to be
named python -m <module_name> if invoked out of a module.
* Tweak exit code rendering of CLI runs.
* Thu May 29 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 5.0.1:
* Fix highlighting of deprecated messages.
* Use ASCII characters instead of unicode for prompt rendering in
messages.
* Tue May 27 2025 Daniel Garcia <daniel.garcia@suse.com>
- Skip failing tests with python-click 8.2.1
gh#kdeldycke/click-extra#1264
* Fri May 16 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 5.0.0:
* Upgrade to Click 8.2.0.
* Add support for custom deprecated messages on commands and
parameters.
* Remove ExtraOption.get_help_default() and rely on new
Option.get_help_extra().
* Remove dependency on pallets-sphinx-themes.
* Drop supports for Python 3.10.
* Add windows-11-arm to the test matrix.
* Remove tests on ubuntu-22.04-arm, ubuntu-22.04 and windows-2022 to
keep matrix small.
* Wed Mar 05 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 4.15.0:
* Regroup all envronment variables-related code.
* Rename extend_envvars() to merge_envvar_ids() and allow it to
merge arbitrary-nested structures. Normalize names to uppercase
on Windows.
* Rename normalize_envvar() to clean_envvar_id().
* Rename all_envvars() to param_envvar_ids().
* Rename auto_envvar() to param_auto_envvar_id().
* Remove unused normalize parameter on all_envvars().
* Add missing line returns in render_cli_run().
* Prefix all types with capital-T.
* Sun Feb 23 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 4.14.2:
* Extract rendering part of the print_cli_run() helper to
render_cli_run().
* Remove unused click_extra.testing.run_cmd.
* Relax requirement on extra-platforms.
* Add tests on windows-2025. Remove tests on windows-2019.
* Sat Feb 08 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 4.14.1:
- Fix upload of Python package to GitHub release on tagging.
- update to 4.14.0:
- Add a new --verbose option on @extra_command and @extra_group
to increase the verbosity level for each additional repetition.
- Add new @verbose_option pre-configured decorator.
- Reassign the short -v option from --verbosity to --verbose.
- Improve logging documentation.
- Align ExtraStreamHandler behavior to logging.StreamHandler.
- Move stream_handler_class and formatter_class arguments from
new_extra_logger to extraBasicConfig.
- Add new file_handler_class argument to extraBasicConfig.
- Fix upload of Python package to GitHub release on tagging.
- Remove dependency on pytest-cases.
* Tue Jan 28 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 4.13.2:
- Re-release to fix Github publishing.
- Reactivates some color tests on Windows.
- update to 4.13.1:
- [changelog] Release v4.13.1
- update to 4.13.0:
- Revamps logging helpers and aligns them with Python's logging
module.
- Remove extra_basic_config.
- Adds new extraBasicConfig, and aligns it with Python's
basicConfig.
- Replace ExtraLogFormatter with ExtraFormatter.
- Replace ExtraLogHandler with ExtraStreamHandler.
- Add new new_extra_logger helper.
- Rewrite the logging documentation with all use-cases and custom
configuration examples. Closes {issue}989.
- Removes old platforms page from documentation.
* Mon Jan 20 2025 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- update to 4.12.0:
- Remove Click Extra's own implementation of HelpOption class now
that fixes have reached Click's upstream.
- Redefine @help_option decorator to default to --help/-h
options.
- Add more logging examples in documentation.
- Add tests on ubuntu-24.04-arm and ubuntu-22.04-arm.
- Use uv to install specific versions of Python.
- remove patch click818.patch
* Thu Jan 16 2025 Markéta Machová <mmachova@suse.com>
- Add click818.patch to fix tests with new click
* Thu Nov 14 2024 Johannes Kastl <opensuse_buildservice@ojkastl.de>
- new package python-click-extra: Drop-in replacement for Click to
make user-friendly and colorful CLI
/usr/bin/click-extra /usr/bin/click-extra-3.13 /usr/lib/python3.13/site-packages/click_extra /usr/lib/python3.13/site-packages/click_extra-8.6.2.dist-info /usr/lib/python3.13/site-packages/click_extra-8.6.2.dist-info/INSTALLER /usr/lib/python3.13/site-packages/click_extra-8.6.2.dist-info/METADATA /usr/lib/python3.13/site-packages/click_extra-8.6.2.dist-info/RECORD /usr/lib/python3.13/site-packages/click_extra-8.6.2.dist-info/REQUESTED /usr/lib/python3.13/site-packages/click_extra-8.6.2.dist-info/WHEEL /usr/lib/python3.13/site-packages/click_extra-8.6.2.dist-info/entry_points.txt /usr/lib/python3.13/site-packages/click_extra-8.6.2.dist-info/licenses /usr/lib/python3.13/site-packages/click_extra-8.6.2.dist-info/licenses/license /usr/lib/python3.13/site-packages/click_extra/__init__.py /usr/lib/python3.13/site-packages/click_extra/__main__.py /usr/lib/python3.13/site-packages/click_extra/__pycache__ /usr/lib/python3.13/site-packages/click_extra/__pycache__/__init__.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/__init__.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/__main__.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/__main__.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/_deprecated.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/_deprecated.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/accessibility.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/accessibility.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/carapace.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/carapace.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/cli.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/cli.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/cli_wrapper.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/cli_wrapper.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/color.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/color.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/commands.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/commands.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/context.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/context.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/decorators.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/decorators.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/envvar.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/envvar.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/execution.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/execution.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/highlight.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/highlight.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/logging.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/logging.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/man_page.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/man_page.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/mkdocs.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/mkdocs.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/myst_converter.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/myst_converter.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/parameters.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/parameters.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/prebake.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/prebake.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/pygments.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/pygments.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/pytest.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/pytest.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/rst_to_myst.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/rst_to_myst.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/spinner.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/spinner.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/spinner_presets.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/spinner_presets.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/styling.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/styling.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/table.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/table.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/telemetry.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/telemetry.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/test_plan.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/test_plan.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/test_suite.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/test_suite.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/testing.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/testing.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/theme.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/theme.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/theme_docs.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/theme_docs.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/tree.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/tree.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/types.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/types.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/version.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/__pycache__/version.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/_deprecated.py /usr/lib/python3.13/site-packages/click_extra/accessibility.py /usr/lib/python3.13/site-packages/click_extra/carapace.py /usr/lib/python3.13/site-packages/click_extra/cli.py /usr/lib/python3.13/site-packages/click_extra/cli_wrapper.py /usr/lib/python3.13/site-packages/click_extra/color.py /usr/lib/python3.13/site-packages/click_extra/commands.py /usr/lib/python3.13/site-packages/click_extra/config /usr/lib/python3.13/site-packages/click_extra/config/__init__.py /usr/lib/python3.13/site-packages/click_extra/config/__pycache__ /usr/lib/python3.13/site-packages/click_extra/config/__pycache__/__init__.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/config/__pycache__/__init__.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/config/__pycache__/builtin.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/config/__pycache__/builtin.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/config/__pycache__/formats.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/config/__pycache__/formats.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/config/__pycache__/option.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/config/__pycache__/option.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/config/__pycache__/schema.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/config/__pycache__/schema.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/config/builtin.py /usr/lib/python3.13/site-packages/click_extra/config/formats.py /usr/lib/python3.13/site-packages/click_extra/config/option.py /usr/lib/python3.13/site-packages/click_extra/config/schema.py /usr/lib/python3.13/site-packages/click_extra/context.py /usr/lib/python3.13/site-packages/click_extra/decorators.py /usr/lib/python3.13/site-packages/click_extra/envvar.py /usr/lib/python3.13/site-packages/click_extra/execution.py /usr/lib/python3.13/site-packages/click_extra/highlight.py /usr/lib/python3.13/site-packages/click_extra/logging.py /usr/lib/python3.13/site-packages/click_extra/man_page.py /usr/lib/python3.13/site-packages/click_extra/mkdocs.py /usr/lib/python3.13/site-packages/click_extra/myst_converter.py /usr/lib/python3.13/site-packages/click_extra/parameters.py /usr/lib/python3.13/site-packages/click_extra/prebake.py /usr/lib/python3.13/site-packages/click_extra/py.typed /usr/lib/python3.13/site-packages/click_extra/pygments.py /usr/lib/python3.13/site-packages/click_extra/pytest.py /usr/lib/python3.13/site-packages/click_extra/rst_to_myst.py /usr/lib/python3.13/site-packages/click_extra/sphinx /usr/lib/python3.13/site-packages/click_extra/sphinx/__init__.py /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__ /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/__init__.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/__init__.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/_base.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/_base.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/alerts.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/alerts.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/click.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/click.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/manpages.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/manpages.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/matrix.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/matrix.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/myst_docstrings.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/myst_docstrings.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/python.cpython-313.opt-1.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/__pycache__/python.cpython-313.pyc /usr/lib/python3.13/site-packages/click_extra/sphinx/_base.py /usr/lib/python3.13/site-packages/click_extra/sphinx/alerts.py /usr/lib/python3.13/site-packages/click_extra/sphinx/click.py /usr/lib/python3.13/site-packages/click_extra/sphinx/manpages.py /usr/lib/python3.13/site-packages/click_extra/sphinx/matrix.py /usr/lib/python3.13/site-packages/click_extra/sphinx/myst_docstrings.py /usr/lib/python3.13/site-packages/click_extra/sphinx/python.py /usr/lib/python3.13/site-packages/click_extra/spinner.py /usr/lib/python3.13/site-packages/click_extra/spinner_presets.py /usr/lib/python3.13/site-packages/click_extra/styling.py /usr/lib/python3.13/site-packages/click_extra/table.py /usr/lib/python3.13/site-packages/click_extra/telemetry.py /usr/lib/python3.13/site-packages/click_extra/test_plan.py /usr/lib/python3.13/site-packages/click_extra/test_suite.py /usr/lib/python3.13/site-packages/click_extra/testing.py /usr/lib/python3.13/site-packages/click_extra/theme.py /usr/lib/python3.13/site-packages/click_extra/theme_docs.py /usr/lib/python3.13/site-packages/click_extra/themes.toml /usr/lib/python3.13/site-packages/click_extra/tree.py /usr/lib/python3.13/site-packages/click_extra/types.py /usr/lib/python3.13/site-packages/click_extra/version.py /usr/share/doc/packages/python313-click-extra /usr/share/doc/packages/python313-click-extra/readme.md /usr/share/libalternatives/click-extra /usr/share/libalternatives/click-extra/1313.conf /usr/share/licenses/python313-click-extra /usr/share/licenses/python313-click-extra/license
Generated by rpm2html 1.8.1
Fabrice Bellet, Sun Aug 2 03:14:27 2026