Releases: kdeldycke/click-extra
Releases · kdeldycke/click-extra
v7.17.2
Immutable
release. Only release title and notes can be modified.
- 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/@groupdefault-option bundle (commands.md),--color/--no-colorANSI enablement (colorize.md), the{version}and{exec_name}fallback chains (version.md), thedecorator_factorysubclass 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
Immutable
release. Only release title and notes can be modified.
- Bundle
click_extra/themes.tomlinto the Nuitka standalone binaries via a new[tool.nuitka]include-package-datasetting. The7.17.0binaries aborted at startup withFileNotFoundError: themes.tomlbecause the data file backing the built-in themes was not packaged, so Nuitka could not find it whenclick_extra.themeloaded it throughimportlib.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
Immutable
release. Only release title and notes can be modified.
- 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_STYLESfrozensets inclick_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, andsearchdrop their bold;criticalkeeps it, as it is the only cue distinguishing it fromerror. Inlightandsolarized_dark,headingis 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
manpagebuilt-in theme: a colorless palette rendering the same bold-literal / italic-replaceable convention with no color, shadowing howman-pages(7)typesets a command. Selectable via--theme manpage. HelpCommandnow raisesclick.NoSuchCommandinstead ofclick.UsageErrorwhen 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. Click8.4.0(PR pallets/click#3423) injects a space between an option's help text and its(DEPRECATED)label. The8.4.1floor (not8.4.0) is required because Click8.4.0(PR pallets/click#3404) delayedset_parameter_sourceuntil afterprocess_value, so eager callbacks that introspectctx.get_parameter_source(self.name)readNoneand missed whether the option was set from the command line, environment, or default. This brokeColorOption'sNO_COLOR/FORCE_COLORprecedence detection,ConfigOption's explicit-vs-autodiscover branching, andShowParamsOption'sSourcecolumn. Click8.4.1(PR pallets/click#3484) restores the pre-8.4.0contract. - Remove the
HelpExtraFormatter.write_usageoverride. Click8.4.0(PR pallets/click#3420) madeTextWrappermeasure visible width instead of raw bytes, so the 24-bit-RGB-theme wrap workaround is no longer needed. - Drop the explicit
type=UNPROCESSEDfromNoConfigOption.__init__. Click8.4.0(PR pallets/click#3363) auto-detectsUNPROCESSEDforflag_valuewith non-basic types, so theflag_value=NO_CONFIGsentinel reachesOptionunchanged on its own. - Bump the
requestsfloor to2.34. Requests2.34.0ships inline type annotations, so thetypes-requestsstub package is no longer needed and has been removed from thetypingdependency group. - Bump the
myst-parserfloor in thedocsdependency group to5.1. Doc builds now usemyst-parser's native"alert"syntax extension (added in5.1.0) instead of the in-tree regex converter inclick_extra.sphinx.alerts;"alert"is added tomyst_enable_extensionsindocs/conf.py. The in-tree converter remains in place for the base test dependency group, wheremyst-parser>=4still resolves to4.xon Python 3.10. - Drop the
coloramatest-matrix variation. Click PR pallets/click#3505 merged the Colorama-removal branch intostable, 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
Immutable
release. Only release title and notes can be modified.
- Fix
ConfigOptionmutating its cachedparams_templatewhen merging user configuration._recursive_updateupdates 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--configinto the current invocation'sdefault_map. Both the--configload path and--validate-confignow 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
Immutable
release. Only release title and notes can be modified.
- Theme system overhaul. Four branded palettes join the built-in catalog:
solarized_dark(Ethan Schoonover),dracula(Zeno Rocha),nord(Arctic Ice Studio), andmonokai(Wimer Hazenberg), hand-curated for the semantic roles click-extra exposes (option, metavar, choice, deprecated, envvar, …). The full catalog now ships asclick_extra/themes.toml(a TOML data file) instead of Python subclasses, loaded at import time viaimportlib.resourcesfor proper wheel/zipapp support.BUILTIN_THEMESis the single public dict of{name: HelpExtraTheme}; access individual palettes viaBUILTIN_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: theclick_extra.themesmodule is removed (import fromclick_extraorclick_extra.theme); the six per-theme UPPER_CASE constants (DARK,DRACULA,LIGHT,MONOKAI,NORD,SOLARIZED_DARK) are removed (useBUILTIN_THEMES["<name>"]instead). - Breaking:
default_thememodule attribute replaced by theget_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) captureddefault_theme.invoked_commandas a default function parameter, so later overrides viawrap.patch_click()didn't propagate. The function pair always observes the current value.click_extra.wrap.patch_click()now callsset_default_theme(). - Breaking:
OKandKOpre-rendered constants removed. They were frozen at import time against the dark theme, so--theme lightinvocations still showed dark-themed glyphs in--show-paramsoutput. Replaced withOK_GLYPH = "✓"andKO_GLYPH = "✘"raw strings; style at the call site viaget_current_theme().success(OK_GLYPH)/.error(KO_GLYPH)so the rendering follows the active theme. - Breaking:
theme_registryno longer accepts aCallable[[], HelpExtraTheme]value; onlyHelpExtraThemeinstances are valid entries. The runtime-detection-via-callable pattern was documented but never used; loading themes from--configis the supported equivalent (see Themes from your--configfile). - New
ThemeChoiceis now a freshclick.ParamType(not aclick.Choicesubclass), exposing the samechoices/case_sensitive/normalize_choiceduck-type interface soclick_extra.colorizekeeps per-choice token coloring. Avoids the fragile no-op setter the previous subclass design relied on. - New
TELEMETRYcontext-meta key inclick_extra.context;TelemetryOptionnow writes the reconciled value toctx.meta[click_extra.context.TELEMETRY]instead of an ad-hocctx.telemetryattribute, aligning with every other option's storage pattern. Breaking: consumers readingctx.telemetrydirectly must switch tocontext.get(ctx, context.TELEMETRY). - Callback method renames for harmonized verb taxonomy (
set_<key>writes toctx.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_colorandThemeOption.set_themeare now bound methods (not@staticmethod). - New
click_extra.stylingmodule — a feature-richStylesubclass ofcloup.Style, transparently shadowed asfrom 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 operatora | 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 aStyle;contrast_ratio(other)for WCAG 2.x luminance ratio. Equality and hash ignore the lazy_style_kwargscache so identical styles compare equal regardless of call history. WCAG AA Large contrast gates added for all branded themes. The module also exposesfields_to_dict,dict_to_fields, andcascade_fieldsas shared dataclass-roundtrip helpers used internally by bothStyleandHelpExtraTheme. HelpExtraThemegainsto_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.--confignow reads user-defined theme palettes from the config file. Every[<cli>.themes.<name>]table (or[tool.<cli>.themes.<name>]inpyproject.toml) is parsed viaHelpExtraTheme.from_dictand available to--themefor the current invocation. Known names cascade on top of the matching built-in; unknown names become stand-alone themes. The registry update lands onctx.metaunderclick_extra.context.THEME_OVERRIDESand never mutates the module-leveltheme_registry, so back-to-back invocations don't cross-contaminate. A built-inConfigValidatorfor thethemesextension path is auto-registered on everyConfigOption, so malformed entries surface asValidationErrorwith a rooted path during--validate-configand at normal load time.wrapinherits the same behavior automatically.--themenow usesThemeChoice, aclick.Choicesubclass whosechoicesproperty reads the live registry (global plus per-context overrides) at every lookup. Themes loaded from--configappear as valid choices and in the--helpmetavar with no extra wiring. Subclassingclick.Choicepreserves the per-token colorization thatclick_extra.colorizealready 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 dottedextension_pathto a callable that inspects the matching sub-tree),ValidationError(rootedpath,message, optionalcode), and theEXTENSION_METADATA_KEYdataclass-field flag for marking extension points whose Python type isn't a mapping. Validators are registered through a newconfig_validators=kwarg onExtraCommand/ExtraGroup(and the@command/@group/@config_optiondecorators), and run during both--validate-configand normal--configloading. Schema-typeddict[str, X]fields are also recognized as extension points.--validate-confignow collects every error before exiting and surfaces all failures with the sameValidationErrorshape. - Flip the
AnsiColorLexer.true_colordefault toTrue. 24-bit RGB sequences now render as inlinestyle="color: #rrggbb"spans by default in Sphinx, MkDocs, andpygmentizeoutput. Behavior change for downstream HTML: documents that previously usedAnsi-C{n}CSS classes now use inline RGB styles. The old behavior is still available asAnsiColorLexer(true_color=False). Add:emphasize-result-lines:option toclick:runandpython:runSphinx directives so authors can highlight specific lines in the captured output independently of:emphasize-lines:on the source block. FixHelpExtraFormatter.write_usageto bypass Click'swrap_textwhen 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 unrelatedpyproject.toml(like a dotfiles repo's[tool.ruff]) no longer shadows the user's app-dir config. - Fix
ExtraVerbosity.set_level()to no-op duringctx.resilient_parsing, preventing spurious logger level changes during help rendering, shell completion, and anymake_context(resilient_parsing=True)path. Fixreset_loggersdouble-registration: when both--verbosityand-vare passed, the close callback is now registered at most once per invocation via a sentinel inctx.meta. - Inner bracket-field slots (
envvar,default,required,range_label) fall back to thebracketslot's style when left atidentity. A theme that sets onlybracketnow 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.alertsnow thatmyst-parser5.1.0ships a native"alert"syntax extension.click_extra.sphinx.setup()registers the regex-based GitHub-alerts converter only when the installedmyst-parseris below the newMYST_NATIVE_ALERTS_VERSIONconstant (Version("5.1.0")); on newer releases it logs a migration notice pointing atmyst_enable_extensions = [..., "alert"]and skips the hook. The converter also emits a% empty alert bodyMyST comment placeholder so a bare> [!TIP]renders as a title-only admonition, matchingmyst-parser5.1+'s output instead of being silently dropped. Slated for removal once themyst-parserfloor moves to>=5.1. - Relax
default_config_file_patterninclick_extra.pytestto make*.json5and*.jsoncoptional 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... |
v7.15.0
Immutable
release. Only release title and notes can be modified.
- Add opt-in 24-bit true-color rendering to the ANSI Pygments stack. Pass
true_color=TruetoAnsiColorLexer,AnsiFilter, or any session lexer (likeget_lexer_by_name("ansi-shell-session", true_color=True)) to preserveSGR 38;2;r;g;band48;2;r;g;bsequences asToken.Ansi.FG_{rrggbb}/Token.Ansi.BG_{rrggbb}tokens instead of quantizing them to the 256-color palette.AnsiHtmlFormatterrenders those tokens as inlinestyle="color: #rrggbb"/style="background-color: #rrggbb"spans. The default behavior (256-color quantization) is unchanged. - New
click_extra.thememodule centralizes all theme machinery:HelpExtraTheme,default_theme,nocolor_theme,OK,KO,ThemeOption,theme_optiondecorator,theme_registry, andregister_theme(). Every click-extra command now accepts--theme [dark|light]; downstream consumers can extend the choice list viaregister_theme(). The active theme for a CLI run is stored inctx.meta[context.THEME]byThemeOptionand retrieved viaget_current_theme(), so back-to-back invocations in the same process (Sphinx builds, test runners, REPLs) no longer leak--themechoices into each other. Thewrapsubcommand reads the theme from the parent group's context rather than carrying its own--theme. Adds a correspondingdocs/theme.mduser guide. Breaking: downstream code importing theme symbols directly fromclick_extra.colorizemust update toclick_extra.theme; the canonicalfrom click_extra import HelpExtraThemepath is unaffected. - New
click_extra.contextmodule consolidatesExtraContext(moved fromclick_extra.commands) and a documented registry of everyctx.metakey Click Extra writes or reads:RAW_ARGS,CONF_SOURCE,CONF_FULL,TOOL_CONFIG,VERBOSITY_LEVEL,VERBOSITY,VERBOSE,START_TIME,JOBS,TABLE_FORMAT,SORT_BY, andTHEME. Theget()andset()helpers replace scatteredctx.meta.get(key, ...)calls throughout the codebase. Replaces the formerclick_extra.ctx_metamodule. Breaking:from click_extra.commands import ExtraContextandfrom click_extra import ctx_metamust be updated tofrom click_extra.context import ExtraContextandfrom click_extra import contextrespectively; the canonicalfrom click_extra import ExtraContextpath is unaffected. - Add
python:source,python:run,python:render,python:render-myst, andpython:render-rstSphinx directives under a newpythondomain inclick_extra.sphinx. They mirrorclick:source/click:runfor arbitrary Python (no Click CLI required):python:sourceruns silently and shows source,python:runcapturesstdoutand renders it in a code block (default lexertext, override via:language:), and therenderfamily parses the capturedstdoutas live document content: generated tables, headings, admonitions, and cross-references become first-class document nodes rather than a code block.python:renderuses the host file's parser;python:render-mystforces MyST parsing (so a.rsthost can embed MyST-generated content);python:render-rstforces reST parsing (so a.mdhost can embed reST-generated content). The Python and Click runners hold independent per-document namespaces. The render family replaces thedocs_update.pyregenerator + 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:*andpython:*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 importsclick_extra.sphinxsilently expanded the attack surface of every consumer. To re-enable, addclick_extra_enable_exec_directives = Truetoconf.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, andpython:render-rstare not registered and any reference to them produces an "Unknown directive" warning at build time. - Tighten Click floor from
8.1to8.3.1. The relaxation in7.14.1went further than needed;8.3.1is the minimum that ships the parameter-name fix we depend on. - Move
--covand--cov-report=termfrompyproject.toml[tool.pytest].addoptsinto the CI workflow. Removespytest-covas an unconditional test-time dependency for downstream packagers. - Move
tests/test_mkdocs.pyintotests/mkdocs/. Downstream packagers can skip it with--ignore=tests/mkdocswithout pulling inmkdocs-click. - Loosen
default_debug_*_version_detailsregex helpers to also matchNoneforgit_long_hash,git_short_hash, andgit_date. Lets debug-output tests pass when the source tree has no.gitdirectory (Guixgit-fetch, sdist installs). - Mark
test_ansi_lexers_candidateswith the newnetworkmarker. Sandboxed builds can exclude it withpytest -m "not network". - Make
tests/test_table.pytolerate tabulate<0.10: branch the asciidoc fixture on the cell-alignment marker (<8vs8<) and skip thecolon-gridparametrize case when the format is aliased togrid.
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
Immutable
release. Only release title and notes can be modified.
- Relax Click requirement back to
8.1. ReplaceParameterSourceordered comparisons inConfigOptionwith explicit set membership so the code works on both the regularEnum(Click8.1/8.2) and theIntEnum(Click8.3+). - Relax tabulate requirement back to
0.9. Backport thecolon_gridformat by aliasing it togridat module load when tabulate< 0.10is 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
Immutable
release. Only release title and notes can be modified.
- Add
wrapsubcommand:click-extra wrap SCRIPT [ARGS]...applies help colorization to any installed Click CLI without modifying its source. Supports--themeoption and[tool.click-extra.wrap.<script>]config sections for persistent CLI defaults. Resolves SCRIPT via console_scripts entry points,module:functionnotation,.pyfile paths, or bare module names. Unknown subcommand names fall through towrapautomatically, soclick-extra flask --helpworks without typingwrap.runis kept as an alias. - Add
show-paramssubcommand:click-extra show-params SCRIPT [SUBCOMMAND]...introspects any external Click CLI's parameters and displays them as a table. Supports all--table-formatrenderings. Drills into nested subcommands. Auto-discovers the Click command when the entry point is a wrapper function. - Style
Spec.column withoptiontheme (cyan) andPython typewithmetavartheme (cyan dim) in both--show-paramsandshow-params, matching help-screen conventions. - Add
get_param_spec()andformat_param_row()as public API inclick_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-paramsandshow-paramstables. - Make
ParamStructure.get_param_type()a@staticmethod. Returnsstrfor unrecognised custom types instead of raisingValueError. - Replace
render-matrixsubcommand with individualcolors,styles,palette,8color, andgradientsubcommands grouped under a "Demo" section. Remove theclick-extra-demoentry point. - Move Sphinx tests into
tests/sphinx/. Downstream packagers can skip them with--ignore=tests/sphinxwithout pulling in Sphinx dependencies. - Bump Click requirement to
8.3.3. SimplifyParameterSourcecomparisons inConfigOptionusing the newIntEnumordering.
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
Immutable
release. Only release title and notes can be modified.
- Add MkDocs plugin for ANSI color rendering in code blocks. Install with
pip install click-extra[mkdocs], then addclick-extrato yourmkdocs.ymlplugins list. Patchespymdownx.highlightformatters to useAnsiHtmlFormatter. - Automatically patch
mkdocs-clickcode blocks to use theansi-outputlexer when theclick-extraMkDocs plugin is enabled. CLI help text with ANSI escape codes now renders with colors instead of garbled[1m/[0msequences. - Fix API reference sections rendering as raw RST markup instead of formatted documentation. Wrap all
automoduleandautoclasstreedirectives ineval-rstblocks to force RST parsing, working around MyST-Parser'sMockState.nested_parse()treating autodoc output as Markdown. - Add OSC 8 hyperlink support to
AnsiColorLexerandAnsiHtmlFormatter. 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
Immutable
release. Only release title and notes can be modified.
- Add
JobsOptionandjobs_optiondecorator 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
-dbgwrongcharacter by character and reports "No such option: -d",ExtraCommandnow catches that and re-raises with the full token and close-match suggestions. - Replace
pygments-ansi-colordependency 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 fromToken.Color.*/Token.C.*to a unifiedToken.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 injectedcolor: #D0D0D0fallbacks for every Pygments style dict entry, overriding foreground color rules on compound tokens. All SGR attribute CSS is now injected separately viaEXTRA_ANSI_CSS. - Rename
lexer_maptoLEXER_MAP. - Change
render-matrix --matrix=<choice>option to a positional argument:render-matrix <choice>. Addpalette,8color, andgradientchoices.paletteshows a compact 256-color indexed swatch.8colorshows all standard foreground/background combinations.gradientrenders 24-bit RGB gradients alongside their 256-color quantized equivalents to visualize the palette resolution limits. - Fix
render-matrix colorsbackground 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 |