mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
don't blink the cursor while typing
This commit is contained in:
@ -107,7 +107,7 @@ pub fn create(alloc: Allocator, loop: libuv.Loop) !*Window {
|
|||||||
errdefer timer.deinit(alloc);
|
errdefer timer.deinit(alloc);
|
||||||
errdefer timer.close(null);
|
errdefer timer.close(null);
|
||||||
timer.setData(self);
|
timer.setData(self);
|
||||||
try timer.start(cursorTimerCallback, 800, 800);
|
try timer.start(cursorTimerCallback, 600, 600);
|
||||||
|
|
||||||
self.* = .{
|
self.* = .{
|
||||||
.alloc = alloc,
|
.alloc = alloc,
|
||||||
@ -196,6 +196,13 @@ fn charCallback(window: glfw.Window, codepoint: u21) void {
|
|||||||
// Append this character to the terminal
|
// Append this character to the terminal
|
||||||
win.terminal.appendChar(win.alloc, @intCast(u8, codepoint)) catch unreachable;
|
win.terminal.appendChar(win.alloc, @intCast(u8, codepoint)) catch unreachable;
|
||||||
|
|
||||||
|
// Whenever a character is typed, we ensure the cursor is visible
|
||||||
|
// and we restart the cursor timer.
|
||||||
|
win.grid.cursor_visible = true;
|
||||||
|
if (win.cursor_timer.isActive() catch false) {
|
||||||
|
_ = win.cursor_timer.again() catch null;
|
||||||
|
}
|
||||||
|
|
||||||
// Update the cells for drawing
|
// Update the cells for drawing
|
||||||
win.grid.updateCells(win.terminal) catch unreachable;
|
win.grid.updateCells(win.terminal) catch unreachable;
|
||||||
}
|
}
|
||||||
@ -222,7 +229,7 @@ fn focusCallback(window: glfw.Window, focused: bool) void {
|
|||||||
const win = window.getUserPointer(Window) orelse return;
|
const win = window.getUserPointer(Window) orelse return;
|
||||||
if (focused) {
|
if (focused) {
|
||||||
win.wakeup = true;
|
win.wakeup = true;
|
||||||
win.cursor_timer.start(cursorTimerCallback, 0, 800) catch unreachable;
|
win.cursor_timer.start(cursorTimerCallback, 0, win.cursor_timer.getRepeat()) catch unreachable;
|
||||||
win.grid.cursor_style = .box;
|
win.grid.cursor_style = .box;
|
||||||
win.grid.cursor_visible = false;
|
win.grid.cursor_visible = false;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
const c = @import("c.zig");
|
const c = @import("c.zig");
|
||||||
|
|
||||||
const Loop = @import("Loop.zig");
|
const Loop = @import("Loop.zig");
|
||||||
|
const errors = @import("error.zig");
|
||||||
|
|
||||||
/// Returns a struct that has all the shared handle functions for the
|
/// Returns a struct that has all the shared handle functions for the
|
||||||
/// given handle type T. The type T must have a field named "handle".
|
/// given handle type T. The type T must have a field named "handle".
|
||||||
@ -50,6 +51,16 @@ pub fn Handle(comptime T: type) type {
|
|||||||
return .{ .loop = c.uv_handle_get_loop(handle) };
|
return .{ .loop = c.uv_handle_get_loop(handle) };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns non-zero if the handle is active, zero if it’s inactive.
|
||||||
|
/// Rule of thumb: if a handle of type uv_foo_t has a uv_foo_start()
|
||||||
|
/// function, then it’s active from the moment that function is called.
|
||||||
|
/// Likewise, uv_foo_stop() deactivates the handle again.
|
||||||
|
pub fn isActive(self: T) !bool {
|
||||||
|
const res = c.uv_is_active(@ptrCast(*c.uv_handle_t, self.handle));
|
||||||
|
try errors.convertError(res);
|
||||||
|
return res > 0;
|
||||||
|
}
|
||||||
|
|
||||||
/// Sets handle->data to data.
|
/// Sets handle->data to data.
|
||||||
pub fn setData(self: T, pointer: ?*anyopaque) void {
|
pub fn setData(self: T, pointer: ?*anyopaque) void {
|
||||||
c.uv_handle_set_data(
|
c.uv_handle_set_data(
|
||||||
|
Reference in New Issue
Block a user