@mudah-cli/terminal 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capabilities.d.ts +10 -0
- package/dist/capabilities.js +2 -0
- package/dist/capabilities.js.map +1 -1
- package/dist/graphics.d.ts +64 -0
- package/dist/graphics.js +135 -0
- package/dist/graphics.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/keys.d.ts +35 -2
- package/dist/keys.js +139 -38
- package/dist/keys.js.map +1 -1
- package/package.json +2 -2
package/dist/capabilities.d.ts
CHANGED
|
@@ -23,6 +23,16 @@ export interface TerminalCapabilities {
|
|
|
23
23
|
* at runtime. Everything modern does; dumb terminals and CI do not.
|
|
24
24
|
*/
|
|
25
25
|
readonly themeQuery: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Kitty graphics protocol (APC `_G`): pixel images in the terminal.
|
|
28
|
+
* Ghostty, Kitty, and WezTerm.
|
|
29
|
+
*/
|
|
30
|
+
readonly kittyGraphics: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Kitty keyboard protocol (CSI u), including key-up when enabled.
|
|
33
|
+
* Ghostty, Kitty, and WezTerm.
|
|
34
|
+
*/
|
|
35
|
+
readonly kittyKeyboard: boolean;
|
|
26
36
|
/** Cursor show/hide is safe. */
|
|
27
37
|
readonly cursorControl: boolean;
|
|
28
38
|
/** Best-guess terminal theme. */
|
package/dist/capabilities.js
CHANGED
|
@@ -20,6 +20,8 @@ export function detectCapabilities(options = {}) {
|
|
|
20
20
|
osc9: brand === 'ghostty' || brand === 'wezterm',
|
|
21
21
|
osc133: brand === 'kitty' || brand === 'wezterm' || brand === 'iterm' || brand === 'vscode' || brand === 'foot',
|
|
22
22
|
themeQuery: isTty && brand !== 'apple-terminal' && env['TERM'] !== 'dumb',
|
|
23
|
+
kittyGraphics: isTty && (brand === 'ghostty' || brand === 'kitty' || brand === 'wezterm'),
|
|
24
|
+
kittyKeyboard: isTty && (brand === 'ghostty' || brand === 'kitty' || brand === 'wezterm'),
|
|
23
25
|
cursorControl: isTty,
|
|
24
26
|
theme: overrides.theme ?? 'unknown',
|
|
25
27
|
width: options.width ?? process.stdout.columns ?? 80,
|
package/dist/capabilities.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { OscWriter } from './osc.js';
|
|
2
|
+
/**
|
|
3
|
+
* Kitty graphics protocol (APC `_G`): transmit raw pixels and place them
|
|
4
|
+
* in the terminal. Ghostty, Kitty, and WezTerm speak this. Other terminals
|
|
5
|
+
* ignore APC, so a write is safe anywhere.
|
|
6
|
+
*
|
|
7
|
+
* Quiet mode (`q=2`) is always on: the terminal must not reply, so the
|
|
8
|
+
* key parser never sees an APC acknowledgement.
|
|
9
|
+
*/
|
|
10
|
+
export type PixelFormat = 'rgb' | 'rgba';
|
|
11
|
+
export interface KittyImageOptions {
|
|
12
|
+
/** Pixel bytes, tightly packed, row-major, top-left origin. */
|
|
13
|
+
readonly pixels: Uint8Array;
|
|
14
|
+
readonly width: number;
|
|
15
|
+
readonly height: number;
|
|
16
|
+
/** Default `rgba`. */
|
|
17
|
+
readonly format?: PixelFormat;
|
|
18
|
+
/** Image id (1–4294967295). Reusing an id replaces the previous image. */
|
|
19
|
+
readonly id?: number;
|
|
20
|
+
/** Placement id. Pair with `id` so a later frame replaces this one. */
|
|
21
|
+
readonly placementId?: number;
|
|
22
|
+
/** Compress with zlib before base64. Default true. */
|
|
23
|
+
readonly compress?: boolean;
|
|
24
|
+
/** Scale to this many columns. Kitty preserves aspect if `rows` is omitted. */
|
|
25
|
+
readonly columns?: number;
|
|
26
|
+
/** Scale to this many rows. */
|
|
27
|
+
readonly rows?: number;
|
|
28
|
+
/** Do not move the cursor after placing the image. Default true. */
|
|
29
|
+
readonly stay?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Encode a framebuffer as one or more Kitty graphics sequences.
|
|
33
|
+
* Chunks stay at most 4096 base64 bytes, as the protocol requires.
|
|
34
|
+
*/
|
|
35
|
+
export declare function encodeKittyImage(options: KittyImageOptions): string;
|
|
36
|
+
/**
|
|
37
|
+
* Delete images. `all` wipes every placement. A numeric `id` deletes that
|
|
38
|
+
* image and its placements.
|
|
39
|
+
*/
|
|
40
|
+
export declare function encodeKittyDelete(target?: 'all' | {
|
|
41
|
+
id: number;
|
|
42
|
+
}): string;
|
|
43
|
+
/**
|
|
44
|
+
* Place a framebuffer through the Kitty protocol. Reuses `id`/`placementId`
|
|
45
|
+
* so the next call replaces the frame without flicker.
|
|
46
|
+
*/
|
|
47
|
+
export declare class KittyGraphics {
|
|
48
|
+
private readonly writer;
|
|
49
|
+
readonly id: number;
|
|
50
|
+
readonly placementId: number;
|
|
51
|
+
constructor(writer: OscWriter, options?: {
|
|
52
|
+
id?: number;
|
|
53
|
+
placementId?: number;
|
|
54
|
+
});
|
|
55
|
+
draw(pixels: Uint8Array, width: number, height: number, options?: Omit<KittyImageOptions, 'pixels' | 'width' | 'height' | 'id' | 'placementId'>): void;
|
|
56
|
+
/** Remove this image (or every image, when `all` is true). */
|
|
57
|
+
delete(all?: boolean): void;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Encode an RGBA/RGB framebuffer as unicode half-blocks (`▀`). Each cell
|
|
61
|
+
* holds two vertical pixels (foreground = top, background = bottom).
|
|
62
|
+
* Works in any truecolor terminal, including those without Kitty graphics.
|
|
63
|
+
*/
|
|
64
|
+
export declare function encodeHalfBlocks(pixels: Uint8Array, width: number, height: number, format?: PixelFormat): string[];
|
package/dist/graphics.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { deflateSync } from 'node:zlib';
|
|
2
|
+
const CHUNK = 4096;
|
|
3
|
+
const ST = '\x1b\\';
|
|
4
|
+
function bytesPerPixel(format) {
|
|
5
|
+
return format === 'rgb' ? 3 : 4;
|
|
6
|
+
}
|
|
7
|
+
/** APC wrapper: `ESC _ G <control> ; <payload> ESC \`. */
|
|
8
|
+
function apc(control, payload = '') {
|
|
9
|
+
return `\x1b_G${control};${payload}${ST}`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Encode a framebuffer as one or more Kitty graphics sequences.
|
|
13
|
+
* Chunks stay at most 4096 base64 bytes, as the protocol requires.
|
|
14
|
+
*/
|
|
15
|
+
export function encodeKittyImage(options) {
|
|
16
|
+
const format = options.format ?? 'rgba';
|
|
17
|
+
const bpp = bytesPerPixel(format);
|
|
18
|
+
const expected = options.width * options.height * bpp;
|
|
19
|
+
if (options.pixels.byteLength < expected) {
|
|
20
|
+
throw new Error(`[terminal] Kitty image payload is ${options.pixels.byteLength} bytes, need ${expected} for ${options.width}x${options.height} ${format}.`);
|
|
21
|
+
}
|
|
22
|
+
const raw = options.pixels.subarray(0, expected);
|
|
23
|
+
const compress = options.compress !== false;
|
|
24
|
+
const body = compress ? deflateSync(raw) : Buffer.from(raw);
|
|
25
|
+
const encoded = body.toString('base64');
|
|
26
|
+
const keys = [
|
|
27
|
+
'a=T',
|
|
28
|
+
`f=${format === 'rgb' ? 24 : 32}`,
|
|
29
|
+
`s=${options.width}`,
|
|
30
|
+
`v=${options.height}`,
|
|
31
|
+
'q=2',
|
|
32
|
+
];
|
|
33
|
+
if (compress)
|
|
34
|
+
keys.push('o=z');
|
|
35
|
+
if (options.id !== undefined && options.id > 0)
|
|
36
|
+
keys.push(`i=${options.id}`);
|
|
37
|
+
if (options.placementId !== undefined && options.placementId > 0) {
|
|
38
|
+
keys.push(`p=${options.placementId}`);
|
|
39
|
+
}
|
|
40
|
+
if (options.columns !== undefined)
|
|
41
|
+
keys.push(`c=${options.columns}`);
|
|
42
|
+
if (options.rows !== undefined)
|
|
43
|
+
keys.push(`r=${options.rows}`);
|
|
44
|
+
if (options.stay !== false)
|
|
45
|
+
keys.push('C=1');
|
|
46
|
+
if (encoded.length <= CHUNK) {
|
|
47
|
+
return apc(keys.join(','), encoded);
|
|
48
|
+
}
|
|
49
|
+
const chunks = [];
|
|
50
|
+
for (let offset = 0; offset < encoded.length; offset += CHUNK) {
|
|
51
|
+
const slice = encoded.slice(offset, offset + CHUNK);
|
|
52
|
+
const last = offset + CHUNK >= encoded.length;
|
|
53
|
+
if (offset === 0) {
|
|
54
|
+
chunks.push(apc(`${keys.join(',')},m=1`, slice));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
chunks.push(apc(`m=${last ? 0 : 1}`, slice));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// The loop always emits m=1 on the first chunk. If the payload spanned
|
|
61
|
+
// more than two chunks, the last iteration already set m=0. If it spanned
|
|
62
|
+
// exactly two, the second iteration is last and also sets m=0.
|
|
63
|
+
return chunks.join('');
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Delete images. `all` wipes every placement. A numeric `id` deletes that
|
|
67
|
+
* image and its placements.
|
|
68
|
+
*/
|
|
69
|
+
export function encodeKittyDelete(target = 'all') {
|
|
70
|
+
if (target === 'all')
|
|
71
|
+
return apc('a=d,d=A,q=2');
|
|
72
|
+
return apc(`a=d,d=i,i=${target.id},q=2`);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Place a framebuffer through the Kitty protocol. Reuses `id`/`placementId`
|
|
76
|
+
* so the next call replaces the frame without flicker.
|
|
77
|
+
*/
|
|
78
|
+
export class KittyGraphics {
|
|
79
|
+
writer;
|
|
80
|
+
id;
|
|
81
|
+
placementId;
|
|
82
|
+
constructor(writer, options = {}) {
|
|
83
|
+
this.writer = writer;
|
|
84
|
+
this.id = options.id ?? 1;
|
|
85
|
+
this.placementId = options.placementId ?? 1;
|
|
86
|
+
}
|
|
87
|
+
draw(pixels, width, height, options = {}) {
|
|
88
|
+
this.writer.write(encodeKittyImage({
|
|
89
|
+
pixels,
|
|
90
|
+
width,
|
|
91
|
+
height,
|
|
92
|
+
id: this.id,
|
|
93
|
+
placementId: this.placementId,
|
|
94
|
+
...options,
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
/** Remove this image (or every image, when `all` is true). */
|
|
98
|
+
delete(all = false) {
|
|
99
|
+
this.writer.write(encodeKittyDelete(all ? 'all' : { id: this.id }));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Encode an RGBA/RGB framebuffer as unicode half-blocks (`▀`). Each cell
|
|
104
|
+
* holds two vertical pixels (foreground = top, background = bottom).
|
|
105
|
+
* Works in any truecolor terminal, including those without Kitty graphics.
|
|
106
|
+
*/
|
|
107
|
+
export function encodeHalfBlocks(pixels, width, height, format = 'rgba') {
|
|
108
|
+
const bpp = bytesPerPixel(format);
|
|
109
|
+
const lines = [];
|
|
110
|
+
const rows = Math.ceil(height / 2);
|
|
111
|
+
for (let cy = 0; cy < rows; cy++) {
|
|
112
|
+
let line = '';
|
|
113
|
+
const yTop = cy * 2;
|
|
114
|
+
const yBot = yTop + 1;
|
|
115
|
+
for (let x = 0; x < width; x++) {
|
|
116
|
+
const top = sample(pixels, width, height, x, yTop, bpp);
|
|
117
|
+
const bot = yBot < height ? sample(pixels, width, height, x, yBot, bpp) : top;
|
|
118
|
+
line += `\x1b[38;2;${top.r};${top.g};${top.b}m\x1b[48;2;${bot.r};${bot.g};${bot.b}m▀`;
|
|
119
|
+
}
|
|
120
|
+
line += '\x1b[0m';
|
|
121
|
+
lines.push(line);
|
|
122
|
+
}
|
|
123
|
+
return lines;
|
|
124
|
+
}
|
|
125
|
+
function sample(pixels, width, height, x, y, bpp) {
|
|
126
|
+
if (y >= height)
|
|
127
|
+
y = height - 1;
|
|
128
|
+
const i = (y * width + x) * bpp;
|
|
129
|
+
return {
|
|
130
|
+
r: pixels[i] ?? 0,
|
|
131
|
+
g: pixels[i + 1] ?? 0,
|
|
132
|
+
b: pixels[i + 2] ?? 0,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=graphics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphics.js","sourceRoot":"","sources":["../src/graphics.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export { ansi } from './ansi.js';
|
|
|
2
2
|
export { detectCapabilities, type CapabilityOverrides, type ColorLevel, type DetectCapabilitiesOptions, type TerminalBrand, type TerminalCapabilities, } from './capabilities.js';
|
|
3
3
|
export { guardedOsc, osc, type OscWriter } from './osc.js';
|
|
4
4
|
export { parseOscColor, parseThemeResponses, queryTerminalTheme, relativeLuminance, themeFromBackground, type Rgb, type TerminalTheme, type ThemeQueryFailure, type ThemeQueryInput, type ThemeQueryOptions, type ThemeQueryResult, } from './theme-query.js';
|
|
5
|
-
export { enterRawMode, KeyParser, parseKeys, type KeyEvent, type KeyName } from './keys.js';
|
|
5
|
+
export { enterRawMode, KeyParser, parseKeys, enableKittyKeyboard, disableKittyKeyboard, KITTY_KEYBOARD, KITTY_KEYBOARD_KEYUP, type KeyEvent, type KeyKind, type KeyName } from './keys.js';
|
|
6
|
+
export { KittyGraphics, encodeHalfBlocks, encodeKittyDelete, encodeKittyImage, type KittyImageOptions, type PixelFormat, } from './graphics.js';
|
|
6
7
|
export { disableMouse, enableMouse, isMouseEvent, parseMouseEvents, type MouseButtons, type MouseEvent, type MouseModeOptions, } from './mouse.js';
|
|
7
8
|
export { Ticker, type TickerOptions } from './ticker.js';
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,8 @@ export { ansi } from './ansi.js';
|
|
|
2
2
|
export { detectCapabilities, } from './capabilities.js';
|
|
3
3
|
export { guardedOsc, osc } from './osc.js';
|
|
4
4
|
export { parseOscColor, parseThemeResponses, queryTerminalTheme, relativeLuminance, themeFromBackground, } from './theme-query.js';
|
|
5
|
-
export { enterRawMode, KeyParser, parseKeys } from './keys.js';
|
|
5
|
+
export { enterRawMode, KeyParser, parseKeys, enableKittyKeyboard, disableKittyKeyboard, KITTY_KEYBOARD, KITTY_KEYBOARD_KEYUP } from './keys.js';
|
|
6
|
+
export { KittyGraphics, encodeHalfBlocks, encodeKittyDelete, encodeKittyImage, } from './graphics.js';
|
|
6
7
|
export { disableMouse, enableMouse, isMouseEvent, parseMouseEvents, } from './mouse.js';
|
|
7
8
|
export { Ticker } from './ticker.js';
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,kBAAkB,GAMnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,GAAG,EAAkB,MAAM,UAAU,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GAOpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,kBAAkB,GAMnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,GAAG,EAAkB,MAAM,UAAU,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GAOpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,cAAc,EAAE,oBAAoB,EAA6C,MAAM,WAAW,CAAC;AAC3L,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GAGjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,GAIjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAsB,MAAM,aAAa,CAAC"}
|
package/dist/keys.d.ts
CHANGED
|
@@ -1,14 +1,47 @@
|
|
|
1
1
|
import type { ReadStream } from 'node:tty';
|
|
2
2
|
export type KeyName = 'up' | 'down' | 'left' | 'right' | 'home' | 'end' | 'page-up' | 'page-down' | 'enter' | 'escape' | 'backspace' | 'delete' | 'tab' | 'shift-tab' | 'space' | `ctrl+${string}` | `alt+${string}` | string;
|
|
3
|
+
export type KeyKind = 'press' | 'repeat' | 'release';
|
|
3
4
|
export interface KeyEvent {
|
|
4
5
|
name: KeyName;
|
|
5
6
|
/** Raw character for printable keys. */
|
|
6
7
|
ch?: string;
|
|
8
|
+
/**
|
|
9
|
+
* How the key moved. Legacy terminals only ever send `press` (and treat
|
|
10
|
+
* auto-repeat as another press). Kitty's keyboard protocol can also send
|
|
11
|
+
* `repeat` and `release`. Omitted means `press`.
|
|
12
|
+
*/
|
|
13
|
+
kind?: KeyKind;
|
|
14
|
+
readonly shift?: boolean;
|
|
15
|
+
readonly alt?: boolean;
|
|
16
|
+
readonly ctrl?: boolean;
|
|
7
17
|
}
|
|
18
|
+
/** Progressive-enhancement bits for the Kitty keyboard protocol. */
|
|
19
|
+
export declare const KITTY_KEYBOARD: {
|
|
20
|
+
/** Disambiguate Esc / alt / ctrl so they never collide with CSI. */
|
|
21
|
+
readonly disambiguate: 1;
|
|
22
|
+
/** Report press, repeat, and release as separate events. */
|
|
23
|
+
readonly eventTypes: 2;
|
|
24
|
+
/** Report shifted / base-layout alternate key codes. */
|
|
25
|
+
readonly alternateKeys: 4;
|
|
26
|
+
/** Send every key (including letters) as a CSI u event. Needed for key-up. */
|
|
27
|
+
readonly allKeys: 8;
|
|
28
|
+
/** Embed associated text in the CSI u sequence. */
|
|
29
|
+
readonly associatedText: 16;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Flags that give games real key-up: disambiguate + event types + all keys.
|
|
33
|
+
* Letter keys otherwise never produce a release event.
|
|
34
|
+
*/
|
|
35
|
+
export declare const KITTY_KEYBOARD_KEYUP: number;
|
|
36
|
+
/** Push the Kitty keyboard protocol with `flags`. Default enables key-up. */
|
|
37
|
+
export declare function enableKittyKeyboard(flags?: number): string;
|
|
38
|
+
/** Pop the Kitty keyboard protocol (restore whatever was in force before). */
|
|
39
|
+
export declare function disableKittyKeyboard(): string;
|
|
8
40
|
/**
|
|
9
41
|
* Parse a raw input buffer into key events. Pure and synchronous.
|
|
10
|
-
* Handles CSI sequences (arrows, home/end, paging, delete
|
|
11
|
-
* alt+char, control characters, and
|
|
42
|
+
* Handles CSI sequences (arrows, home/end, paging, delete, CSI u), Kitty
|
|
43
|
+
* keyboard releases, bare escape, alt+char, control characters, and
|
|
44
|
+
* printable text. APC (Kitty graphics replies) is skipped.
|
|
12
45
|
*/
|
|
13
46
|
export declare function parseKeys(buffer: string): KeyEvent[];
|
|
14
47
|
/**
|
package/dist/keys.js
CHANGED
|
@@ -1,8 +1,35 @@
|
|
|
1
1
|
import { isMouseEvent } from './mouse.js';
|
|
2
|
+
/** Progressive-enhancement bits for the Kitty keyboard protocol. */
|
|
3
|
+
export const KITTY_KEYBOARD = {
|
|
4
|
+
/** Disambiguate Esc / alt / ctrl so they never collide with CSI. */
|
|
5
|
+
disambiguate: 1,
|
|
6
|
+
/** Report press, repeat, and release as separate events. */
|
|
7
|
+
eventTypes: 2,
|
|
8
|
+
/** Report shifted / base-layout alternate key codes. */
|
|
9
|
+
alternateKeys: 4,
|
|
10
|
+
/** Send every key (including letters) as a CSI u event. Needed for key-up. */
|
|
11
|
+
allKeys: 8,
|
|
12
|
+
/** Embed associated text in the CSI u sequence. */
|
|
13
|
+
associatedText: 16,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Flags that give games real key-up: disambiguate + event types + all keys.
|
|
17
|
+
* Letter keys otherwise never produce a release event.
|
|
18
|
+
*/
|
|
19
|
+
export const KITTY_KEYBOARD_KEYUP = KITTY_KEYBOARD.disambiguate | KITTY_KEYBOARD.eventTypes | KITTY_KEYBOARD.allKeys;
|
|
20
|
+
/** Push the Kitty keyboard protocol with `flags`. Default enables key-up. */
|
|
21
|
+
export function enableKittyKeyboard(flags = KITTY_KEYBOARD_KEYUP) {
|
|
22
|
+
return `\x1b[>${flags}u`;
|
|
23
|
+
}
|
|
24
|
+
/** Pop the Kitty keyboard protocol (restore whatever was in force before). */
|
|
25
|
+
export function disableKittyKeyboard() {
|
|
26
|
+
return '\x1b[<u';
|
|
27
|
+
}
|
|
2
28
|
/**
|
|
3
29
|
* Parse a raw input buffer into key events. Pure and synchronous.
|
|
4
|
-
* Handles CSI sequences (arrows, home/end, paging, delete
|
|
5
|
-
* alt+char, control characters, and
|
|
30
|
+
* Handles CSI sequences (arrows, home/end, paging, delete, CSI u), Kitty
|
|
31
|
+
* keyboard releases, bare escape, alt+char, control characters, and
|
|
32
|
+
* printable text. APC (Kitty graphics replies) is skipped.
|
|
6
33
|
*/
|
|
7
34
|
export function parseKeys(buffer) {
|
|
8
35
|
const events = [];
|
|
@@ -13,8 +40,16 @@ export function parseKeys(buffer) {
|
|
|
13
40
|
const char = buffer[i];
|
|
14
41
|
if (char === '\x1b') {
|
|
15
42
|
const rest = buffer.slice(i + 1);
|
|
43
|
+
// APC (Kitty graphics): ESC _ ... ST (ESC \). Skip, never a key.
|
|
44
|
+
if (rest.startsWith('_')) {
|
|
45
|
+
const st = rest.indexOf('\x1b\\');
|
|
46
|
+
if (st < 0)
|
|
47
|
+
break;
|
|
48
|
+
i += 1 + st + 2;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
16
51
|
if (rest.startsWith('[') || rest.startsWith('O')) {
|
|
17
|
-
const matcher = /^\[([0-9
|
|
52
|
+
const matcher = /^\[([0-9;:?]*)([\x40-\x7e])/.exec(rest) ?? /^O([\x40-\x7e])/.exec(rest);
|
|
18
53
|
if (matcher) {
|
|
19
54
|
const event = escapeSequence(matcher[1] ?? '', (matcher[2] ?? matcher[1]));
|
|
20
55
|
if (event)
|
|
@@ -22,38 +57,36 @@ export function parseKeys(buffer) {
|
|
|
22
57
|
i += 1 + matcher[0].length;
|
|
23
58
|
continue;
|
|
24
59
|
}
|
|
25
|
-
// Incomplete sequence (should not happen for complete buffers).
|
|
26
60
|
break;
|
|
27
61
|
}
|
|
28
62
|
if (rest.startsWith(' ')) {
|
|
29
63
|
const ch = rest.slice(1, 2);
|
|
30
|
-
events.push({ name: `alt+${ch}`, ch });
|
|
64
|
+
events.push({ name: `alt+${ch}`, ch, alt: true, kind: 'press' });
|
|
31
65
|
i += 2;
|
|
32
66
|
continue;
|
|
33
67
|
}
|
|
34
|
-
events.push({ name: 'escape' });
|
|
68
|
+
events.push({ name: 'escape', kind: 'press' });
|
|
35
69
|
i += 1;
|
|
36
70
|
continue;
|
|
37
71
|
}
|
|
38
72
|
if (char === '\r' || char === '\n') {
|
|
39
|
-
events.push({ name: 'enter', ch: '\r' });
|
|
73
|
+
events.push({ name: 'enter', ch: '\r', kind: 'press' });
|
|
40
74
|
i += 1;
|
|
41
75
|
continue;
|
|
42
76
|
}
|
|
43
77
|
if (char === '\x7f' || char === '\x08') {
|
|
44
|
-
events.push({ name: 'backspace' });
|
|
78
|
+
events.push({ name: 'backspace', kind: 'press' });
|
|
45
79
|
i += 1;
|
|
46
80
|
continue;
|
|
47
81
|
}
|
|
48
82
|
if (char === '\t') {
|
|
49
|
-
events.push({ name: 'tab' });
|
|
83
|
+
events.push({ name: 'tab', kind: 'press' });
|
|
50
84
|
i += 1;
|
|
51
85
|
continue;
|
|
52
86
|
}
|
|
53
87
|
if (char >= '\x01' && char <= '\x1a') {
|
|
54
|
-
// ctrl+a .. ctrl+z
|
|
55
88
|
const letter = String.fromCharCode(char.charCodeAt(0) + 96);
|
|
56
|
-
events.push({ name: `ctrl+${letter}
|
|
89
|
+
events.push({ name: `ctrl+${letter}`, ctrl: true, kind: 'press' });
|
|
57
90
|
i += 1;
|
|
58
91
|
continue;
|
|
59
92
|
}
|
|
@@ -62,48 +95,119 @@ export function parseKeys(buffer) {
|
|
|
62
95
|
continue;
|
|
63
96
|
}
|
|
64
97
|
if (char === ' ') {
|
|
65
|
-
events.push({ name: 'space', ch: ' ' });
|
|
98
|
+
events.push({ name: 'space', ch: ' ', kind: 'press' });
|
|
66
99
|
i += 1;
|
|
67
100
|
continue;
|
|
68
101
|
}
|
|
69
|
-
events.push({ name: char, ch: char });
|
|
102
|
+
events.push({ name: char, ch: char, kind: 'press' });
|
|
70
103
|
i += 1;
|
|
71
104
|
}
|
|
72
105
|
return events;
|
|
73
106
|
}
|
|
107
|
+
function parseModField(field) {
|
|
108
|
+
const [modRaw, typeRaw] = (field ?? '1').split(':');
|
|
109
|
+
const mod = Math.max(0, Number(modRaw ?? '1') - 1);
|
|
110
|
+
const typeNum = typeRaw === undefined || typeRaw === '' ? 1 : Number(typeRaw);
|
|
111
|
+
const kind = typeNum === 3 ? 'release' : typeNum === 2 ? 'repeat' : 'press';
|
|
112
|
+
return {
|
|
113
|
+
shift: (mod & 1) !== 0,
|
|
114
|
+
alt: (mod & 2) !== 0,
|
|
115
|
+
ctrl: (mod & 4) !== 0,
|
|
116
|
+
kind,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function namedKey(base, mods, ch) {
|
|
120
|
+
let name = base;
|
|
121
|
+
if (mods.ctrl && mods.alt)
|
|
122
|
+
name = `ctrl+alt+${base}`;
|
|
123
|
+
else if (mods.ctrl)
|
|
124
|
+
name = `ctrl+${base}`;
|
|
125
|
+
else if (mods.alt)
|
|
126
|
+
name = `alt+${base}`;
|
|
127
|
+
return { name, ch, kind: mods.kind, shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl };
|
|
128
|
+
}
|
|
129
|
+
/** CSI u / functional-key mapping for the Kitty keyboard protocol. */
|
|
130
|
+
function fromKeyCode(code, mods) {
|
|
131
|
+
switch (code) {
|
|
132
|
+
case 27:
|
|
133
|
+
return { name: 'escape', kind: mods.kind, shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl };
|
|
134
|
+
case 13:
|
|
135
|
+
return { name: 'enter', ch: '\r', kind: mods.kind, shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl };
|
|
136
|
+
case 9:
|
|
137
|
+
return mods.shift
|
|
138
|
+
? { name: 'shift-tab', kind: mods.kind, shift: true, alt: mods.alt, ctrl: mods.ctrl }
|
|
139
|
+
: { name: 'tab', kind: mods.kind, shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl };
|
|
140
|
+
case 127:
|
|
141
|
+
case 8:
|
|
142
|
+
return { name: 'backspace', kind: mods.kind, shift: mods.shift, alt: mods.alt, ctrl: mods.ctrl };
|
|
143
|
+
case 32:
|
|
144
|
+
return namedKey('space', mods, ' ');
|
|
145
|
+
default:
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
if (code >= 32 && code <= 126) {
|
|
149
|
+
const ch = String.fromCharCode(code);
|
|
150
|
+
const base = ch === ' ' ? 'space' : ch;
|
|
151
|
+
return namedKey(base, mods, ch);
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
74
155
|
function escapeSequence(code, letter) {
|
|
75
|
-
const
|
|
156
|
+
const fields = code.split(';');
|
|
157
|
+
const first = fields[0] ?? '';
|
|
158
|
+
const mods = parseModField(fields[1]);
|
|
159
|
+
if (letter === 'u') {
|
|
160
|
+
// CSI ? flags u is a keyboard-flags query reply, not a key.
|
|
161
|
+
if (first.startsWith('?'))
|
|
162
|
+
return null;
|
|
163
|
+
const keyCode = Number((first.split(':')[0] ?? '').replace('?', ''));
|
|
164
|
+
if (!Number.isFinite(keyCode))
|
|
165
|
+
return null;
|
|
166
|
+
return fromKeyCode(keyCode, mods);
|
|
167
|
+
}
|
|
168
|
+
const nav = (name) => ({
|
|
169
|
+
name,
|
|
170
|
+
kind: mods.kind,
|
|
171
|
+
shift: mods.shift,
|
|
172
|
+
alt: mods.alt,
|
|
173
|
+
ctrl: mods.ctrl,
|
|
174
|
+
});
|
|
76
175
|
switch (letter) {
|
|
77
176
|
case 'A':
|
|
78
|
-
return
|
|
177
|
+
return nav('up');
|
|
79
178
|
case 'B':
|
|
80
|
-
return
|
|
179
|
+
return nav('down');
|
|
81
180
|
case 'C':
|
|
82
|
-
return
|
|
181
|
+
return nav('right');
|
|
83
182
|
case 'D':
|
|
84
|
-
return
|
|
183
|
+
return nav('left');
|
|
85
184
|
case 'H':
|
|
86
|
-
return
|
|
185
|
+
return nav('home');
|
|
87
186
|
case 'F':
|
|
88
|
-
return
|
|
187
|
+
return nav('end');
|
|
89
188
|
case 'Z':
|
|
90
|
-
return { name: 'shift-tab' };
|
|
91
|
-
case '~':
|
|
189
|
+
return { name: 'shift-tab', kind: mods.kind, shift: true, alt: mods.alt, ctrl: mods.ctrl };
|
|
190
|
+
case '~': {
|
|
191
|
+
const param = first.split(':')[0] ?? '';
|
|
92
192
|
switch (param) {
|
|
93
193
|
case '1':
|
|
94
|
-
|
|
194
|
+
case '7':
|
|
195
|
+
return nav('home');
|
|
95
196
|
case '2':
|
|
197
|
+
return nav('delete');
|
|
96
198
|
case '3':
|
|
97
|
-
return
|
|
199
|
+
return nav('delete');
|
|
98
200
|
case '4':
|
|
99
|
-
|
|
201
|
+
case '8':
|
|
202
|
+
return nav('end');
|
|
100
203
|
case '5':
|
|
101
|
-
return
|
|
204
|
+
return nav('page-up');
|
|
102
205
|
case '6':
|
|
103
|
-
return
|
|
206
|
+
return nav('page-down');
|
|
104
207
|
default:
|
|
105
208
|
return null;
|
|
106
209
|
}
|
|
210
|
+
}
|
|
107
211
|
default:
|
|
108
212
|
return null;
|
|
109
213
|
}
|
|
@@ -121,8 +225,6 @@ export class KeyParser {
|
|
|
121
225
|
return [];
|
|
122
226
|
const ready = this.pending.slice(0, safe);
|
|
123
227
|
this.pending = this.pending.slice(safe);
|
|
124
|
-
// A complete mouse report produces no key events but must not linger:
|
|
125
|
-
// leaving it in `pending` would corrupt the next chunk's parse.
|
|
126
228
|
if (isMouseEvent(ready))
|
|
127
229
|
return [];
|
|
128
230
|
return parseKeys(ready);
|
|
@@ -133,26 +235,26 @@ export class KeyParser {
|
|
|
133
235
|
if (esc < 0)
|
|
134
236
|
return text.length;
|
|
135
237
|
const rest = text.slice(esc + 1);
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
|
|
238
|
+
// ST (ESC \): terminator of an APC. The sequence ends two bytes later.
|
|
239
|
+
if (rest.startsWith('\\'))
|
|
240
|
+
return esc + 2;
|
|
241
|
+
if (rest.startsWith('_')) {
|
|
242
|
+
return rest.includes('\x1b\\') ? text.length : -1;
|
|
243
|
+
}
|
|
139
244
|
if (rest.startsWith('[<')) {
|
|
140
245
|
return /^\[<\d+;\d+;\d+[Mm]$/.test(rest) ? text.length : -1;
|
|
141
246
|
}
|
|
142
247
|
if (rest.startsWith('[') && /\d+;\d+;\d+M$/.test(rest)) {
|
|
143
|
-
return text.length;
|
|
248
|
+
return text.length;
|
|
144
249
|
}
|
|
145
250
|
if (rest.startsWith('M')) {
|
|
146
251
|
return /^M[\x20-\x7f]{3}$/.test(rest) ? text.length : -1;
|
|
147
252
|
}
|
|
148
253
|
if (rest.length === 0) {
|
|
149
|
-
// Trailing lone ESC at a chunk boundary: terminals deliver CSI
|
|
150
|
-
// sequences as single reads, so a bare ESC here IS the escape key.
|
|
151
254
|
return esc + 1;
|
|
152
255
|
}
|
|
153
256
|
if (rest[0] === '[') {
|
|
154
|
-
|
|
155
|
-
return /^\[[0-9;?]*[\x40-\x7e]$/.test(rest) ? text.length : -1;
|
|
257
|
+
return /^\[[0-9;:?]*[\x40-\x7e]$/.test(rest) ? text.length : -1;
|
|
156
258
|
}
|
|
157
259
|
if (rest[0] === 'O') {
|
|
158
260
|
return /^O[\x40-\x7e]$/.test(rest) ? text.length : -1;
|
|
@@ -160,7 +262,6 @@ export class KeyParser {
|
|
|
160
262
|
if (rest[0] === ' ') {
|
|
161
263
|
return rest.length >= 2 ? text.length : -1;
|
|
162
264
|
}
|
|
163
|
-
// Bare escape followed by other data: the escape itself is complete.
|
|
164
265
|
return esc + 1;
|
|
165
266
|
}
|
|
166
267
|
}
|
package/dist/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4B1C;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,YAAY,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAW,CAAC;QAEjC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,MAAM,OAAO,GAAG,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxF,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;oBACrF,IAAI,KAAK;wBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC9B,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC3B,SAAS;gBACX,CAAC;gBACD,gEAAgE;gBAChE,MAAM;YACR,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvC,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChC,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YACnC,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7B,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACrC,mBAAmB;YACnB,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,MAAM,EAAE,EAAE,CAAC,CAAC;YACxC,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;YAClB,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACxC,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,MAAc;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxB,KAAK,GAAG;YACN,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1B,KAAK,GAAG;YACN,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,KAAK,GAAG;YACN,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1B,KAAK,GAAG;YACN,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1B,KAAK,GAAG;YACN,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACzB,KAAK,GAAG;YACN,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAC/B,KAAK,GAAG;YACN,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,GAAG;oBACN,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBAC1B,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG;oBACN,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC5B,KAAK,GAAG;oBACN,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACzB,KAAK,GAAG;oBACN,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAC7B,KAAK,GAAG;oBACN,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;gBAC/B;oBACE,OAAO,IAAI,CAAC;YAChB,CAAC;QACH;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,SAAS;IACZ,OAAO,GAAG,EAAE,CAAC;IAErB,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAExC,sEAAsE;QACtE,gEAAgE;QAChE,IAAI,YAAY,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnC,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,4EAA4E;IACpE,cAAc,CAAC,IAAY;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACjC,oEAAoE;QACpE,kEAAkE;QAClE,uEAAuE;QACvE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,aAAa;QACnC,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,+DAA+D;YAC/D,mEAAmE;YACnE,OAAO,GAAG,GAAG,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACpB,uEAAuE;YACvE,OAAO,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACpB,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,qEAAqE;QACrE,OAAO,GAAG,GAAG,CAAC,CAAC;IACjB,CAAC;CACF;AAED,6DAA6D;AAC7D,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,CAAC,MAAM,EAAE,CAAC;IACf,OAAO,GAAG,EAAE;QACV,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzC,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mudah-cli/terminal",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Terminal capability detection, OSC
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Terminal capability detection, OSC emitters, Kitty graphics, Kitty keyboard (key-up), and key/mouse parsing.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"engines": {
|