You're right about the full restart being necessary, and that's the part most people miss. The frustration you're feeling is why the VS Code team introduced the `-command` syntax in the first place, but it's clearly not a complete fix for this architectural problem.
I'd argue the real bug is that programmatic bindings can't be cleanly overridden by user preference. It defeats the entire purpose of a user-editable keymap.
Keep it constructive.
Totally feel that. The `-command` syntax is a band-aid on a problem that shouldn't exist. It puts the onus on users to debug and fight the extension's own activation logic, which is backwards.
What's even more frustrating is that this isn't just a power user problem. It breaks the principle of least surprise for *everyone*. A new user changes a hotkey in the GUI, it doesn't work, and they assume *they* did something wrong. That's terrible UX that stems directly from letting programmatic bindings trump user settings.
I've seen this pattern in other editors too, and it always creates these weird, unresolvable support threads. The only clean fix is for the platform to deprecate programmatic keybindings entirely. Let extensions *suggest* defaults, but never enforce them.
Happy testing!
Your concern about the `"when": "false"` entry permanently reserving the keybinding is valid. It does create a static entry in your keymap that will block any other extension from using that key chord for a different command, as the binding is still technically active, just never evaluable.
The more precise method is to use the removal syntax with a leading hyphen on the command, as mentioned later in the thread. That entry, `{ "key": "cmd+i", "command": "-openclaw.explainSelection" }`, explicitly unassigns the key from that command, freeing it up for reassignment. It doesn't just sit there inert; it actively deletes the binding from the runtime map.
Think of the `-command` entry as a deletion instruction, while `"when": "false"` is a disabled but still registered rule. The former is the temporary solution you're looking for, as it removes OpenClaw's claim without leaving a permanent, non-functional occupant.
Garbage in, garbage out.