Commits
Host stty sane left ICRNL on, so Enter was relayed as NL (0x0A). Crossterm
maps that to Ctrl+J / Char('j') in raw mode, breaking :wq. Disable ICRNL
while externals run so Enter stays CR.
Raw line editor: keep a push-back key queue so multi-char IO payloads are not
truncated, treat unbound ESC+letter as the letter (was "gleam" → "geam"),
enable bracketed paste, and batch-insert paste bursts with one redraw.
Lexer: allow mid-token @ for SSH/git barewords. Externals default to a live
TTY so long-running tools stream; only nested-pager tools (systemctl, git,
man, …) stay captured for the builtin pager.
Script PTYs started at 0×0 under Erlang ports, so tools truncated and
paginated as if the window were tiny. Always wrap PTY children in a
runner that stty-resizes the slave to the host size (from stty size),
and export COLUMNS/LINES.
Keep a long-lived stdin mux for the raw REPL so post-command history
keys are not dropped after PTY relay or interrupt watch.
Prefer capture with nested pagers forced to cat for normal externals;
page long output through the builtin pager in the interactive REPL.
True TTY programs (vim, htop, sudo, ssh, …) still inherit the terminal.
Port listeners (`whyport`), epoch time (`now`), multi-line paste (`input`),
JWT parse-only decode (`from jwt`), and `get a.b` cell paths make common
inspection workflows usable without leaving the shell. Document the new
commands in the README examples and language sketch.
List Linux /proc processes as a pipelineable table (cpu, mem, and optional --long columns), with display formatting for memory and start times.
Replace reverse-i-search with a stinkpot-style multi-match picker, add
which --follow via realpath, show local datetimes for ls modified, and
cover the new behavior with tests.
Show a greyed-out suffix of the newest matching history line while typing;
accept full with →/End/Ctrl+E/Ctrl+F, or one word with Alt+F.
Introduce Nushell-style `http get|post|put|delete|patch|head` with JSON
bodies/responses, headers, and --full/--raw/--allow-errors. Add language
detection and TTY syntax highlighting for `cat` (json, gleam, toml, markdown),
plus tests and docs.
Incremental `/` find (case-insensitive, ANSI-stripped) with n/N next/prev
and match highlighting. Captured pipeline stages run under a throwaway PTY
so colorizing tools keep ANSI without per-tool env hacks; nested pagers
are forced to cat. Falls back to FORCE_COLOR when script is unavailable.
Ship an interactive `less` that keeps ANSI through alternate-screen paging,
plus `about`, bare `--` as a literal arg, git color/decoration for pipelines,
and symbols-only Nerd Fonts in devenv/flake for the REPL glyphs.
When the caller traps exits, a closed port delivers {'EXIT', Port, Reason}
instead of {Port, {exit_status, _}}. Treat that as interrupt status 130 so
epipe is not fatal during password prompts and post-interrupt cleanup.
Introduce a Nushell-style `find` filter (terms, -i/-v, --regex, --columns)
with tests and help. Also ship a self-contained `gle` via flake, Starship-like
prompt with git branch, command/PATH tab completion, and stronger external TTY
color pass-through (Ctrl+C to children, less ANSI, which -a).
Final pipeline stages inherit the real TTY so tools like less/vim work; capture
mode still forces color when needed. Pre-colored external output is not
re-painted, table widths use visible length, and which -a lists all PATH matches.
Live syntax highlighting, Tab path completion, and Ctrl+C line cancel
via a raw TTY editor (+Bc). Process environment uses Nushell-style
$env / $env.VAR / $env.FOO = value; non-TTY falls back to edlin.
Pretty `to json` / `from json`, ANSI table output with NO_COLOR, and
OTP shell history with Ctrl+R reverse-i-search in the interactive REPL.
Nushell-inspired REPL with typed pipelines, builtins (ls, where,
select, etc.), Nix flake/dev shell, and CI.
Raw line editor: keep a push-back key queue so multi-char IO payloads are not
truncated, treat unbound ESC+letter as the letter (was "gleam" → "geam"),
enable bracketed paste, and batch-insert paste bursts with one redraw.
Lexer: allow mid-token @ for SSH/git barewords. Externals default to a live
TTY so long-running tools stream; only nested-pager tools (systemctl, git,
man, …) stay captured for the builtin pager.
Script PTYs started at 0×0 under Erlang ports, so tools truncated and
paginated as if the window were tiny. Always wrap PTY children in a
runner that stty-resizes the slave to the host size (from stty size),
and export COLUMNS/LINES.
Keep a long-lived stdin mux for the raw REPL so post-command history
keys are not dropped after PTY relay or interrupt watch.
Prefer capture with nested pagers forced to cat for normal externals;
page long output through the builtin pager in the interactive REPL.
True TTY programs (vim, htop, sudo, ssh, …) still inherit the terminal.