Unified · Split
| @@ -4,19 +4,6 @@ T3 Code reads keybindings from: · 3 unmodified lines | ||
| 4 | 4 | |
| 5 | 5 | - `~/.t3/keybindings.json` |
| 6 | 6 | |
| 7 | −Schema source of truth: | |
| 8 | − | |
| 9 | −- [`packages/contracts/src/keybindings.ts`](packages/contracts/src/keybindings.ts) | |
| 10 | −- [`packages/contracts/src/server.ts`](packages/contracts/src/server.ts) | |
| 11 | − | |
| 12 | −Server-side parsing/default resolution/merging: | |
| 13 | − | |
| 14 | −- [`apps/server/src/keybindings.ts`](apps/server/src/keybindings.ts) | |
| 15 | − | |
| 16 | −Server wiring (`server.getConfig`): | |
| 17 | − | |
| 18 | −- [`apps/server/src/wsServer.ts`](apps/server/src/wsServer.ts) | |
| 19 | − | |
| 20 | 7 | The file must be a JSON array of rules: |
| 21 | 8 | |
| 22 | 9 | ```json |
| @@ -26,7 +13,25 @@ The file must be a JSON array of rules: · 3 unmodified lines | ||
| 26 | 13 | ] |
| 27 | 14 | ``` |
| 28 | 15 | |
| 29 | −## Rule Shape | |
| 16 | +See the full schema for more details: [`packages/contracts/src/keybindings.ts`](packages/contracts/src/keybindings.ts) | |
| 17 | + | |
| 18 | +## Defaults | |
| 19 | + | |
| 20 | +```json | |
| 21 | +[ | |
| 22 | + { "key": "mod+j", "command": "terminal.toggle" }, | |
| 23 | + { "key": "mod+d", "command": "terminal.split", "when": "terminalFocus" }, | |
| 24 | + { "key": "mod+shift+d", "command": "terminal.new", "when": "terminalFocus" }, | |
| 25 | + { "key": "mod+shift+o", "command": "chat.new" }, | |
| 26 | + { "key": "mod+o", "command": "editor.openFavorite" } | |
| 27 | +] | |
| 28 | +``` | |
| 29 | + | |
| 30 | +For most up to date defaults, see [`DEFAULT_KEYBINDINGS` in `apps/server/src/keybindings.ts`](apps/server/src/keybindings.ts) | |
| 31 | + | |
| 32 | +## Configuration | |
| 33 | + | |
| 34 | +### Rule Shape | |
| 30 | 35 | |
| 31 | 36 | Each entry supports: |
| 32 | 37 | |
| @@ -36,7 +41,7 @@ Each entry supports: · 3 unmodified lines | ||
| 36 | 41 | |
| 37 | 42 | Invalid rules are ignored. Invalid config files are ignored. Warnings are logged by the server. |
| 38 | 43 | |
| 39 | −## Available Commands | |
| 44 | +### Available Commands | |
| 40 | 45 | |
| 41 | 46 | - `terminal.toggle`: open/close terminal drawer |
| 42 | 47 | - `terminal.split`: split terminal (in focused terminal context by default) |
| @@ -44,7 +49,7 @@ Invalid rules are ignored. Invalid config files are ignored. Warnings are logged · 1 unmodified line | ||
| 44 | 49 | - `chat.new`: create a new chat thread for the active project |
| 45 | 50 | - `editor.openFavorite`: open current project/worktree in the last-used editor |
| 46 | 51 | |
| 47 | −## Key Syntax | |
| 52 | +### Key Syntax | |
| 48 | 53 | |
| 49 | 54 | Supported modifiers: |
| 50 | 55 | |
| @@ -61,7 +66,7 @@ Examples: · 10 unmodified lines | ||
| 61 | 66 | - `ctrl+l` |
| 62 | 67 | - `cmd+k` |
| 63 | 68 | |
| 64 | −## `when` Conditions | |
| 69 | +### `when` Conditions | |
| 65 | 70 | |
| 66 | 71 | Currently available context keys: |
| 67 | 72 | |
| @@ -83,31 +88,7 @@ Examples: · 15 unmodified lines | ||
| 83 | 88 | |
| 84 | 89 | Unknown condition keys evaluate to `false`. |
| 85 | 90 | |
| 86 | −## Defaults | |
| 87 | − | |
| 88 | −Built-in defaults are resolved on the server and sent to the web client via `server.getConfig`: | |
| 89 | − | |
| 90 | −- Source of truth: [`DEFAULT_KEYBINDINGS` in `apps/server/src/keybindings.ts`](apps/server/src/keybindings.ts) | |
| 91 | − | |
| 92 | −If you define any rules for a command, the default rule for that command is removed on the server. | |
| 93 | − | |
| 94 | −## Server-Resolved Payload | |
| 95 | − | |
| 96 | −`~/.t3/keybindings.json` is parsed and compiled on the server. The web client receives resolved rules and does not parse raw keybinding strings. | |
| 97 | − | |
| 98 | −Resolved rule payload fields: | |
| 99 | − | |
| 100 | −- `command` | |
| 101 | −- `shortcut` | |
| 102 | −- `whenAst` (optional) | |
| 103 | − | |
| 104 | −See: | |
| 105 | − | |
| 106 | −- [`packages/contracts/src/keybindings.ts`](packages/contracts/src/keybindings.ts) | |
| 107 | −- [`apps/server/src/keybindings.ts`](apps/server/src/keybindings.ts) | |
| 108 | −- [`apps/server/src/wsServer.ts`](apps/server/src/wsServer.ts) | |
| 109 | − | |
| 110 | −## Precedence | |
| 91 | +### Precedence | |
| 111 | 92 | |
| 112 | 93 | - Rules are evaluated in array order. |
| 113 | 94 | - For a key event, the last rule where both `key` matches and `when` evaluates to `true` wins. |