Skip to content

fish 4.7.1: async prompt repaint emits Rust broken-pipe panic on terminal resize #658

@PerlPooch

Description

@PerlPooch

Description

When using Tide with fish 4.7.1, resizing the terminal repeatedly prints:

thread 'main' panicked at std/src/io/stdio.rs:1117:9:
failed printing to stdout: Broken pipe (os error 32)
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

The prompt still works, but the panic is printed into the terminal during resize.

Environment

  • fish: 4.7.1
  • Tide: 6.2.0
  • OS: macOS 26.5
  • install path shown in generated prompt: /opt/homebrew/Cellar/fish/4.7.1/bin/fish
  • terminal: Terminal.app 2.15

Reproduction

  1. Use Tide prompt with fish 4.7.1.
  2. Open a terminal.
  3. Resize the terminal window repeatedly.
  4. Observe the broken-pipe panic printed into the terminal.

Relevant generated prompt code

The generated ~/.config/fish/functions/fish_prompt.fish contains async prompt rendering like:

/opt/homebrew/Cellar/fish/4.7.1/bin/fish -c "... set _tide_prompt_93478 (_tide_1_line_prompt)" &
builtin disown

command kill $_tide_last_pid 2>/dev/null
set -g _tide_last_pid $last_pid

During resize, Tide appears to spawn a new async prompt-rendering fish process and kill the previous one. The killed/interrupted process sometimes emits the Rust broken-pipe panic.

Workaround

Adding stderr redirection to the generated async fish invocations fixes the visible issue:

/opt/homebrew/Cellar/fish/4.7.1/bin/fish -c "... set _tide_prompt_93478 (_tide_1_line_prompt)" 2>/dev/null &

and similarly for _tide_2_line_prompt.

This suggests Tide could redirect stderr for internal async prompt-render subprocesses, or otherwise silence/handle expected broken-pipe output during repaint cancellation.

Notes

Updating fish and Tide did not resolve it locally. Manually patching the generated fish_prompt.fish did.

Metadata

Metadata

Assignees

No one assigned

    Labels

    🐛 bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions