diff --git a/src/renderer/Metal.zig b/src/renderer/Metal.zig index 8e8cc0e97..5bc0520eb 100644 --- a/src/renderer/Metal.zig +++ b/src/renderer/Metal.zig @@ -1101,10 +1101,9 @@ fn rebuildCells( y: usize, x: [2]usize, } = if (preedit) |preedit_v| preedit: { - var x = screen.cursor.x; break :preedit .{ .y = screen.cursor.y, - .x = .{ x, x + preedit_v.width() }, + .x = preedit_v.range(screen.cursor.x, screen.cols - 1), }; } else null; diff --git a/src/renderer/State.zig b/src/renderer/State.zig index efe29ecb9..57b54365d 100644 --- a/src/renderer/State.zig +++ b/src/renderer/State.zig @@ -48,4 +48,12 @@ pub const Preedit = struct { return result; } + + pub fn range(self: *const Preedit, start: usize, max: usize) [2]usize { + // If our preedit goes off the end of the screen, we adjust it so + // that it shifts left. + const end = start + self.width(); + const offset = if (end > max) end - max else 0; + return .{ start -| offset, end -| offset }; + } };