|
3 | 3 | > 🔥 **hellish** is a fast, almost‑POSIX shell written from scratch in C — |
4 | 4 | > hackable, observable, and pleasant to live in. |
5 | 5 |
|
6 | | -This file is what the welcome banner points you at. It tracks what's new and |
7 | | -shows you how to drive the shell. |
| 6 | +This file tracks what's new in every release and shows you how to drive the |
| 7 | +shell. The welcome banner links to the guide for the latest one: |
| 8 | +[What's new](https://univers42.github.io/hellish/whats-new/). |
| 9 | + |
| 10 | +--- |
| 11 | + |
| 12 | +## v3.2.0 — *Up finds what you typed, a hint is one key away, and `bind`* |
| 13 | + |
| 14 | +**The guide: [What's new in 3.2](https://univers42.github.io/hellish/whats-new/)**. |
| 15 | +It covers every feature: the keys that reach it, and an example run on |
| 16 | +3.2. The welcome banner shows the same list once after you update. |
| 17 | + |
| 18 | +- **Up and Down search by what you typed.** `git<Up>` steps through the |
| 19 | + history lines that start with `git`; on an empty line Up walks the whole |
| 20 | + history. On by default; `HELLISH_HISTORY_PREFIX=0` turns it off. The |
| 21 | + configs that ask for it now work too: bash's |
| 22 | + `bind '"\e[A": history-search-backward'` and zsh's |
| 23 | + `bindkey '^[[A' history-beginning-search-backward` (#136). |
| 24 | +- **Inline hints**, opt-in with `export HELLISH_AUTOSUGGEST=1`. The newest |
| 25 | + matching history line shows dim after the cursor. Right / End / Ctrl-F |
| 26 | + take all of it, Alt-F / Ctrl-Right take one word, and Alt-N / Alt-P |
| 27 | + show other matches (#140). |
| 28 | +- **`make <TAB>`** completes the targets of the Makefile in the current |
| 29 | + directory. The shell reads the file itself; make never runs (#140). |
| 30 | +- **`bind`**, bash's builtin: key bindings and readline settings from |
| 31 | + `~/.hellishrc`. `bind -x` runs a shell command on a key, and the command |
| 32 | + can edit the line through `READLINE_LINE` / `READLINE_POINT`. |
| 33 | +- **`bindkey`** in zsh mode reads zsh's `^X` notation and reaches the line |
| 34 | + editor's own widgets. |
| 35 | +- **`${var@P}`** renders a value through the PS1 renderer. **`$SRANDOM`** |
| 36 | + and **`$EPOCHREALTIME`** are new variables. |
| 37 | + |
| 38 | +Fixed on the way to the release: |
| 39 | + |
| 40 | +- **The hint and prefix keys did nothing on some builds.** The shell found |
| 41 | + readline's commands by comparing function addresses. On a non-PIE binary |
| 42 | + linked against a readline built with `-Bsymbolic-functions` (Ubuntu's), |
| 43 | + one function has two addresses, so nothing matched and every key kept |
| 44 | + its stock meaning. The shell now asks readline for each command by name |
| 45 | + (`rl_named_function`). |
| 46 | +- **Two leaks in readline 8.1's line editing**, one undo list per line: |
| 47 | + - after walking the history with Up or Ctrl-P; |
| 48 | + - after cancelling an Alt-P search. |
| 49 | + |
| 50 | + LeakSanitizer reported both. `tests/rl_undo_leak_test.py` covers ten |
| 51 | + ways to reach them. |
| 52 | +- **`which` in zsh mode.** Esc Esc (oh-my-zsh's `sudo` plugin) printed |
| 53 | + `builtin: which: not a shell builtin`. zsh's `which [-ap]` now exists in |
| 54 | + zsh mode. |
| 55 | +- **`make re` on NFS** no longer stops in `fclean` on the `.nfsXXXX` file |
| 56 | + a running `build/bin/hellish` keeps open. |
| 57 | +- **The welcome banner** fits an 80-column terminal, and its frame stays |
| 58 | + aligned under `LANG=C`. |
| 59 | + |
| 60 | +About two dozen smaller fixes landed as well, among them PS2 on every |
| 61 | +continuation line, `exec nosuch` no longer reading freed memory, `read` |
| 62 | +at end of input, and heredocs in functions, `eval` and `source`. The guide |
| 63 | +lists the ones you can see; the compare view has all of them: |
| 64 | +[v3.1.3...v3.2.0](https://github.com/Univers42/hellish/compare/v3.1.3...v3.2.0). |
8 | 65 |
|
9 | 66 | --- |
10 | 67 |
|
|
0 commit comments