fix(tui): always position cursor for IME

# Conflicts:
#	packages/coding-agent/CHANGELOG.md
This commit is contained in:
Mario Zechner 2026-01-17 11:38:46 +01:00
parent cd43b8a9ca
commit 673916f63c
7 changed files with 87 additions and 11 deletions

View file

@ -2,6 +2,10 @@
## [Unreleased]
### Added
- Added `showHardwareCursor` getter and setter to control cursor visibility while keeping IME positioning active. ([#800](https://github.com/badlogic/pi-mono/pull/800) by [@ghoulr](https://github.com/ghoulr))
## [0.48.0] - 2026-01-16
### Added

View file

@ -208,7 +208,7 @@ export class TUI extends Container {
private hardwareCursorRow = 0; // Actual terminal cursor row (may differ due to IME positioning)
private inputBuffer = ""; // Buffer for parsing terminal responses
private cellSizeQueryPending = false;
private useHardwareCursor = process.env.PI_HARDWARE_CURSOR === "1";
private showHardwareCursor = process.env.PI_HARDWARE_CURSOR === "1";
// Overlay stack for modal components rendered on top of base content
private overlayStack: {
@ -218,9 +218,25 @@ export class TUI extends Container {
hidden: boolean;
}[] = [];
constructor(terminal: Terminal) {
constructor(terminal: Terminal, showHardwareCursor?: boolean) {
super();
this.terminal = terminal;
if (showHardwareCursor !== undefined) {
this.showHardwareCursor = showHardwareCursor;
}
}
getShowHardwareCursor(): boolean {
return this.showHardwareCursor;
}
setShowHardwareCursor(enabled: boolean): void {
if (this.showHardwareCursor === enabled) return;
this.showHardwareCursor = enabled;
if (!enabled) {
this.terminal.hideCursor();
}
this.requestRender();
}
setFocus(component: Component | null): void {
@ -982,12 +998,6 @@ export class TUI extends Container {
* @param totalLines Total number of rendered lines
*/
private positionHardwareCursor(cursorPos: { row: number; col: number } | null, totalLines: number): void {
// PI_HARDWARE_CURSOR=1 enables hardware cursor (disabled by default due to terminal compatibility issues)
if (!this.useHardwareCursor) {
this.terminal.hideCursor();
return;
}
if (!cursorPos || totalLines <= 0) {
this.terminal.hideCursor();
return;
@ -1013,6 +1023,10 @@ export class TUI extends Container {
}
this.hardwareCursorRow = targetRow;
this.terminal.showCursor();
if (this.showHardwareCursor) {
this.terminal.showCursor();
} else {
this.terminal.hideCursor();
}
}
}