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
- Use Tide prompt with fish 4.7.1.
- Open a terminal.
- Resize the terminal window repeatedly.
- 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.
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=1environment variable to display a backtraceThe prompt still works, but the panic is printed into the terminal during resize.
Environment
Reproduction
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.