chore: initialize recovered claude workspace
This commit is contained in:
52
src/keybindings/template.ts
Normal file
52
src/keybindings/template.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
/**
|
||||
* 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'
|
||||
}
|
||||
Reference in New Issue
Block a user