Skip to content

Releases: mcanouil/quarto-completions

2026-08-06

Choose a tag to compare

@mcanouil-dev mcanouil-dev released this 06 Aug 05:02
3a81a22

Install

macOS and Linux:

curl -fsSL https://m.canouil.dev/quarto-completions/install.sh | bash

Windows:

powershell -ExecutionPolicy ByPass -c "irm https://m.canouil.dev/quarto-completions/install.ps1 | iex"

Both installers always fetch the latest published completions rather than anything pinned to this release; see https://m.canouil.dev/quarto-completions.

To install offline, or to pin this release, download quarto-completions-2026.08.06.tar.gz or quarto-completions-2026.08.06.zip below.
Each holds one directory per channel, with the manifest.json carrying the SHA-256 of every file beside it.

Changelog

New Features

  • feat: publish the release and pre-release lines under their own minor as well, so 1.10 and 1.11 sit beside release and pre-release and every Quarto minor from 1.9 onwards has a channel that stays on one line.
    release and pre-release are rolling aliases and change what they hold the moment Quarto ships a minor; a pinned install or a hand-written URL can now name the line instead.
  • feat: record what each channel was built from, as a source object in spec.json and manifest.json and as one line in every script's header: the release tag on a released channel, and the quarto-dev/quarto-cli branch and commit on dev.
    A source build reports 99.9.9, so until now nothing on an installed dev completion said which commit its command surface came from.
  • feat: attach the completions to every release, as quarto-completions-<version>.tar.gz and .zip, each holding one directory per channel with its manifest.
    The installers are unchanged: they still read the published site, so the archives are for installing offline or pinning a version by hand.

Bug Fixes

  • fix: name the channel, and the channels that exist, when one asked for by --channel or -Channel has nothing published, rather than stopping on curl's bare 404 or PowerShell's raw web exception.
    A channel that was named is never swapped for another one, which is what auto-detection does when it finds no completions for the local Quarto's minor; --dry-run now refuses the same channels a real run would, where it used to print a plan for one that could never be installed.
  • fix: stop zsh offering -J, -M, -default-, and the completion matcher itself as candidates beside a flag's or positional's values, such as the providers of quarto publish.
    _arguments hands an action the compadd options it built for that argument before the values, and they were read as values; a matcher only showed up where a matcher-list style is set, which is any Oh My Zsh.

What's Changed

  • docs: list what each channel publishes by @mcanouil in #19
  • fix: stop zsh listing its own compadd options as enum values by @mcanouil in #20
  • feat: publish the release and pre-release lines under their own minor by @mcanouil in #21
  • feat: record what each channel was built from by @mcanouil in #22
  • fix: name the channel when one asked for is not published by @mcanouil in #23
  • ci: bump version for release 🚀 by @mcanouil-dev[bot] in #25

Full Changelog: 2026.08.05...2026.08.06

2026-08-05

Choose a tag to compare

@mcanouil-dev mcanouil-dev released this 05 Aug 15:49
94a1abb

Install

macOS and Linux:

curl -fsSL https://m.canouil.dev/quarto-completions/install.sh | bash

Windows:

powershell -ExecutionPolicy ByPass -c "irm https://m.canouil.dev/quarto-completions/install.ps1 | iex"

Both installers always fetch the latest published completions rather than anything pinned to this release; see https://m.canouil.dev/quarto-completions.

Changelog

