diff --git a/kernel/src/Api/BuildNo.hpp b/kernel/src/Api/BuildNo.hpp index 888cadb..86e9e2a 100644 --- a/kernel/src/Api/BuildNo.hpp +++ b/kernel/src/Api/BuildNo.hpp @@ -12,4 +12,4 @@ #pragma once -#define MONTAUK_BUILD_NUMBER 106 +#define MONTAUK_BUILD_NUMBER 107 diff --git a/programs/src/terminal/main.cpp b/programs/src/terminal/main.cpp index 8a91f68..ab8f8c0 100644 --- a/programs/src/terminal/main.cpp +++ b/programs/src/terminal/main.cpp @@ -232,9 +232,15 @@ static bool term_render_into(uint32_t* pixels, int width, int height) { TerminalState* ts = g_tabs.tabs[g_tabs.active_tab]; - // Only resize the terminal buffer when surface pixel dimensions change, - // not when font size (zoom) changes - if (width != g_last_win_w || term_h != g_last_win_h) { + // Resize the cell grid when the visible cell layout changes: either the + // surface pixel dimensions changed, or a zoom (font size) change altered + // how many whole cells now fit. Skipping the zoom case leaves the grid at + // its old row count, so at a larger font fewer rows fit on screen and the + // bottom rows (cursor and prompt included) scroll off below the viewport; + // resizing reflows the overflow into scrollback and keeps the cursor in + // view. terminal_resize is a no-op per tab whose dimensions already match. + if (width != g_last_win_w || term_h != g_last_win_h || + new_cols != ts->cols || new_rows != ts->rows) { g_last_win_w = width; g_last_win_h = term_h; for (int i = 0; i < g_tabs.tab_count; i++)