feat: add terminal resizing shortcuts

This commit is contained in:
2026-04-05 22:31:47 +02:00
parent 958bca6e01
commit 5209486436
+33 -1
View File
@@ -43,6 +43,8 @@ static WsWindow g_win;
static TermTabs g_tabs = {}; static TermTabs g_tabs = {};
static bool g_should_exit = false; static bool g_should_exit = false;
static bool g_force_redraw = true; static bool g_force_redraw = true;
static int g_last_win_w = 0;
static int g_last_win_h = 0;
static bool left_pressed(const Montauk::WinEvent& ev) { static bool left_pressed(const Montauk::WinEvent& ev) {
return (ev.mouse.buttons & 1) && !(ev.mouse.prev_buttons & 1); return (ev.mouse.buttons & 1) && !(ev.mouse.prev_buttons & 1);
@@ -146,7 +148,11 @@ static bool term_render() {
TerminalState* ts = g_tabs.tabs[g_tabs.active_tab]; TerminalState* ts = g_tabs.tabs[g_tabs.active_tab];
if (new_cols != ts->cols || new_rows != ts->rows) { // Only resize the terminal buffer when window pixel dimensions change,
// not when font size (zoom) changes
if (g_win.width != g_last_win_w || term_h != g_last_win_h) {
g_last_win_w = g_win.width;
g_last_win_h = term_h;
for (int i = 0; i < g_tabs.tab_count; i++) for (int i = 0; i < g_tabs.tab_count; i++)
terminal_resize(g_tabs.tabs[i], new_cols, new_rows); terminal_resize(g_tabs.tabs[i], new_cols, new_rows);
} }
@@ -295,6 +301,28 @@ static void term_handle_key(const Montauk::KeyEvent& key) {
return; return;
} }
// Ctrl+Plus/Equal: zoom in
if (key.ctrl && key.pressed && (key.ascii == '+' || key.ascii == '=')) {
if (fonts::TERM_SIZE < 64) {
fonts::TERM_SIZE += 2;
for (int i = 0; i < g_tabs.tab_count; i++)
g_tabs.tabs[i]->dirty = true;
term_request_redraw();
}
return;
}
// Ctrl+Minus: zoom out
if (key.ctrl && key.pressed && key.ascii == '-') {
if (fonts::TERM_SIZE > 8) {
fonts::TERM_SIZE -= 2;
for (int i = 0; i < g_tabs.tab_count; i++)
g_tabs.tabs[i]->dirty = true;
term_request_redraw();
}
return;
}
terminal_handle_key(g_tabs.tabs[g_tabs.active_tab], key); terminal_handle_key(g_tabs.tabs[g_tabs.active_tab], key);
} }
@@ -316,6 +344,10 @@ extern "C" void _start() {
if (!g_win.create("Terminal", INIT_W, INIT_H)) if (!g_win.create("Terminal", INIT_W, INIT_H))
montauk::exit(1); montauk::exit(1);
int term_h = g_win.height - TERM_TAB_BAR_H;
g_last_win_w = g_win.width;
g_last_win_h = term_h;
int cols = g_win.width / mono_cell_width(); int cols = g_win.width / mono_cell_width();
int rows = (g_win.height - TERM_TAB_BAR_H) / mono_cell_height(); int rows = (g_win.height - TERM_TAB_BAR_H) / mono_cell_height();
if (cols < 1) cols = 1; if (cols < 1) cols = 1;