mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-17 09:16:11 +03:00
fully hook up resize
This commit is contained in:
@ -39,6 +39,9 @@ renderer_state: *renderer.State,
|
|||||||
/// a repaint should happen.
|
/// a repaint should happen.
|
||||||
renderer_wakeup: libuv.Async,
|
renderer_wakeup: libuv.Async,
|
||||||
|
|
||||||
|
/// The cached grid size whenever a resize is called.
|
||||||
|
grid_size: renderer.GridSize,
|
||||||
|
|
||||||
/// Initialize the exec implementation. This will also start the child
|
/// Initialize the exec implementation. This will also start the child
|
||||||
/// process.
|
/// process.
|
||||||
pub fn init(alloc: Allocator, opts: termio.Options) !Exec {
|
pub fn init(alloc: Allocator, opts: termio.Options) !Exec {
|
||||||
@ -96,6 +99,7 @@ pub fn init(alloc: Allocator, opts: termio.Options) !Exec {
|
|||||||
.terminal_stream = undefined,
|
.terminal_stream = undefined,
|
||||||
.renderer_state = opts.renderer_state,
|
.renderer_state = opts.renderer_state,
|
||||||
.renderer_wakeup = opts.renderer_wakeup,
|
.renderer_wakeup = opts.renderer_wakeup,
|
||||||
|
.grid_size = opts.grid_size,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,8 +137,10 @@ pub fn threadEnter(self: *Exec, loop: libuv.Loop) !ThreadData {
|
|||||||
.data_stream = stream,
|
.data_stream = stream,
|
||||||
.terminal_stream = .{
|
.terminal_stream = .{
|
||||||
.handler = .{
|
.handler = .{
|
||||||
|
.alloc = self.alloc,
|
||||||
.ev = ev_data_ptr,
|
.ev = ev_data_ptr,
|
||||||
.terminal = &self.terminal,
|
.terminal = &self.terminal,
|
||||||
|
.grid_size = &self.grid_size,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -166,6 +172,9 @@ pub fn resize(
|
|||||||
.ws_ypixel = @intCast(u16, screen_size.height),
|
.ws_ypixel = @intCast(u16, screen_size.height),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Update our cached grid size
|
||||||
|
self.grid_size = grid_size;
|
||||||
|
|
||||||
// Enter the critical area that we want to keep small
|
// Enter the critical area that we want to keep small
|
||||||
{
|
{
|
||||||
self.renderer_state.mutex.lock();
|
self.renderer_state.mutex.lock();
|
||||||
@ -371,6 +380,8 @@ fn ttyRead(t: *libuv.Tty, n: isize, buf: []const u8) void {
|
|||||||
/// unless all of the member fields are copied.
|
/// unless all of the member fields are copied.
|
||||||
const StreamHandler = struct {
|
const StreamHandler = struct {
|
||||||
ev: *EventData,
|
ev: *EventData,
|
||||||
|
alloc: Allocator,
|
||||||
|
grid_size: *renderer.GridSize,
|
||||||
terminal: *terminal.Terminal,
|
terminal: *terminal.Terminal,
|
||||||
|
|
||||||
/// Bracketed paste mode
|
/// Bracketed paste mode
|
||||||
@ -496,72 +507,72 @@ const StreamHandler = struct {
|
|||||||
self.terminal.setScrollingRegion(top, bot);
|
self.terminal.setScrollingRegion(top, bot);
|
||||||
}
|
}
|
||||||
|
|
||||||
// pub fn setMode(self: *StreamHandler, mode: terminal.Mode, enabled: bool) !void {
|
pub fn setMode(self: *StreamHandler, mode: terminal.Mode, enabled: bool) !void {
|
||||||
// switch (mode) {
|
switch (mode) {
|
||||||
// .reverse_colors => {
|
.reverse_colors => {
|
||||||
// self.terminal.modes.reverse_colors = enabled;
|
self.terminal.modes.reverse_colors = enabled;
|
||||||
//
|
|
||||||
// // Schedule a render since we changed colors
|
// Schedule a render since we changed colors
|
||||||
// try self.queueRender();
|
try self.queueRender();
|
||||||
// },
|
},
|
||||||
//
|
|
||||||
// .origin => {
|
.origin => {
|
||||||
// self.terminal.modes.origin = enabled;
|
self.terminal.modes.origin = enabled;
|
||||||
// self.terminal.setCursorPos(1, 1);
|
self.terminal.setCursorPos(1, 1);
|
||||||
// },
|
},
|
||||||
//
|
|
||||||
// .autowrap => {
|
.autowrap => {
|
||||||
// self.terminal.modes.autowrap = enabled;
|
self.terminal.modes.autowrap = enabled;
|
||||||
// },
|
},
|
||||||
//
|
|
||||||
// .cursor_visible => {
|
.cursor_visible => {
|
||||||
// self.ev.renderer_state.cursor.visible = enabled;
|
self.ev.renderer_state.cursor.visible = enabled;
|
||||||
// },
|
},
|
||||||
//
|
|
||||||
// .alt_screen_save_cursor_clear_enter => {
|
.alt_screen_save_cursor_clear_enter => {
|
||||||
// const opts: terminal.Terminal.AlternateScreenOptions = .{
|
const opts: terminal.Terminal.AlternateScreenOptions = .{
|
||||||
// .cursor_save = true,
|
.cursor_save = true,
|
||||||
// .clear_on_enter = true,
|
.clear_on_enter = true,
|
||||||
// };
|
};
|
||||||
//
|
|
||||||
// if (enabled)
|
if (enabled)
|
||||||
// self.terminal.alternateScreen(opts)
|
self.terminal.alternateScreen(opts)
|
||||||
// else
|
else
|
||||||
// self.terminal.primaryScreen(opts);
|
self.terminal.primaryScreen(opts);
|
||||||
//
|
|
||||||
// // Schedule a render since we changed screens
|
// Schedule a render since we changed screens
|
||||||
// try self.queueRender();
|
try self.queueRender();
|
||||||
// },
|
},
|
||||||
//
|
|
||||||
// .bracketed_paste => self.bracketed_paste = true,
|
.bracketed_paste => self.bracketed_paste = true,
|
||||||
//
|
|
||||||
// .enable_mode_3 => {
|
.enable_mode_3 => {
|
||||||
// // Disable deccolm
|
// Disable deccolm
|
||||||
// self.terminal.setDeccolmSupported(enabled);
|
self.terminal.setDeccolmSupported(enabled);
|
||||||
//
|
|
||||||
// // Force resize back to the window size
|
// Force resize back to the window size
|
||||||
// self.terminal.resize(self.alloc, self.grid_size.columns, self.grid_size.rows) catch |err|
|
self.terminal.resize(self.alloc, self.grid_size.columns, self.grid_size.rows) catch |err|
|
||||||
// log.err("error updating terminal size: {}", .{err});
|
log.err("error updating terminal size: {}", .{err});
|
||||||
// },
|
},
|
||||||
//
|
|
||||||
// .@"132_column" => try self.terminal.deccolm(
|
.@"132_column" => try self.terminal.deccolm(
|
||||||
// self.alloc,
|
self.alloc,
|
||||||
// if (enabled) .@"132_cols" else .@"80_cols",
|
if (enabled) .@"132_cols" else .@"80_cols",
|
||||||
// ),
|
),
|
||||||
//
|
|
||||||
// .mouse_event_x10 => self.terminal.modes.mouse_event = if (enabled) .x10 else .none,
|
.mouse_event_x10 => self.terminal.modes.mouse_event = if (enabled) .x10 else .none,
|
||||||
// .mouse_event_normal => self.terminal.modes.mouse_event = if (enabled) .normal else .none,
|
.mouse_event_normal => self.terminal.modes.mouse_event = if (enabled) .normal else .none,
|
||||||
// .mouse_event_button => self.terminal.modes.mouse_event = if (enabled) .button else .none,
|
.mouse_event_button => self.terminal.modes.mouse_event = if (enabled) .button else .none,
|
||||||
// .mouse_event_any => self.terminal.modes.mouse_event = if (enabled) .any else .none,
|
.mouse_event_any => self.terminal.modes.mouse_event = if (enabled) .any else .none,
|
||||||
//
|
|
||||||
// .mouse_format_utf8 => self.terminal.modes.mouse_format = if (enabled) .utf8 else .x10,
|
.mouse_format_utf8 => self.terminal.modes.mouse_format = if (enabled) .utf8 else .x10,
|
||||||
// .mouse_format_sgr => self.terminal.modes.mouse_format = if (enabled) .sgr else .x10,
|
.mouse_format_sgr => self.terminal.modes.mouse_format = if (enabled) .sgr else .x10,
|
||||||
// .mouse_format_urxvt => self.terminal.modes.mouse_format = if (enabled) .urxvt else .x10,
|
.mouse_format_urxvt => self.terminal.modes.mouse_format = if (enabled) .urxvt else .x10,
|
||||||
// .mouse_format_sgr_pixels => self.terminal.modes.mouse_format = if (enabled) .sgr_pixels else .x10,
|
.mouse_format_sgr_pixels => self.terminal.modes.mouse_format = if (enabled) .sgr_pixels else .x10,
|
||||||
//
|
|
||||||
// else => if (enabled) log.warn("unimplemented mode: {}", .{mode}),
|
else => if (enabled) log.warn("unimplemented mode: {}", .{mode}),
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
pub fn setAttribute(self: *StreamHandler, attr: terminal.Attribute) !void {
|
pub fn setAttribute(self: *StreamHandler, attr: terminal.Attribute) !void {
|
||||||
switch (attr) {
|
switch (attr) {
|
||||||
|
Reference in New Issue
Block a user