From bc277208e0a6207c5b183418f39682a56e952e70 Mon Sep 17 00:00:00 2001 From: LESdylan Date: Sun, 18 Oct 2026 04:09:50 +0200 Subject: [PATCH] =?UTF-8?q?release:=203.2.0=20=E2=80=94=20Up=20finds=20wha?= =?UTF-8?q?t=20you=20typed,=20a=20hint=20is=20one=20key=20away,=20and=20bi?= =?UTF-8?q?nd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prefix history search, opt-in inline hints, make , bind / bind -x, bindkey's zsh notation, ${var@P}, $SRANDOM and $EPOCHREALTIME. Also the fixes that made the hint and prefix keys work on non-PIE builds, two readline undo-list leaks, zsh-mode which, and make re on NFS. RELEASE.md has the summary; wiki/whats-new.md, which the banner links to, has the long form. --- RELEASE.md | 61 ++++++++++++++++++++++++++++++++++++++++++++++-- incs/version.h | 2 +- npm/package.json | 2 +- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index aaefb59f..2eea7adc 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -3,8 +3,65 @@ > 🔥 **hellish** is a fast, almost‑POSIX shell written from scratch in C — > hackable, observable, and pleasant to live in. -This file is what the welcome banner points you at. It tracks what's new and -shows you how to drive the shell. +This file tracks what's new in every release and shows you how to drive the +shell. The welcome banner links to the guide for the latest one: +[What's new](https://univers42.github.io/hellish/whats-new/). + +--- + +## v3.2.0 — *Up finds what you typed, a hint is one key away, and `bind`* + +**The guide: [What's new in 3.2](https://univers42.github.io/hellish/whats-new/)**. +It covers every feature: the keys that reach it, and an example run on +3.2. The welcome banner shows the same list once after you update. + +- **Up and Down search by what you typed.** `git` steps through the + history lines that start with `git`; on an empty line Up walks the whole + history. On by default; `HELLISH_HISTORY_PREFIX=0` turns it off. The + configs that ask for it now work too: bash's + `bind '"\e[A": history-search-backward'` and zsh's + `bindkey '^[[A' history-beginning-search-backward` (#136). +- **Inline hints**, opt-in with `export HELLISH_AUTOSUGGEST=1`. The newest + matching history line shows dim after the cursor. Right / End / Ctrl-F + take all of it, Alt-F / Ctrl-Right take one word, and Alt-N / Alt-P + show other matches (#140). +- **`make `** completes the targets of the Makefile in the current + directory. The shell reads the file itself; make never runs (#140). +- **`bind`**, bash's builtin: key bindings and readline settings from + `~/.hellishrc`. `bind -x` runs a shell command on a key, and the command + can edit the line through `READLINE_LINE` / `READLINE_POINT`. +- **`bindkey`** in zsh mode reads zsh's `^X` notation and reaches the line + editor's own widgets. +- **`${var@P}`** renders a value through the PS1 renderer. **`$SRANDOM`** + and **`$EPOCHREALTIME`** are new variables. + +Fixed on the way to the release: + +- **The hint and prefix keys did nothing on some builds.** The shell found + readline's commands by comparing function addresses. On a non-PIE binary + linked against a readline built with `-Bsymbolic-functions` (Ubuntu's), + one function has two addresses, so nothing matched and every key kept + its stock meaning. The shell now asks readline for each command by name + (`rl_named_function`). +- **Two leaks in readline 8.1's line editing**, one undo list per line: + - after walking the history with Up or Ctrl-P; + - after cancelling an Alt-P search. + + LeakSanitizer reported both. `tests/rl_undo_leak_test.py` covers ten + ways to reach them. +- **`which` in zsh mode.** Esc Esc (oh-my-zsh's `sudo` plugin) printed + `builtin: which: not a shell builtin`. zsh's `which [-ap]` now exists in + zsh mode. +- **`make re` on NFS** no longer stops in `fclean` on the `.nfsXXXX` file + a running `build/bin/hellish` keeps open. +- **The welcome banner** fits an 80-column terminal, and its frame stays + aligned under `LANG=C`. + +About two dozen smaller fixes landed as well, among them PS2 on every +continuation line, `exec nosuch` no longer reading freed memory, `read` +at end of input, and heredocs in functions, `eval` and `source`. The guide +lists the ones you can see; the compare view has all of them: +[v3.1.3...v3.2.0](https://github.com/Univers42/hellish/compare/v3.1.3...v3.2.0). --- diff --git a/incs/version.h b/incs/version.h index e1d03eff..9a6bf8a5 100644 --- a/incs/version.h +++ b/incs/version.h @@ -15,7 +15,7 @@ /* The single source of truth for the running shell's version. Bumped in step with the git tag / GitHub release / npm package / docker image. */ -# define HELLISH_VERSION "3.1.3" +# define HELLISH_VERSION "3.2.0" /* Where releases live; used by the `update` builtin and the daily check. */ # define HELLISH_REPO "Univers42/hellish" diff --git a/npm/package.json b/npm/package.json index ac20e7b4..7421118f 100644 --- a/npm/package.json +++ b/npm/package.json @@ -1,6 +1,6 @@ { "name": "hellish-shell", - "version": "3.1.3", + "version": "3.2.0", "description": "hellish — a fast, POSIX-compliant shell, with horns", "bin": { "hellish": "bin/hellish.js"