test / unit + widget + golden + a11y (push) Failing after 28s
test / integration_test (xvfb) (push) Has been skipped
test / bundle smoke (xvfb 5s) (push) Has been skipped
test / daemon subprocess + web WASM smoke (push) Has been skipped
test / dart doc (lib API) (push) Failing after 1m5s
Plug widgets into the keymap layer landed in T-117.
ClideTappable:
- Wrap in `Actions(ActivateIntent → onTap)` outside a `Focus` so
dispatch from the focused context walks up and hits the action.
- Add a focus ring via `tokens.globalFocus` (DecoratedBox foreground
overlay, transparent border when unfocused, no layout shift).
- Disabled (`onTap == null`) skips focus traversal and shows the
forbidden cursor.
ClidePalette:
- Register Actions for the four palette intents
(selectNext / selectPrev / accept / dismiss).
- Publish `palette.open` scope flag via `KeymapService.setScopeFlag`
so when-clauses can scope future bindings to "palette only".
- Highlight the selected row with `listItemSelectedBackground`;
scroll it into view on nav.
- `PaletteController` grows `selectedIndex` + `selectNext` /
`selectPrevious` / `acceptSelected`; index resets on open /
filter change.
Intents.dart drops the `ClideIntent` base — `ActivateIntent` and
`DismissIntent` come from Flutter; clide owns the palette and text-
scale and command-bridge subclasses. `parseIntentId('activate')` →
Flutter's class; same for dismiss. Widget code uses the canonical
Flutter Intent types where they fit.
App root grows a PaletteOpenIntent action that calls
`services.palette.open()`, completing the ctrl/cmd+shift+p path
end-to-end.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
58 lines
1.9 KiB
YAML
58 lines
1.9 KiB
YAML
# clide default keymap.
|
|
#
|
|
# This is the baseline preset. Vim / VSCode / JetBrains presets are
|
|
# their own files (T-64/T-65/T-66) and replace bindings via the same
|
|
# YAML shape.
|
|
#
|
|
# Each binding:
|
|
# intent: <stable intent id> # see kernel/src/keymap/intents.dart
|
|
# keys: <chord> | [<chord>, ...] # `ctrl+shift+p`, `cmd+enter`, ...
|
|
# when: <when-clause> # optional; VS-Code-style boolean expr
|
|
#
|
|
# Identifiers in `when:` are scope flags published by producing
|
|
# services (e.g. `palette.open` when ClidePalette is mounted +
|
|
# visible). Missing flags evaluate to false.
|
|
|
|
name: default
|
|
|
|
bindings:
|
|
# -- Activation / focus -----------------------------------------------
|
|
# ActivateIntent has no when-clause: it dispatches via Actions.maybeInvoke
|
|
# against the focused context, so only widgets that opt in (ClideTappable's
|
|
# Actions wrapper) actually catch it. Text-input widgets handle Enter
|
|
# themselves first.
|
|
- intent: activate
|
|
keys: [enter, space]
|
|
- intent: dismiss
|
|
keys: escape
|
|
- intent: focus.next
|
|
keys: tab
|
|
- intent: focus.previous
|
|
keys: shift+tab
|
|
|
|
# -- Command palette --------------------------------------------------
|
|
- intent: palette.open
|
|
keys: [ctrl+shift+p, meta+shift+p]
|
|
- intent: palette.selectNext
|
|
keys: [down, ctrl+n]
|
|
when: palette.open
|
|
- intent: palette.selectPrevious
|
|
keys: [up, ctrl+p]
|
|
when: palette.open
|
|
- intent: palette.accept
|
|
keys: enter
|
|
when: palette.open
|
|
- intent: dismiss
|
|
keys: escape
|
|
when: palette.open
|
|
|
|
# -- Text scale -------------------------------------------------------
|
|
# On most layouts `+` is `shift+equal`; we bind both so users who
|
|
# think of it as Ctrl+Plus and users who hit Ctrl+= both work.
|
|
- intent: text.scaleIncrease
|
|
keys: [ctrl+equal, ctrl+shift+equal, meta+equal, meta+shift+equal]
|
|
- intent: text.scaleDecrease
|
|
keys: [ctrl+minus, meta+minus]
|
|
- intent: text.scaleReset
|
|
keys: [ctrl+0, meta+0]
|