diff --git a/crates/forge_main/src/zsh/plugin.rs b/crates/forge_main/src/zsh/plugin.rs index c91ee70a9a..0350f9ad07 100644 --- a/crates/forge_main/src/zsh/plugin.rs +++ b/crates/forge_main/src/zsh/plugin.rs @@ -417,11 +417,21 @@ mod tests { use pretty_assertions::assert_eq; let fixture = generate_zsh_plugin().unwrap(); - let actual = fixture.contains( - " _forge_osc133_emit \"B\"\n _forge_osc133_emit \"C\"\n case \"$user_action\" in", - ) && fixture.contains( - " local action_status=$?\n _forge_osc133_emit \"D;$action_status\"\n _forge_osc133_emit \"A\"\n _forge_reset", - ); + + // Verify OSC 133 B and C markers are emitted before the action dispatch + let actual = fixture.contains(" _forge_osc133_emit \"B\"\n _forge_osc133_emit \"C\"") + // The buffer is redisplayed with cursor at end so user input stays visible + && fixture.contains("CURSOR=${#BUFFER}\n zle redisplay") + // The case dispatch follows the buffer redisplay + && fixture.contains(" case \"$user_action\" in") + // _forge_reset pads with newlines before clearing to prevent ZLE from clearing + // conversation output lines (see helpers.zsh:139-157) + && fixture.contains("for ((_i=1; _i