Commits

trunk
Switch branches/tags
espadonne
All time
April 2026
Su Mo Tu We Th Fr Sa
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2
3 4 5 6 7 8 9

Commits on April 4, 2026

  1. skip marker sync for job control commands (bg, fg, kill, wait, disown)
    Job control commands interact with background processes whose output
    can swallow the sync marker echo, causing 10s timeout. Use
    wait_for_prompt instead. Fixes bg/bg %1 tests (24, 25).
    
    Also increase last-step delay to 300ms on macOS for flang-new I/O
    flush time.
    espadonne committed
  2. respect HISTFILE env var at startup, disable in tests
    Shell: check HISTFILE env var before loading history file. Previously
    always loaded ~/.fortsh_history regardless of HISTFILE setting.
    
    Tests: set HISTFILE=/dev/null in PTY environment to prevent history
    file from polluting per-test history. Fixes history test 5 (up arrow
    at boundary recalled commands from previous sessions).
    
    Also restore clear_buffer in non-marker sync path to fix history
    tests 8, 11, 12.
    espadonne committed
  3. restore clear_buffer after wait_for_prompt in non-marker sync path
    Without clear_buffer, stale command output polluted the pexpect buffer
    for tests using Ctrl+R search and history navigation. Restoring it
    fixes history tests 8, 11, 12 without regressing signals_jobs (job
    status output comes from the last step which has no sync).
    espadonne committed
  4. add variable name completion for $VAR<Tab>
    Detect $ prefix in tab completion and match against environment
    variable names. Completes exported/env vars using env command output.
    Full shell variable completion requires readline access to shell state
    (future enhancement).
    espadonne committed
  5. use shell current_command for background job descriptions
    The AST executor tried to reconstruct command text from the AST but
    only handled CMD_SIMPLE nodes. Pipeline and subshell background jobs
    showed '<background job>' instead of the actual command. Now uses
    shell%current_command which has the full command text.
    espadonne committed
  6. implement disown builtin
    Removes a job from the shell's job table. Supports job specs (%n)
    or defaults to the current job. The process continues running but
    is no longer tracked by the shell.
    espadonne committed
  7. pass current_command to execute_pipeline for job descriptions
    The AST executor was passing empty string as original_input to the
    legacy executor's execute_pipeline. Background and stopped jobs had
    blank command text in 'jobs' output. Now passes shell%current_command
    so job descriptions show the actual command (e.g. 'sleep 10').
    espadonne committed
  8. set JOB_STOPPED in executor after add_job for suspended processes
    add_job defaults state to JOB_RUNNING. The executor's waitpid consumes
    the stopped status, so update_job_status can't detect it later. Now
    both the legacy and AST executors explicitly set JOB_STOPPED in the
    job table after add_job for WIFSTOPPED processes.
    
    Fixes 'jobs' showing Running instead of Stopped after Ctrl+Z.
    espadonne committed
  9. add WUNTRACED to ast_executor waitpid, add WSTOPSIG, refine test sync
    ast_executor: waitpid now passes WUNTRACED so stopped processes
    (Ctrl+Z/SIGTSTP) are detected. Added WIFSTOPPED handling in pipeline
    wait loop. Added WSTOPSIG helper to system_interface.
    
    test runner: skip marker sync for background commands (ending with &)
    to prevent 10s timeout from letting jobs complete before 'jobs' runs.
    Remove clear_buffer after signal key prompt wait to preserve job status
    output. Detect background commands to use appropriate sync strategy.
    espadonne committed
  10. fix signal numbers on macOS, wait for prompt after Ctrl+C/Z in tests
    Shell: use named signal constants (SIGCHLD, SIGINT, SIGTSTP) instead
    of hardcoded Linux numbers in setup_signal_handlers. Add #ifdef
    __APPLE__ for signal constants 17-22 in signal_handling.f90.
    
    Test runner: after Ctrl+C/Z signal keys, wait for prompt before sending
    more input. The shell needs time to process the signal, reap children,
    and enter readline. Only wait when more input steps follow — if the
    signal is the last step, let expect_output find the signal message.
    
    Fixes signals_jobs tests 1, 3, 5, 9, 10 (Ctrl+C interrupt, Ctrl+Z
    suspend).
    espadonne committed
  11. fix hardcoded Linux signal numbers on macOS, improve test sync
    signals.f90: use named SIGCHLD/SIGINT/SIGTSTP/SIGTTIN/SIGTTOU constants
    from system_interface instead of hardcoded Linux numbers in
    setup_signal_handlers(). Also fix get_signal_number() for SIGTSTP/SIGCONT.
    
    signal_handling.f90: add #ifdef __APPLE__ for signal constants 17-22
    which differ between Linux and macOS (SIGCHLD=20, SIGTSTP=18, etc).
    
    readline.f90: Ctrl+R Enter now executes the found command (bash behavior).
    Ctrl+L works on empty prompt.
    
    test runner: clear buffer after wait_for_prompt sync to prevent stale
    output from polluting subsequent expect calls. Prefix sync markers with
    leading space to exclude from command history.
    espadonne committed
  12. fix Ctrl+R Enter to execute found command, clear stale buffer after sync
    Shell: Enter during Ctrl+R search now executes the found command
    immediately (bash behavior). Previously it only accepted the search
    result into the buffer without executing.
    
    Test runner: clear pexpect buffer after wait_for_prompt in non-marker
    sync path. Stale command output (e.g. 'echo other') was polluting the
    expect buffer for subsequent steps. Also prefix sync marker echos with
    space to exclude from command history.
    espadonne committed

Commits on April 3, 2026

  1. add set -o fuzzy-complete for opt-in fuzzy tab completion
    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'.
    espadonne committed
  2. allow Ctrl+L to clear screen on empty prompt
    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.
    espadonne committed
  3. add Ctrl+P/Ctrl+N emacs keybindings for history navigation
    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.
    espadonne committed
  4. fix USE_C_STRINGS vs USE_MEMORY_POOL preprocessor precedence in readline
    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.
    espadonne committed
  5. harden macOS interactive test runner for flang-new I/O timing
    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).
    espadonne committed
  6. fix USE_C_STRINGS vs USE_MEMORY_POOL preprocessor precedence in readline
    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.
    espadonne committed

Commits on April 1, 2026

  1. espadonne committed

Commits on March 29, 2026

Commits on March 28, 2026

  1. remove debug logging, fix interactive continuation prompt — CR+LF in raw mode, keep_raw across continuation calls, null-byte-aware visual_length
    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.
    espadonne committed