56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
import { Editor } from "@mariozechner/pi-tui";
|
|
|
|
/**
|
|
* Custom editor that handles Escape and Ctrl+C keys for coding-agent
|
|
*/
|
|
export class CustomEditor extends Editor {
|
|
public onEscape?: () => void;
|
|
public onCtrlC?: () => void;
|
|
public onShiftTab?: () => void;
|
|
public onCtrlP?: () => void;
|
|
public onCtrlO?: () => void;
|
|
public onCtrlT?: () => void;
|
|
|
|
handleInput(data: string): void {
|
|
// Intercept Ctrl+T for thinking block visibility toggle
|
|
if (data === "\x14" && this.onCtrlT) {
|
|
this.onCtrlT();
|
|
return;
|
|
}
|
|
|
|
// Intercept Ctrl+O for tool output expansion
|
|
if (data === "\x0f" && this.onCtrlO) {
|
|
this.onCtrlO();
|
|
return;
|
|
}
|
|
|
|
// Intercept Ctrl+P for model cycling
|
|
if (data === "\x10" && this.onCtrlP) {
|
|
this.onCtrlP();
|
|
return;
|
|
}
|
|
|
|
// Intercept Shift+Tab for thinking level cycling
|
|
if (data === "\x1b[Z" && this.onShiftTab) {
|
|
this.onShiftTab();
|
|
return;
|
|
}
|
|
|
|
// Intercept Escape key - but only if autocomplete is NOT active
|
|
// (let parent handle escape for autocomplete cancellation)
|
|
if (data === "\x1b" && this.onEscape && !this.isShowingAutocomplete()) {
|
|
this.onEscape();
|
|
return;
|
|
}
|
|
|
|
// Intercept Ctrl+C
|
|
if (data === "\x03" && this.onCtrlC) {
|
|
this.onCtrlC();
|
|
return;
|
|
}
|
|
|
|
// Pass to parent for normal handling
|
|
super.handleInput(data);
|
|
}
|
|
}
|