mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-19 09:41:17 -07:00
66 lines
1.4 KiB
TypeScript
66 lines
1.4 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import {
|
|
type Command,
|
|
type KeyBinding,
|
|
type KeyBindingConfig,
|
|
defaultKeyBindings,
|
|
} from '../../config/keyBindings.js';
|
|
|
|
/**
|
|
* Maps internal key names to user-friendly display names.
|
|
*/
|
|
const KEY_NAME_MAP: Record<string, string> = {
|
|
return: 'Enter',
|
|
escape: 'Esc',
|
|
backspace: 'Backspace',
|
|
delete: 'Delete',
|
|
up: 'Up',
|
|
down: 'Down',
|
|
left: 'Left',
|
|
right: 'Right',
|
|
pageup: 'Page Up',
|
|
pagedown: 'Page Down',
|
|
home: 'Home',
|
|
end: 'End',
|
|
tab: 'Tab',
|
|
space: 'Space',
|
|
};
|
|
|
|
/**
|
|
* Formats a single KeyBinding into a human-readable string (e.g., "Ctrl+C").
|
|
*/
|
|
export function formatKeyBinding(binding: KeyBinding): string {
|
|
const parts: string[] = [];
|
|
|
|
if (binding.ctrl) parts.push('Ctrl');
|
|
if (binding.alt) parts.push('Alt');
|
|
if (binding.shift) parts.push('Shift');
|
|
if (binding.cmd) parts.push('Cmd');
|
|
|
|
const keyName = KEY_NAME_MAP[binding.key] || binding.key.toUpperCase();
|
|
parts.push(keyName);
|
|
|
|
return parts.join('+');
|
|
}
|
|
|
|
/**
|
|
* Formats the primary keybinding for a command.
|
|
*/
|
|
export function formatCommand(
|
|
command: Command,
|
|
config: KeyBindingConfig = defaultKeyBindings,
|
|
): string {
|
|
const bindings = config[command];
|
|
if (!bindings || bindings.length === 0) {
|
|
return '';
|
|
}
|
|
|
|
// Use the first binding as the primary one for display
|
|
return formatKeyBinding(bindings[0]);
|
|
}
|