| 212 | } |
| 213 | |
| 214 | export function registerOpencodeKeymap(keymap: OpenTuiKeymap, renderer: CliRenderer, config: ResolvedKeymapConfig) { |
| 215 | const modeStack = createOpencodeModeStack(keymap) |
| 216 | const offCommaBindings = registerCommaBindings(keymap) |
| 217 | const offAliasExpander = registerKeyAliases(keymap) |
| 218 | const offBaseLayout = registerBaseLayoutFallback(keymap) |
| 219 | const leader = leaderKey(config) |
| 220 | const offLeader = leader |
| 221 | ? registerTimedLeader(keymap, { |
| 222 | trigger: leader, |
| 223 | name: LEADER_TOKEN, |
| 224 | timeoutMs: config.leader_timeout, |
| 225 | }) |
| 226 | : () => {} |
| 227 | const offEscape = registerEscapeClearsPendingSequence(keymap) |
| 228 | const offBackspace = registerBackspacePopsPendingSequence(keymap) |
| 229 | const offInputBindings = registerManagedTextareaLayer(keymap, renderer, { |
| 230 | enabled: () => hasManagedTextareaFocus(renderer), |
| 231 | bindings: config.keybinds.gather("input", inputCommands), |
| 232 | }) |
| 233 | |
| 234 | return () => { |
| 235 | offInputBindings() |
| 236 | offBackspace() |
| 237 | offEscape() |
| 238 | offLeader() |
| 239 | offAliasExpander() |
| 240 | offBaseLayout() |
| 241 | offCommaBindings() |
| 242 | modeStack.dispose() |
| 243 | } |
| 244 | } |
| 245 | |
| 246 | export function useLeaderActive(): Accessor<boolean> { |
| 247 | return useKeymapSelector((keymap: OpenTuiKeymap) => keymap.getPendingSequence()[0]?.tokenName === LEADER_TOKEN) |