diff --git a/CHANGELOG.md b/CHANGELOG.md index 42f51ca..fad348d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,39 @@ # Changelog +## 0.9.0 — 2026-10-01 + +### Added +- **More platforms.** Static musl builds for x86_64, ARM64 and ARMv7 — Alpine, Debian 11, Ubuntu 20.04, RHEL 8, NixOS, containers and 32-bit Raspberry Pi — and a native Windows ARM64 build. The Windows binaries no longer need the Visual C++ runtime. (#19) +- **Smarter installers.** `install.sh` picks the right binary for your libc and CPU, supports `INK_VERSION` pinning, works with `wget`, and no longer depends on the rate-limited GitHub API. New `install.ps1` for Windows. (#19) +- **Man page and shell completions** ship in the `.deb`/`.rpm` and in new `.tar.gz`/`.zip` release archives. Release assets carry a build-provenance attestation (`gh attestation verify`). (#19) +- **`--color auto|always|never`.** Piped `--plain` output is clean text by default, `ink file.md | cat` prints the document instead of failing, and `ink -` reads stdin. Previews that want colour in a pipe (fzf, `less -R`) pass `--color=always`. (#17) +- **Anchor links.** `#heading` and `file.md#heading` jump to the heading, as do `[[page#section]]` and `[[#section]]` wikilinks, and every followed link goes into back/forward history with its scroll position. A link that cannot be followed now says so. (#16, #21) +- **Light/dark auto-detection** by asking the terminal for its background colour, so light-profile terminals get a light theme without configuration. (#20) +- **`--ascii` mode and a 16-colour tier** for the Linux console, legacy console fonts and screen readers; both switch on automatically where needed. With `--color=never` or `NO_COLOR` the reader uses no colour at all. (#20) +- **`--no-mouse`** leaves the mouse to the terminal for one session, and the file browser now honours `mouse_capture`. (#20) +- **`ink doctor` reports the whole environment** — colour, theme, clipboard, input, config and multiplexer facts, with home paths and session values redacted. (#20) + +### Fixed +- **Every key acted twice on Windows.** Key-release events are now ignored. (#16) +- **Hard line breaks glued words together** (`hard⏎break` rendered as `hardbreak`); they now start a new line, in tables too. (#18) +- **HTML blocks no longer lose text or print raw tags.** Headings, links, images, `
`, ``, `
` and entities render; comments are dropped. A GitHub-style centered README header now reads as a title. (#18) +- **Wikilinks inside code are left untouched**, and targets with spaces or parentheses work. (#18) +- **The terminal is restored after SIGTERM, SIGHUP and SIGINT** instead of being left in raw mode. (#16) +- **The file browser no longer hangs on symlink loops.** (#16) +- **Config and flag errors are reported.** A bad line in `config.toml` prints a warning and the rest still applies; invalid `--width`, `--spacing` and `--image-protocol` values are errors. (#17) +- **Copying non-ASCII text works on Windows and WSL**; Termux and GNU screen clipboards are supported. (#20) +- **No startup stall** in Apple Terminal or on the Linux console, where the image-protocol probe is now skipped. (#20) + +### Security +- **Deeply nested documents can no longer crash ink** with a stack overflow; a 20 KB file used to. (#18) +- **Image decode limits** stop decompression bombs: a document with six hostile inline images went from 2.2 GB of memory to 34 MB. Tall screenshots and large photos still decode. (#17, #21) +- **`ink outline` and `ink diff` no longer pass escape sequences** from the document to the terminal. (#17) + +### Changed +- `NO_COLOR` now also drops bold and underline in `--plain`. +- The unused C regex dependency (oniguruma) is gone; syntax highlighting runs on the pure-Rust engine. +- The minimum supported Rust version is declared as 1.90. + ## 0.8.0 — 2026-10-01 ### Added diff --git a/Cargo.lock b/Cargo.lock index 25fe178..beabfe5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1520,7 +1520,7 @@ dependencies = [ [[package]] name = "ink-md" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index d79713a..9c3dd19 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ink-md" -version = "0.8.0" +version = "0.9.0" edition = "2021" # Highest rust-version declared by any resolved dependency (quantette, via # ratatui-image). CI's msrv job builds with exactly this toolchain. @@ -119,7 +119,7 @@ pkg-url = "{ repo }/releases/download/v{ version }/ink-macos-arm64" [package.metadata.binstall.overrides.x86_64-pc-windows-msvc] pkg-url = "{ repo }/releases/download/v{ version }/ink-windows-amd64.exe" -# Static musl builds and Windows ARM64 (first published after v0.8.0). +# Static musl builds and Windows ARM64 (first published in v0.9.0). [package.metadata.binstall.overrides.x86_64-unknown-linux-musl] pkg-url = "{ repo }/releases/download/v{ version }/ink-linux-amd64-musl" diff --git a/README.md b/README.md index 7e4a1c8..7c0ce6e 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ curl -fsSL https://raw.githubusercontent.com/borghei/ink/main/install.sh | sh The installer picks the right binary for your OS, CPU and libc (static musl build on Alpine, Raspberry Pi and older-glibc systems), checks it against `SHA256SUMS` and installs to `/usr/local/bin` (using `sudo` only if it has to). Pin a version with `INK_VERSION=v0.8.0` or change the target with `INK_INSTALL_DIR="$HOME/.local/bin"`: ```bash -curl -fsSL https://raw.githubusercontent.com/borghei/ink/main/install.sh | INK_VERSION=v0.8.0 INK_INSTALL_DIR="$HOME/.local/bin" sh +curl -fsSL https://raw.githubusercontent.com/borghei/ink/main/install.sh | INK_VERSION=v0.9.0 INK_INSTALL_DIR="$HOME/.local/bin" sh ``` ### Quick install (Windows PowerShell) @@ -38,7 +38,7 @@ curl -fsSL https://raw.githubusercontent.com/borghei/ink/main/install.sh | INK_V irm https://raw.githubusercontent.com/borghei/ink/main/install.ps1 | iex ``` -Installs `ink.exe` (x64 or ARM64) to `%LOCALAPPDATA%\Programs\ink` and adds it to your user `PATH`. Set `$env:INK_VERSION = "v0.8.0"` first to pin a version. +Installs `ink.exe` (x64 or ARM64) to `%LOCALAPPDATA%\Programs\ink` and adds it to your user `PATH`. Set `$env:INK_VERSION = "v0.9.0"` first to pin a version. ### Homebrew (macOS / Linux) @@ -107,7 +107,7 @@ The glibc builds need glibc 2.35 or newer; older and musl-based systems use the gh attestation verify ink-linux-amd64 --repo borghei/ink ``` -The static musl builds and Windows ARM64 binaries are new after v0.8.0; earlier releases only have the glibc, macOS and Windows x64 binaries. +The static musl builds and Windows ARM64 binaries are new in v0.9.0; earlier releases only have the glibc, macOS and Windows x64 binaries. ### From source diff --git a/docs/index.html b/docs/index.html index b27525a..e83c840 100644 --- a/docs/index.html +++ b/docs/index.html @@ -351,7 +351,7 @@

