mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 08:16:13 +03:00
renderer: hide cursor is state explicit asks for invisible cursor
This was a regression. The previous logic would always show the cursor if we were using a non-blinking cursor. But, if the terminal state is explicitly requesting an invisible cursor (mode 25) then we need to hide the cursor.
This commit is contained in:
@ -531,11 +531,15 @@ pub fn render(
|
|||||||
// Setup our cursor state
|
// Setup our cursor state
|
||||||
if (self.focused) {
|
if (self.focused) {
|
||||||
self.cursor_visible = visible: {
|
self.cursor_visible = visible: {
|
||||||
|
// If the cursor is explicitly not visible in the state,
|
||||||
|
// then it is not visible.
|
||||||
|
if (!state.cursor.visible) break :visible false;
|
||||||
|
|
||||||
// If the cursor isn't a blinking style, then never blink.
|
// If the cursor isn't a blinking style, then never blink.
|
||||||
if (!state.cursor.style.blinking()) break :visible true;
|
if (!state.cursor.style.blinking()) break :visible true;
|
||||||
|
|
||||||
// Otherwise, adhere to our current state.
|
// Otherwise, adhere to our current state.
|
||||||
break :visible self.cursor_visible and state.cursor.visible;
|
break :visible self.cursor_visible;
|
||||||
};
|
};
|
||||||
self.cursor_style = renderer.CursorStyle.fromTerminal(state.cursor.style) orelse .box;
|
self.cursor_style = renderer.CursorStyle.fromTerminal(state.cursor.style) orelse .box;
|
||||||
} else {
|
} else {
|
||||||
|
@ -731,11 +731,15 @@ pub fn render(
|
|||||||
// Setup our cursor state
|
// Setup our cursor state
|
||||||
if (self.focused) {
|
if (self.focused) {
|
||||||
self.cursor_visible = visible: {
|
self.cursor_visible = visible: {
|
||||||
|
// If the cursor is explicitly not visible in the state,
|
||||||
|
// then it is not visible.
|
||||||
|
if (!state.cursor.visible) break :visible false;
|
||||||
|
|
||||||
// If the cursor isn't a blinking style, then never blink.
|
// If the cursor isn't a blinking style, then never blink.
|
||||||
if (!state.cursor.style.blinking()) break :visible true;
|
if (!state.cursor.style.blinking()) break :visible true;
|
||||||
|
|
||||||
// Otherwise, adhere to our current state.
|
// Otherwise, adhere to our current state.
|
||||||
break :visible self.cursor_visible and state.cursor.visible;
|
break :visible self.cursor_visible;
|
||||||
};
|
};
|
||||||
self.cursor_style = renderer.CursorStyle.fromTerminal(state.cursor.style) orelse .box;
|
self.cursor_style = renderer.CursorStyle.fromTerminal(state.cursor.style) orelse .box;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1173,6 +1173,10 @@ const StreamHandler = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn setMode(self: *StreamHandler, mode: terminal.Mode, enabled: bool) !void {
|
pub fn setMode(self: *StreamHandler, mode: terminal.Mode, enabled: bool) !void {
|
||||||
|
// Note: this function doesn't need to grab the render state or
|
||||||
|
// terminal locks because it is only called from process() which
|
||||||
|
// grabs the lock.
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
.cursor_keys => {
|
.cursor_keys => {
|
||||||
self.terminal.modes.cursor_keys = enabled;
|
self.terminal.modes.cursor_keys = enabled;
|
||||||
|
Reference in New Issue
Block a user