New Features

  • feat: complete Quarto CLI commands and flags in bash, zsh, fish, and PowerShell.
    Every candidate is baked into the script, so pressing Tab runs no process, where the completions Quarto ships behind a hidden command spawn a cold Quarto start on every keypress and return nothing for options declared without a value type.
  • feat: complete values, not only flag names: output formats for --to, log levels, publishing providers, installable tools, check targets, rendering engines, and the Pandoc options Quarto forwards from render and preview.
    Attached and spaced spellings both work, so quarto render --to=html completes like quarto render --to html.
  • feat: filter input positionals to .qmd, .ipynb, .md, .Rmd, and .markdown alongside directories, tracking positional slots so quarto publish gh-pages offers a path rather than a second provider.
  • feat: publish a release and a pre-release channel, generated from the two Quarto release channels, each with a manifest carrying the Quarto version and a checksum per file.
    The names match the vocabulary quarto-actions/setup already uses.
  • feat: publish a dev channel, generated from a Quarto source build, completing the commands Quarto hides from quarto --help: dev-call and its subcommands, inspect, capabilities, create-project, editor-support, completions, and every subcommand of tools.
    Hidden commands cannot be found by walking help output, so they are seeded by path and introspected directly; both installers select this channel automatically when the quarto on PATH reports version 99.9.9, which is what a source build reports and a release never does.
  • feat: publish an archived channel for every Quarto minor from 1.9 onward, generated from that line's newest patch.
    With no --channel given, the installer matches the local Quarto's own minor when it is published, falling back to release; the most recently archived minor is refreshed weekly against a late patch, and older ones are frozen.
  • feat: install with one line, curl -fsSL https://m.canouil.dev/quarto-completions/install.sh | bash on macOS and Linux and powershell -ExecutionPolicy ByPass -c "irm https://m.canouil.dev/quarto-completions/install.ps1 | iex" on Windows.
    Both write under the user's home directory, never call sudo, verify each file against the published SHA-256 before writing, and support --dry-run, --uninstall, and --help.
  • feat: write each shell's file where that shell will actually find it: $XDG_DATA_HOME/bash-completion/completions for bash where it exists, $ZSH_CUSTOM/completions under Oh My Zsh, Homebrew's share/zsh/site-functions where the prefix has one and it is writable, ~/.zfunc otherwise, and fish's autoloaded completions directory.
    The first three need no configuration at all.
  • feat: keep every shell configuration edit inside a managed block that re-running replaces and --uninstall removes.
    A block whose closing marker is missing is refused rather than rewritten, on install, on uninstall, and in --dry-run alike; an rc file that is a symlink stays a symlink, and a PowerShell profile carrying no block is left byte-identical.
  • feat: keep a later install where the first one landed, so installing Oh My Zsh, Homebrew, or bash-completion afterwards updates the copy already on disk rather than moving it.
    The other known locations are swept so nothing shadows it, and a stale copy that cannot be removed, such as one in a Homebrew prefix owned by another user, is reported rather than fatal.
  • feat: leave an unchanged script alone.
    The published manifest is enough to tell that the installed file is already the one that would be written, so re-running over an unchanged release reports Already current and downloads nothing.
  • feat: warn when the quarto on PATH does not match the completions being installed.
    Both installers compare major and minor versions only; a patch difference, the dev sentinel, or no quarto on PATH says nothing, and the install always succeeds.
  • feat: end an install by naming a command that loads what was just written: exec bash rather than exec bash -l, because a login bash reads ~/.bash_profile, ~/.bash_login, or ~/.profile and never falls back to the ~/.bashrc the block goes in.
    Where none of those exists, the default on macOS, or the first one bash finds never mentions .bashrc, the install says so and gives the line that fixes it rather than writing anything itself.
  • feat: report the shells an install is not maintaining, since each run maintains only the shell $SHELL names.
    The version and channel stamped in every generated script is read back from whatever is installed for the other shells, and a mismatch is named along with the command that updates it; a file carrying no stamp, or one that cannot be read, is left alone.
  • feat: generate the scripts by walking quarto <command> --help over the whole command tree, run with quarto run src/generate.ts.
    The generator uses Quarto's own embedded runtime, so an installed Quarto is its only dependency, and --check fails when the committed output is stale.

Documentation

  • docs: add a documentation website at https://m.canouil.dev/quarto-completions, covering installation, the file and configuration each shell needs, the channels, and troubleshooting.
  • docs: give the website its own identity on the atelier project type: a terminal-green palette that follows the light and dark colour schemes, a mark derived from the Quarto quadrant with the fourth pane left for Tab to complete, and the favicon, touch icon, web app manifest, and social card generated from it.
    Code blocks carry window chrome naming the shell, the navbar links to issues, discussions, and releases through a repository widget, and a 404 page replaces the server default.
  • docs: add a security policy covering how to report a vulnerability, what is in scope, and the trust boundaries that are design limits rather than bugs.

What's Changed

  • feat: generate static shell completions for the Quarto CLI by @mcanouil in #1
  • docs: write the changelog entries in conventional commit style by @mcanouil in #2
  • docs: rebrand the website onto atelier with its own identity by @mcanouil in #3
  • fix: install zsh completions where the shell will actually find them by @mcanouil in #4
  • feat: update the completion script wherever it already lives by @mcanouil in #5
  • fix: complete attached flag values and harden the installers by @mcanouil in #6
  • feat: add a dev completion channel for Quarto's hidden commands by @mcanouil in #7
  • feat: warn when the installed Quarto does not match the completions by @mcanouil in #8
  • fix: harden the installers against data loss and silent failure by @mcanouil in #9
  • fix: report an unterminated managed block in --dry-run by @mcanouil in #10
  • docs: rewrite the changelog as first-release notes by @mcanouil in #11
  • fix: name a reload command that loads what was installed by @mcanouil in #12
  • ci: bump version for release 🚀 by @mcanouil-dev[bot] in #13
  • feat: publish a channel per Quarto minor; rename stable/prerelease by @mcanouil in #14
  • ci: bump version for release 🚀 by @mcanouil-dev[bot] in #15
  • ci: bump version for release 🚀 by @mcanouil-dev[bot] in #18

New Contributors

Full Changelog: https://github.com/mcanouil/quarto-completions/commits/2026.08.05