Download packages/cli/src/ui/key/keyToAnsi.ts from SaylorTwift/gemini-cli: direct link, hf CLI and curl.
- Browser
- Download file 1.28 kB
-
https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/packages/cli/src/ui/key/keyToAnsi.ts
- Command line
-
hf download hf://SaylorTwift/gemini-cli/packages/cli/src/ui/key/keyToAnsi.ts
-
curl -L -o keyToAnsi.ts https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/packages/cli/src/ui/key/keyToAnsi.ts
1.28 kB
| /** | |
| * @license | |
| * Copyright 2025 Google LLC | |
| * SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| import type { Key } from '../contexts/KeypressContext.js'; | |
| export type { Key }; | |
| const SPECIAL_KEYS: Record<string, string> = { | |
| up: '\x1b[A', | |
| down: '\x1b[B', | |
| right: '\x1b[C', | |
| left: '\x1b[D', | |
| escape: '\x1b', | |
| tab: '\t', | |
| backspace: '\x7f', | |
| delete: '\x1b[3~', | |
| home: '\x1b[H', | |
| end: '\x1b[F', | |
| pageup: '\x1b[5~', | |
| pagedown: '\x1b[6~', | |
| enter: '\r', | |
| }; | |
| /** | |
| * Translates a Key object into its corresponding ANSI escape sequence. | |
| * This is useful for sending control characters to a pseudo-terminal. | |
| * | |
| * @param key The Key object to translate. | |
| * @returns The ANSI escape sequence as a string, or null if no mapping exists. | |
| */ | |
| export function keyToAnsi(key: Key): string | null { | |
| if (key.ctrl) { | |
| // Ctrl + letter (A-Z maps to 1-26, e.g., Ctrl+C is \x03) | |
| if (key.name >= 'a' && key.name <= 'z') { | |
| return String.fromCharCode( | |
| key.name.charCodeAt(0) - 'a'.charCodeAt(0) + 1, | |
| ); | |
| } | |
| } | |
| // Arrow keys and other special keys | |
| if (key.name in SPECIAL_KEYS) { | |
| return SPECIAL_KEYS[key.name]; | |
| } | |
| // If it's a simple character, return it. | |
| if (!key.ctrl && !key.cmd && key.sequence) { | |
| return key.sequence; | |
| } | |
| return null; | |
| } | |