Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
1.7 kB · 52 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253/** * Keybindings template generator. * Generates a well-documented template file for ~/.claude/keybindings.json */
import { jsonStringify } from '../utils/slowOperations.js'import { DEFAULT_BINDINGS } from './defaultBindings.js'import { NON_REBINDABLE, normalizeKeyForComparison,} from './reservedShortcuts.js'import type { KeybindingBlock } from './types.js'
/** * Filter out reserved shortcuts that cannot be rebound. * These would cause /doctor to warn, so we exclude them from the template. */function filterReservedShortcuts(blocks: KeybindingBlock[]): KeybindingBlock[] { const reservedKeys = new Set( NON_REBINDABLE.map(r => normalizeKeyForComparison(r.key)), )
return blocks .map(block => { const filteredBindings: Record<string, string | null> = {} for (const [key, action] of Object.entries(block.bindings)) { if (!reservedKeys.has(normalizeKeyForComparison(key))) { filteredBindings[key] = action } } return { context: block.context, bindings: filteredBindings } }) .filter(block => Object.keys(block.bindings).length > 0)}
/** * Generate a template keybindings.json file content. * Creates a fully valid JSON file with all default bindings that users can customize. */export function generateKeybindingsTemplate(): string { // Filter out reserved shortcuts that cannot be rebound const bindings = filterReservedShortcuts(DEFAULT_BINDINGS)
// Format as object wrapper with bindings array const config = { $schema: 'https://www.schemastore.org/claude-code-keybindings.json', $docs: 'https://code.claude.com/docs/en/keybindings', bindings, }
return jsonStringify(config, null, 2) + '\n'}