Add Ctrl+D to exit when editor is empty

- Add isCtrlD helper to keys.ts
- CustomEditor intercepts Ctrl+D and only triggers callback when editor is empty
- Single Ctrl+D with empty input exits immediately
- Update CHANGELOG to frame as feature (Kitty protocol support) not fix
This commit is contained in:
Ahmed Kamal 2025-12-18 19:39:41 +02:00
parent c3c2bffc68
commit 727a7ab018
5 changed files with 31 additions and 3 deletions

View file

@ -23,6 +23,7 @@ export {
isAltBackspace,
isCtrlA,
isCtrlC,
isCtrlD,
isCtrlE,
isCtrlK,
isCtrlO,

View file

@ -18,6 +18,7 @@ const CODEPOINTS = {
// Letters (lowercase ASCII)
a: 97,
c: 99,
d: 100,
e: 101,
k: 107,
o: 111,
@ -52,6 +53,7 @@ export const Keys = {
// Ctrl+<letter> combinations
CTRL_A: kittySequence(CODEPOINTS.a, MODIFIERS.ctrl),
CTRL_C: kittySequence(CODEPOINTS.c, MODIFIERS.ctrl),
CTRL_D: kittySequence(CODEPOINTS.d, MODIFIERS.ctrl),
CTRL_E: kittySequence(CODEPOINTS.e, MODIFIERS.ctrl),
CTRL_K: kittySequence(CODEPOINTS.k, MODIFIERS.ctrl),
CTRL_O: kittySequence(CODEPOINTS.o, MODIFIERS.ctrl),
@ -97,6 +99,7 @@ export function isKittyKey(data: string, codepoint: number, modifier: number): b
const RAW = {
CTRL_A: "\x01",
CTRL_C: "\x03",
CTRL_D: "\x04",
CTRL_E: "\x05",
CTRL_K: "\x0b",
CTRL_O: "\x0f",
@ -122,6 +125,13 @@ export function isCtrlC(data: string): boolean {
return data === RAW.CTRL_C || data === Keys.CTRL_C;
}
/**
* Check if input matches Ctrl+D (raw byte or Kitty protocol).
*/
export function isCtrlD(data: string): boolean {
return data === RAW.CTRL_D || data === Keys.CTRL_D;
}
/**
* Check if input matches Ctrl+E (raw byte or Kitty protocol).
*/