Tab completion now uses prefix-only matching by default (like bash/zsh).
Fuzzy subsequence matching (where 'fort' matches 'install_intel_fortran')
is available via: set -o fuzzy-complete
Short patterns (≤3 chars) always require prefix match regardless of
the setting, to prevent noise like 'ls' matching 'false'.
Ctrl+L was gated on buffer length > 0 as a workaround for a phantom
form-feed from Fortran I/O flush. The root cause was fixed by explicit
flush(output_unit) after command execution, so the guard is no longer
needed. Now Ctrl+L works like bash/fish on empty prompts.
Ctrl+P (previous-history) and Ctrl+N (next-history) are standard emacs
readline bindings that were missing. Only arrow keys worked for history
navigation. Fixes history tests 5-8 on all platforms.
On macOS ARM64 both flags are defined. Accessor functions for search
strings, vi command buffer, menu prefix, and original buffer checked
USE_MEMORY_POOL first, dereferencing uninitialized pool refs → SIGSEGV
in Ctrl+R search, vi-mode commands, tab completion, and undo.
Fix 29 accessor guards (not init/cleanup) to avoid flang-new codegen
butterfly effect. Also sync editing_mode from global on each readline
call so set -o vi / set -o emacs takes effect immediately.
Three changes to fix 135 of 158 macOS PTY test failures:
1. tests_per_session=1 on macOS: fresh PTY per test eliminates cursor
tracking corruption from readline state leaking across sessions.
2. Marker-based sync for send_line→send_line steps: echo a unique
marker after setup commands, wait for it. Replaces unreliable 50ms
fixed delay and avoids greedy '> ' prompt matching.
3. wait_for_prompt for send_line→interactive steps: ensures quick
commands (set -o vi) complete before key sequences arrive. Skipped
for long-running commands (sleep) where next step is 'wait'.
Linux unchanged (50ms delay, tests_per_session=10).
On macOS ARM64 both flags are defined. Accessor functions for search
strings, vi command buffer, menu prefix, and original buffer checked
USE_MEMORY_POOL first, dereferencing uninitialized pool refs → SIGSEGV
in Ctrl+R search, vi-mode commands, tab completion, and undo.
Fix accessor guards only (not init/cleanup) to avoid flang-new codegen
butterfly effect that silently breaks echo output when init blocks are
restructured.
Also sync editing_mode from global_editing_mode on each readline call
so set -o vi / set -o emacs takes effect immediately.
Root cause: in raw mode, bare LF moves cursor down without returning to
column 0. Multi-line prompts and Enter key sent bare LF, causing cursor
to drift right. Fix: replace all LF with CR+LF in prompt printing, Enter
handler, and redraw code. Also keep raw mode across continuation calls.