stablyai/orca · error · Error

${formatKeybindingList([blockingConflict.binding], keybindin

Error message

${formatKeybindingList([blockingConflict.binding], keybindingPlatform)} conflicts with another shortcut.

What it means

Thrown by writeKeybindingOverride when the candidate binding set produces a conflict that includes the action being written (findKeybindingConflicts finds a conflict whose actionIds include actionId). The message shows the human-readable binding (platform-formatted) that collides. The write is aborted so the file never holds two actions on the same chord.

Source

Thrown at src/main/keybindings/keybinding-file.ts:449

): KeybindingFileSnapshot {
  if (!isKeybindingActionId(actionId)) {
    throw new Error(`Unknown keybinding action "${actionId}".`)
  }
  const normalizedBindings = normalizeWriteBindingValue(actionId, bindings)

  const keybindingPlatform = getKeybindingPlatform(platform)
  const currentSnapshot = readKeybindingFile(path, platform)
  const candidateOverrides = { ...currentSnapshot.overrides }
  if (normalizedBindings === null) {
    delete candidateOverrides[actionId]
  } else {
    candidateOverrides[actionId] = normalizedBindings
  }
  const blockingConflict = findKeybindingConflicts(keybindingPlatform, candidateOverrides).find(
    (conflict) => conflict.actionIds.includes(actionId)
  )
  if (blockingConflict) {
    throw new Error(
      `${formatKeybindingList([blockingConflict.binding], keybindingPlatform)} conflicts with another shortcut.`
    )
  }

  return writeActivePlatformSection(
    path,
    platform,
    currentSnapshot.commonOverrides,
    (activePlatform) => {
      if (normalizedBindings === null) {
        // Why: Settings edits are scoped to the current platform. A hand-authored
        // common binding may be intentional for other OSes, so reset only removes
        // the platform-specific mask instead of deleting the shared value.
        delete activePlatform[actionId]
      } else {
        activePlatform[actionId] = normalizedBindings
      }
    }

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Pick a different chord for the action, or clear/rebind the conflicting action first.
  2. Pass null for the conflicting action's override to unset it, then write yours.
  3. Inspect currentSnapshot.overrides for the duplicate chord before writing.
  4. Use formatKeybindingList output in the message to identify the exact colliding chord.

Example fix

// before
writeKeybindingOverride(path, platform, 'cmd.a', ['Cmd+P']) // Cmd+P taken by cmd.b
// after
writeKeybindingOverride(path, platform, 'cmd.b', null)
writeKeybindingOverride(path, platform, 'cmd.a', ['Cmd+P'])
Defensive patterns

Strategy: validation

Validate before calling

const conflicts = findKeybindingConflicts(getKeybindingPlatform(platform), candidateOverrides).filter((c) => c.actionIds.includes(actionId))
if (conflicts.length) await promptResolveConflict(conflicts[0])

Type guard

function hasBlockingConflict(platform: NodeJS.Platform, overrides: KeybindingOverrides, actionId: string): boolean {
  return findKeybindingConflicts(getKeybindingPlatform(platform), overrides).some((c) => c.actionIds.includes(actionId))
}

Try / catch

try { writeKeybindingOverride(path, platform, actionId, bindings) }
catch (e) { if (/conflicts with another shortcut/.test(String((e as Error).message))) await promptResolveConflict(e.message); else throw e }

Prevention

When it happens

Trigger: Assigning a chord already used by another action on the same platform — e.g. binding 'Cmd+P' to two different commands, or a chord that overlaps a system/pinned shortcut. Conflicts are scoped to the active platform's overrides.

Common situations: User picks a chord already taken. Importing a preset that overlaps existing overrides. Cross-platform file where the same chord is fine on one OS but collides on the active one.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/2c3cdb21af6e6fb0. Report an issue: GitHub.