You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A terminal pane can go black while its shell keeps running, and no input
brings it back. SwiftTerm's Metal renderer refuses a frame when the frame
semaphore is held or no drawable exists; both paths set `pendingRedraw`
without submitting a command buffer, yet only that command buffer's
completion handler consumes the flag. The view then accepts input and PTY
output forever without presenting anything.
Pine cannot detect this from the outside — with the semaphore held, both
`setNeedsDisplay` and `drawMetalFrameNow()` re-enter the same refusal, and
there is no public "frame presented" signal. Rebuilding the renderer is the
only escape: it installs a fresh MTKView, semaphore, and drawable chain
while Terminal, the PTY, and the scrollback stay untouched.
Terminal ▸ Recover Terminal Display (⌘⌥R) rebuilds the renderer for the
active tab of every visible terminal pane, plus the quick terminal when it
is on screen. Background tabs are skipped — they are detached, so a rebuild
would cost a GPU round-trip for pixels nobody sees, and their own re-attach
already repaints them. The item is never disabled: the quick terminal lives
in its own window where `focusedProject` is nil, and gating on project
panes would leave exactly that surface unfixable.
Existing coverage missed this class entirely — `TerminalMetalRendererTests`
exercises only attachment-shaped events, and the UI-test harness launches
with `--disable-metal`.
The durable fix belongs upstream in SwiftTerm; it will be filed separately,
after which this command stays useful but no longer load-bearing.
0 commit comments