Skip to content

Releases: kdeldycke/click-extra

v7.17.2

26 May 00:38
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

  • 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).

Full changelog: v7.17.1...v7.17.2


🛡️ VirusTotal scans

Binary Detections Analysis
click-extra-7.17.2-linux-arm64.bin 0 / 63 View scan
click-extra-7.17.2-linux-x64.bin 1 / 61 View scan
click-extra-7.17.2-macos-arm64.bin 0 / 62 View scan
click-extra-7.17.2-macos-x64.bin 0 / 63 View scan
click-extra-7.17.2-windows-arm64.exe 1 / 68 View scan
click-extra-7.17.2-windows-x64.exe 5 / 70 View scan

v7.17.1

25 May 14:10
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

  • 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.

Full changelog: v7.17.0...v7.17.1


🛡️ VirusTotal scans

Binary Detections Analysis
click-extra-7.17.1-linux-arm64.bin 0 / 57 View scan
click-extra-7.17.1-linux-x64.bin 1 / 55 View scan
click-extra-7.17.1-macos-arm64.bin 0 / 60 View scan
click-extra-7.17.1-macos-x64.bin 0 / 49 View scan
click-extra-7.17.1-windows-arm64.exe 1 / 69 View scan
click-extra-7.17.1-windows-x64.exe 5 / 68 View scan

v7.17.0

25 May 12:14
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

  • 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.

Full changelog: v7.16.1...v7.17.0


🛡️ VirusTotal scans

Binary Detections Analysis
click-extra-7.17.0-linux-arm64.bin 0 / 52 View scan
click-extra-7.17.0-linux-x64.bin 0 / 59 View scan
click-extra-7.17.0-macos-arm64.bin 1 / 60 View scan
click-extra-7.17.0-macos-x64.bin pending View scan
click-extra-7.17.0-windows-arm64.exe 1 / 68 View scan
click-extra-7.17.0-windows-x64.exe 5 / 71 View scan

v7.16.1

15 May 07:10
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Note

7.16.1 is available on 🐍 PyPI and 🐙 GitHub.

  • 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.

Full changelog: v7.16.0...v7.16.1


🛡️ VirusTotal scans

Binary Detections Analysis
click-extra-7.16.1-linux-arm64.bin 1 / 63 View scan
click-extra-7.16.1-linux-x64.bin 1 / 64 View scan
click-extra-7.16.1-macos-arm64.bin 1 / 62 View scan
click-extra-7.16.1-macos-x64.bin 0 / 63 View scan
click-extra-7.16.1-windows-arm64.exe 1 / 69 View scan
click-extra-7.16.1-windows-x64.exe 22 / 68 View scan

v7.16.0

14 May 20:42
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Note

7.16.0 is available on 🐍 PyPI and 🐙 GitHub.

  • 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_colorsset_color (also fixes the misleading name — the callback handles enable too); TelemetryOption.save_telemetryset_telemetry; TimerOption.register_timer_on_closeinit_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.

Full changelog: v7.15.0...v7.16.0


🛡️ VirusTotal scans

Binary Detections Analysis
[click-extra-7.16.0-linux-arm64.bin](https://github.com/kd...
Read more

v7.15.0

03 May 15:47
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Note

7.15.0 is available on 🐍 PyPI and 🐙 GitHub.

  • 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.

Full changelog: v7.14.1...v7.15.0


🛡️ VirusTotal scans

Binary Detections Analysis
click-extra-7.15.0-linux-arm64.bin 0 / 62 View scan
click-extra-7.15.0-linux-x64.bin 1 / 63 View scan
click-extra-7.15.0-macos-arm64.bin 4 / 61 View scan
click-extra-7.15.0-macos-x64.bin 1 / 62 View scan
click-extra-7.15.0-windows-arm64.exe 1 / 68 View scan
click-extra-7.15.0-windows-x64.exe 20 / 69 View scan

v7.14.1

26 Apr 21:22
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Note

7.14.1 is available on 🐍 PyPI and 🐙 GitHub.

  • 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.

Full changelog: v7.14.0...v7.14.1


🛡️ VirusTotal scans

Binary Detections Analysis
click-extra-7.14.1-linux-arm64.bin 0 / 63 View scan
click-extra-7.14.1-linux-x64.bin 0 / 64 View scan
click-extra-7.14.1-macos-arm64.bin 4 / 62 View scan
click-extra-7.14.1-macos-x64.bin 2 / 63 View scan
click-extra-7.14.1-windows-arm64.exe 1 / 69 View scan
click-extra-7.14.1-windows-x64.exe 22 / 71 View scan

v7.14.0

24 Apr 13:35
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Note

7.14.0 is available on 🐍 PyPI and 🐙 GitHub.

  • 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.

Full changelog: v7.13.0...v7.14.0


🛡️ VirusTotal scans

Binary Detections Analysis
click-extra-7.14.0-linux-arm64.bin 0 / 63 View scan
click-extra-7.14.0-linux-x64.bin 0 / 64 View scan
click-extra-7.14.0-macos-arm64.bin 4 / 62 View scan
click-extra-7.14.0-macos-x64.bin 2 / 63 View scan
click-extra-7.14.0-windows-arm64.exe 1 / 69 View scan
click-extra-7.14.0-windows-x64.exe 23 / 71 View scan

v7.13.0

16 Apr 16:18
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Note

7.13.0 is available on 🐍 PyPI and 🐙 GitHub.

  • 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.

Full changelog: v7.12.0...v7.13.0


🛡️ VirusTotal scans

Binary Detections Analysis
click-extra-7.13.0-linux-arm64.bin 0 / 64 View scan
click-extra-7.13.0-linux-x64.bin 0 / 65 View scan
click-extra-7.13.0-macos-arm64.bin 3 / 61 View scan
click-extra-7.13.0-macos-x64.bin 2 / 64 View scan
click-extra-7.13.0-windows-arm64.exe 1 / 70 View scan
click-extra-7.13.0-windows-x64.exe 21 / 71 View scan

v7.12.0

16 Apr 04:50
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Note

7.12.0 is available on 🐍 PyPI and 🐙 GitHub.

  • 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.

Full changelog: v7.11.0...v7.12.0


🛡️ VirusTotal scans

Binary Detections Analysis
click-extra-7.12.0-linux-arm64.bin 0 / 64 View scan
click-extra-7.12.0-linux-x64.bin 0 / 64 View scan
click-extra-7.12.0-macos-arm64.bin 3 / 62 View scan
click-extra-7.12.0-macos-x64.bin 0 / 64 View scan
click-extra-7.12.0-windows-arm64.exe 1 / 67 View scan
click-extra-7.12.0-windows-x64.exe 22 / 72 View scan