Presentation mode

Works as a pager

-

ink --plain pages long docs through $PAGER, like bat.

+

ink --plain pages long docs through $PAGER, like bat, and writes clean text when piped.

Safe with untrusted files

diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 00edaee..8006d55 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -68,7 +68,9 @@ ink is a feature-rich terminal markdown reader built in Rust. It renders markdow ### Themes - 8 built-in themes: dark, light, dracula, catppuccin, nord, tokyo-night, gruvbox, solarized -- Auto-detection of terminal background (dark/light) +- Auto-detection of terminal background (dark/light) by querying the terminal (OSC 11), falling back to COLORFGBG +- 24-bit, 256-colour and 16-colour output chosen from the terminal; --ascii (or [behavior] ascii = true) draws borders, bullets and markers in plain ASCII, automatic on the Linux console and non-UTF-8 locales +- --no-mouse leaves the mouse to the terminal for one session - Live theme preview with T key; the chosen theme is saved to config - ink --list-themes lists all available themes (built-in + custom) - 30+ customizable color properties per theme @@ -108,7 +110,7 @@ ink is a feature-rich terminal markdown reader built in Rust. It renders markdow - Ctrl+d/Ctrl+u: half-page down/up - n/N: next/previous heading (cycles search matches after a search) - /: search -- f: link-hint mode (open/follow links by letter; the overlay lists each link's text next to its URL; Y inside the overlay copies the URL instead) +- f: link-hint mode (open/follow links by letter; the overlay lists each link's text next to its URL; Y inside the overlay copies the URL instead); #heading and file.md#heading links jump to the heading, and [ goes back - v/V: select text character-wise / line-wise (motions hjkl, arrows, w/b, 0/$, g/G, Ctrl+d/Ctrl+u; y copies, Esc cancels) - Mouse: drag selects and copies on release; double-click selects a word, triple-click a line - c: label the code blocks on screen and copy one's raw source by letter diff --git a/docs/llms.txt b/docs/llms.txt index 1ef5e21..38e8c90 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -38,7 +38,7 @@ ink is a command-line tool that renders markdown files in the terminal with rich curl -fsSL https://raw.githubusercontent.com/borghei/ink/main/install.sh | sh # macOS / Linux (picks glibc or static musl build) irm https://raw.githubusercontent.com/borghei/ink/main/install.ps1 | iex # Windows PowerShell (x64 / ARM64) cargo install ink-md # from source (Rust 1.90+) -INK_VERSION=v0.8.0 sh install.sh # pin a version +INK_VERSION=v0.9.0 sh install.sh # pin a version Prebuilt: Linux amd64/arm64 (glibc 2.35+), static musl Linux amd64/arm64/armv7 (any distro), macOS amd64/arm64, Windows amd64/arm64; .deb/.rpm and tar.gz/zip archives include the man page and completions. Verify with SHA256SUMS or `gh attestation verify --repo borghei/ink`. diff --git a/install.ps1 b/install.ps1 index 54d54c4..bba820b 100644 --- a/install.ps1 +++ b/install.ps1 @@ -4,7 +4,7 @@ # irm https://raw.githubusercontent.com/borghei/ink/main/install.ps1 | iex # # Environment: -# $env:INK_VERSION = "v0.8.0" install a specific release (default: latest) +# $env:INK_VERSION = "v0.9.0" install a specific release (default: latest) # $env:INK_INSTALL_DIR = "C:\tools" install somewhere else # (default: %LOCALAPPDATA%\Programs\ink) # @@ -86,7 +86,7 @@ $asset = "ink-windows-$arch.exe" if (-not $sums.ContainsKey($asset) -and $arch -eq 'arm64') { - # Releases up to v0.8.0 have no native ARM64 build; Windows on ARM + # Releases before v0.9.0 have no native ARM64 build; Windows on ARM # runs the x64 one under emulation. Write-Host "Release $label has no native ARM64 build; installing the x64 build (runs under emulation)." $asset = 'ink-windows-amd64.exe' diff --git a/install.sh b/install.sh index f93fc8f..549280b 100755 --- a/install.sh +++ b/install.sh @@ -5,7 +5,7 @@ # curl -fsSL https://raw.githubusercontent.com/borghei/ink/main/install.sh | sh # # Environment: -# INK_VERSION=v0.8.0 install a specific release (default: latest) +# INK_VERSION=v0.9.0 install a specific release (default: latest) # INK_INSTALL_DIR="$HOME/.local/bin" install somewhere else (default: /usr/local/bin) # # Options: @@ -277,10 +277,10 @@ main() { case "$asset" in *-musl) if [ -n "${INK_VERSION:-}" ]; then - err "Static musl builds first shipped in the release after v0.8.0; $version predates them." + err "Static musl builds first shipped in v0.9.0; $version predates them." err "Unset INK_VERSION (or pick a newer one) to get it." else - err "Static musl builds first ship in the release after v0.8.0, which is not out yet." + err "Static musl builds first shipped in v0.9.0; the latest release has none." fi ;; esac