Pre-submit Checks
Describe the bug
Legacy Console-API apps: scrolling and flicker are mutually exclusive in a Warp pane
Warp version: v0.2026.08.12.21.54.stable_00 (Windows)
OS: Windows 11 Business 10.0.22631
Affected app: File Commander/W 2.50 (fcw.exe) — 64-bit Win32 console app
Summary
A full-screen console application that uses the classic Win32 Console API renders
incorrectly in a Warp pane, and the two failure modes cannot be avoided at the same
time. The identical binary, over the same ConPTY, renders correctly in Windows
Terminal — so this appears to be Warp's renderer rather than ConPTY.
The app in question paints with WriteConsoleOutputW, scrolls with
ScrollConsoleScreenBufferA, reads keys with ReadConsoleInputW, and reads the
console dimensions once at startup. It does not use VT sequences and does not
enter the alternate screen buffer itself.
Problem 1 — region scroll does not render unless the app resizes the console
With the app's configured Lines/Columns set to exactly the pane's grid, scrolling
the file list does not render: the selection reaches the bottom row and only that row
changes. Every row above it stays put, although the application's internal state has
scrolled correctly.
Scrolling renders correctly only when the app's configured size differs from the
grid, so that its SetConsoleScreenBufferSize call actually changes the size. The
magnitude does not matter — one column is enough.
Problem 2 — that same resize is what flickers
When the app does resize the console, the pane flickers continuously until the list is
scrolled to the bottom, at which point it settles.
So:
| App size vs pane grid |
App resizes console? |
Scrolling |
Flicker |
| exact match |
no |
broken |
none |
| any inset (1 or 4 cols) |
yes |
works |
yes |
There is no configuration that gives both.
Alternate screen
Because the app never emits CSI ?1049h, Warp keeps the pane in block mode, where a
region scroll has no meaning — only the bottom line ever moves. Emitting ?1049h from
the shell before launching the app is what makes region scrolling render at all.
appearance.full_screen_apps.alt_screen_padding interacts with this. With
{ custom = { uniform_padding = 0.0 } } the pane is resized on alt-screen entry
(138 -> 142 columns in our case); an app that reads its size once at startup must not
be launched until that resize has settled. With match_blocklist no resize occurs.
Problem 3 — PageUp/PageDown never reach the application
PgUp/PgDn are consumed by Warp's input editor and never reach the PTY, so a full-screen
app cannot use them for paging. Setting terminal:scroll_up_one_page and
terminal:scroll_down_one_page to none in keybindings.yaml does not release them,
which suggests the editor handles these keys outside the keybinding system. Arrow keys
are delivered normally, so this is specific to PgUp/PgDn.
Expected
A pane running a full-screen console application should render ScrollConsoleScreenBuffer
region scrolls without requiring the application to resize the console, and should not
flicker when it does resize. PgUp/PgDn should be forwardable to the running application.
Reproduction
- Install File Commander/W (https://www.dpaehl.de/ or any Norton Commander-style
Win32 console file manager that uses WriteConsoleOutputW).
- In a Warp pane, emit
ESC[?1049h, then launch it with Lines/Columns set to the
pane's exact grid size. Arrow down past the bottom of the file list — only the
bottom row updates.
- Repeat with
Columns one less than the pane width. Scrolling now renders, but the
pane flickers.
- Run the same thing in a Windows Terminal pane — both work correctly.
To reproduce
(optional step) Download The full screen app: fcw: https://silk.apana.org.au/fc2development.php
Reproduction:
Affects full-screen console apps that use the classic Win32 Console API (WriteConsoleOutputW, ScrollConsoleScreenBuffer) rather than VT sequences. Repro needs no third-party software.
- Save the script below as warp-repro.ps1.
- Open a Warp pane running PowerShell and run it with $Inset = 0 (as written).
Expected: the numbered lines march upwards each frame.
Actual: every row stays frozen except the bottom one, where only the NEW nnn line changes. The ScrollConsoleScreenBuffer call succeeds; its effect is never rendered.
- Edit line 1 to $Inset = 1 — so the console is sized one column narrower than the pane — and run it again.
Actual: the lines now scroll correctly, but the pane flickers continuously.
- Run both variants in a Windows Terminal pane on the same machine.
Actual: both render correctly, no flicker.
So scrolling only renders when the app's console size differs from the pane grid (i.e. when it actually resizes the console), and that same resize is what flickers. There's no setting that gives both. Since Windows Terminal handles both cases over the same ConPTY, this looks like Warp's renderer rather than ConPTY.
The script mirrors what such an app does: switch to the alternate screen, size the console once at startup, paint a full screen, then scroll a region and write one new row at the bottom.
$Inset = 0 # run once with 0, then again with 1
Add-Type -Namespace R -Name C -MemberDefinition @'
[StructLayout(LayoutKind.Sequential)] public struct COORD { public short X, Y; }
[StructLayout(LayoutKind.Sequential)] public struct SMALL_RECT { public short Left, Top, Right, Bottom; }
[StructLayout(LayoutKind.Explicit)] public struct CHAR_INFO {
[FieldOffset(0)] public char UnicodeChar; [FieldOffset(2)] public ushort Attributes; }
[DllImport("kernel32.dll")] public static extern IntPtr GetStdHandle(int n);
[DllImport("kernel32.dll", CharSet=CharSet.Unicode)] public static extern bool ScrollConsoleScreenBufferW(
IntPtr h, ref SMALL_RECT s, IntPtr clip, COORD d, ref CHAR_INFO f);
'@
$ESC = [char]27; $h = [R.C]::GetStdHandle(-11)
[Console]::Write("$ESC[?1049h"); Start-Sleep -Milliseconds 400
try {
$rows = [Console]::WindowHeight; $cols = [Console]::WindowWidth - $Inset
try { [Console]::SetBufferSize($cols, $rows) } catch { }
$top = 1; $bottom = $rows - 2
for ($i = $top; $i -le $bottom; $i++) {
[Console]::SetCursorPosition(0, $i)
[Console]::Write(("line {0:d3} " -f $i) + ('-' * [Math]::Max(0, $cols - 12)))
}
for ($f = 1; $f -le 25; $f++) {
$r = New-Object R.C+SMALL_RECT
$r.Left = 0; $r.Top = [short]($top + 1); $r.Right = [short]($cols - 1); $r.Bottom = [short]$bottom
$d = New-Object R.C+COORD; $d.X = 0; $d.Y = [short]$top
$fi = New-Object R.C+CHAR_INFO; $fi.UnicodeChar = ' '; $fi.Attributes = 7
[void][R.C]::ScrollConsoleScreenBufferW($h, [ref]$r, [IntPtr]::Zero, $d, [ref]$fi)
[Console]::SetCursorPosition(0, $bottom)
[Console]::Write(("NEW {0:d3} " -f $f) + ('=' * [Math]::Max(0, $cols - 12)))
Start-Sleep -Milliseconds 250
}
} finally { [Console]::Write("$ESC[?1049l$ESC[?25h") }
Separately: PageUp/PageDown never reach a running full-screen app — they're consumed by Warp's input editor. Setting terminal:scroll_up_one_page and terminal:scroll_down_one_page to none in keybindings.yaml doesn't release them. Arrow keys are delivered normally.
Expected behavior
No response
Screenshots, videos, and logs
No response
Operating system (OS)
Windows
Operating system and version
Win 11 Business, Version 10.0.22631 Build 22631
Shell Version
PowerShell 7.6.3
Current Warp version
v0.2026.08.12.21.54.stable_00
Regression
No, this bug or issue has existed throughout my experience using Warp
Recent working Warp date
2026/08/19
Additional context
No response
Does this block you from using Warp daily?
No
Is this an issue only in Warp?
Yes, I confirmed that this only happens in Warp, not other terminals.
Warp Internal (ignore): linear-label:b9d78064-c89e-4973-b153-5178a31ee54e
None
Pre-submit Checks
Describe the bug
Legacy Console-API apps: scrolling and flicker are mutually exclusive in a Warp pane
Warp version: v0.2026.08.12.21.54.stable_00 (Windows)
OS: Windows 11 Business 10.0.22631
Affected app: File Commander/W 2.50 (
fcw.exe) — 64-bit Win32 console appSummary
A full-screen console application that uses the classic Win32 Console API renders
incorrectly in a Warp pane, and the two failure modes cannot be avoided at the same
time. The identical binary, over the same ConPTY, renders correctly in Windows
Terminal — so this appears to be Warp's renderer rather than ConPTY.
The app in question paints with
WriteConsoleOutputW, scrolls withScrollConsoleScreenBufferA, reads keys withReadConsoleInputW, and reads theconsole dimensions once at startup. It does not use VT sequences and does not
enter the alternate screen buffer itself.
Problem 1 — region scroll does not render unless the app resizes the console
With the app's configured
Lines/Columnsset to exactly the pane's grid, scrollingthe file list does not render: the selection reaches the bottom row and only that row
changes. Every row above it stays put, although the application's internal state has
scrolled correctly.
Scrolling renders correctly only when the app's configured size differs from the
grid, so that its
SetConsoleScreenBufferSizecall actually changes the size. Themagnitude does not matter — one column is enough.
Problem 2 — that same resize is what flickers
When the app does resize the console, the pane flickers continuously until the list is
scrolled to the bottom, at which point it settles.
So:
There is no configuration that gives both.
Alternate screen
Because the app never emits
CSI ?1049h, Warp keeps the pane in block mode, where aregion scroll has no meaning — only the bottom line ever moves. Emitting
?1049hfromthe shell before launching the app is what makes region scrolling render at all.
appearance.full_screen_apps.alt_screen_paddinginteracts with this. With{ custom = { uniform_padding = 0.0 } }the pane is resized on alt-screen entry(138 -> 142 columns in our case); an app that reads its size once at startup must not
be launched until that resize has settled. With
match_blocklistno resize occurs.Problem 3 — PageUp/PageDown never reach the application
PgUp/PgDn are consumed by Warp's input editor and never reach the PTY, so a full-screen
app cannot use them for paging. Setting
terminal:scroll_up_one_pageandterminal:scroll_down_one_pagetononeinkeybindings.yamldoes not release them,which suggests the editor handles these keys outside the keybinding system. Arrow keys
are delivered normally, so this is specific to PgUp/PgDn.
Expected
A pane running a full-screen console application should render
ScrollConsoleScreenBufferregion scrolls without requiring the application to resize the console, and should not
flicker when it does resize. PgUp/PgDn should be forwardable to the running application.
Reproduction
Win32 console file manager that uses
WriteConsoleOutputW).ESC[?1049h, then launch it withLines/Columnsset to thepane's exact grid size. Arrow down past the bottom of the file list — only the
bottom row updates.
Columnsone less than the pane width. Scrolling now renders, but thepane flickers.
To reproduce
(optional step) Download The full screen app: fcw: https://silk.apana.org.au/fc2development.php
Reproduction:
Affects full-screen console apps that use the classic Win32 Console API (WriteConsoleOutputW, ScrollConsoleScreenBuffer) rather than VT sequences. Repro needs no third-party software.
Expected: the numbered lines march upwards each frame.
Actual: every row stays frozen except the bottom one, where only the NEW nnn line changes. The ScrollConsoleScreenBuffer call succeeds; its effect is never rendered.
Actual: the lines now scroll correctly, but the pane flickers continuously.
Actual: both render correctly, no flicker.
So scrolling only renders when the app's console size differs from the pane grid (i.e. when it actually resizes the console), and that same resize is what flickers. There's no setting that gives both. Since Windows Terminal handles both cases over the same ConPTY, this looks like Warp's renderer rather than ConPTY.
The script mirrors what such an app does: switch to the alternate screen, size the console once at startup, paint a full screen, then scroll a region and write one new row at the bottom.
$Inset = 0 # run once with 0, then again with 1
Add-Type -Namespace R -Name C -MemberDefinition @'
[StructLayout(LayoutKind.Sequential)] public struct COORD { public short X, Y; }
[StructLayout(LayoutKind.Sequential)] public struct SMALL_RECT { public short Left, Top, Right, Bottom; }
[StructLayout(LayoutKind.Explicit)] public struct CHAR_INFO {
[FieldOffset(0)] public char UnicodeChar; [FieldOffset(2)] public ushort Attributes; }
[DllImport("kernel32.dll")] public static extern IntPtr GetStdHandle(int n);
[DllImport("kernel32.dll", CharSet=CharSet.Unicode)] public static extern bool ScrollConsoleScreenBufferW(
IntPtr h, ref SMALL_RECT s, IntPtr clip, COORD d, ref CHAR_INFO f);
'@
$ESC = [char]27; $h = [R.C]::GetStdHandle(-11)
[Console]::Write("$ESC[?1049h"); Start-Sleep -Milliseconds 400
try {
$rows = [Console]::WindowHeight; $cols = [Console]::WindowWidth - $Inset
try { [Console]::SetBufferSize($cols, $rows) } catch { }
$top = 1; $bottom = $rows - 2
for ($i = $top; $i -le $bottom; $i++) {
[Console]::SetCursorPosition(0, $i)
[Console]::Write(("line {0:d3} " -f $i) + ('-' * [Math]::Max(0, $cols - 12)))
}
for ($f = 1; $f -le 25; $f++) {
$r = New-Object R.C+SMALL_RECT
$r.Left = 0; $r.Top = [short]($top + 1); $r.Right = [short]($cols - 1); $r.Bottom = [short]$bottom
$d = New-Object R.C+COORD; $d.X = 0; $d.Y = [short]$top
$fi = New-Object R.C+CHAR_INFO; $fi.UnicodeChar = ' '; $fi.Attributes = 7
[void][R.C]::ScrollConsoleScreenBufferW($h, [ref]$r, [IntPtr]::Zero, $d, [ref]$fi)
[Console]::SetCursorPosition(0, $bottom)
[Console]::Write(("NEW {0:d3} " -f $f) + ('=' * [Math]::Max(0, $cols - 12)))
Start-Sleep -Milliseconds 250
}
} finally { [Console]::Write("$ESC[?1049l$ESC[?25h") }
Separately: PageUp/PageDown never reach a running full-screen app — they're consumed by Warp's input editor. Setting terminal:scroll_up_one_page and terminal:scroll_down_one_page to none in keybindings.yaml doesn't release them. Arrow keys are delivered normally.
Expected behavior
No response
Screenshots, videos, and logs
No response
Operating system (OS)
Windows
Operating system and version
Win 11 Business, Version 10.0.22631 Build 22631
Shell Version
PowerShell 7.6.3
Current Warp version
v0.2026.08.12.21.54.stable_00
Regression
No, this bug or issue has existed throughout my experience using Warp
Recent working Warp date
2026/08/19
Additional context
No response
Does this block you from using Warp daily?
No
Is this an issue only in Warp?
Yes, I confirmed that this only happens in Warp, not other terminals.
Warp Internal (ignore): linear-label:b9d78064-c89e-4973-b153-5178a31ee54e
None