standardKeymap top-level property
Standard platform keybindings.
- ArrowLeft: cursorCharLeft (selectCharLeft with Shift)
- ArrowRight: cursorCharRight (selectCharRight with Shift)
- Ctrl-ArrowLeft (Alt on Mac): cursorGroupLeft (selectGroupLeft with Shift)
- Ctrl-ArrowRight (Alt on Mac): cursorGroupRight (selectGroupRight with Shift)
- ArrowUp: cursorLineUp (selectLineUp with Shift)
- ArrowDown: cursorLineDown (selectLineDown with Shift)
- Home: cursorLineBoundaryBackward (selectLineBoundaryBackward with Shift)
- End: cursorLineBoundaryForward (selectLineBoundaryForward with Shift)
- Mod-Home: cursorDocStart (selectDocStart with Shift)
- Mod-End: cursorDocEnd (selectDocEnd with Shift)
- Mod-a: selectAll
- Backspace: deleteCharBackward
- Delete: deleteCharForward
- Mod-Backspace (Alt on Mac): deleteGroupBackward
- Mod-Delete (Alt on Mac): deleteGroupForward
- Enter: insertNewlineAndIndent (smart indentation)
Implementation
final List<KeyBinding> standardKeymap = [
// Character movement
KeyBinding(
key: 'ArrowLeft',
run: _stateCmd(cursorCharLeft),
shift: _stateCmd(selectCharLeft),
preventDefault: true,
),
KeyBinding(
key: 'ArrowRight',
run: _stateCmd(cursorCharRight),
shift: _stateCmd(selectCharRight),
preventDefault: true,
),
// Group/word movement
KeyBinding(
key: 'Mod-ArrowLeft',
mac: 'Alt-ArrowLeft',
run: _stateCmd(cursorGroupLeft),
shift: _stateCmd(selectGroupLeft),
preventDefault: true,
),
KeyBinding(
key: 'Mod-ArrowRight',
mac: 'Alt-ArrowRight',
run: _stateCmd(cursorGroupRight),
shift: _stateCmd(selectGroupRight),
preventDefault: true,
),
// Mac: Cmd-Arrow for line boundaries
KeyBinding(
mac: 'Cmd-ArrowLeft',
run: _stateCmd(cursorLineBoundaryBackward),
shift: _stateCmd(selectLineBoundaryBackward),
preventDefault: true,
),
KeyBinding(
mac: 'Cmd-ArrowRight',
run: _stateCmd(cursorLineBoundaryForward),
shift: _stateCmd(selectLineBoundaryForward),
preventDefault: true,
),
// Line movement
KeyBinding(
key: 'ArrowUp',
run: _stateCmd(cursorLineUp),
shift: _stateCmd(selectLineUp),
preventDefault: true,
),
KeyBinding(
key: 'ArrowDown',
run: _stateCmd(cursorLineDown),
shift: _stateCmd(selectLineDown),
preventDefault: true,
),
// Mac: Cmd-Up/Down for document boundaries
KeyBinding(
mac: 'Cmd-ArrowUp',
run: _stateCmd(cursorDocStart),
shift: _stateCmd(selectDocStart),
),
KeyBinding(
mac: 'Cmd-ArrowDown',
run: _stateCmd(cursorDocEnd),
shift: _stateCmd(selectDocEnd),
),
// Home/End
KeyBinding(
key: 'Home',
run: _stateCmd(cursorLineBoundaryBackward),
shift: _stateCmd(selectLineBoundaryBackward),
preventDefault: true,
),
KeyBinding(
key: 'End',
run: _stateCmd(cursorLineBoundaryForward),
shift: _stateCmd(selectLineBoundaryForward),
preventDefault: true,
),
// Mod-Home/End for document boundaries
KeyBinding(
key: 'Mod-Home',
run: _stateCmd(cursorDocStart),
shift: _stateCmd(selectDocStart),
),
KeyBinding(
key: 'Mod-End',
run: _stateCmd(cursorDocEnd),
shift: _stateCmd(selectDocEnd),
),
// Enter - use smart indentation
KeyBinding(
key: 'Enter',
run: _stateCmd(insertNewlineAndIndent),
shift: _stateCmd(insertNewlineAndIndent),
),
// Select all
KeyBinding(key: 'Mod-a', run: _stateCmd(selectAll)),
// Delete
KeyBinding(
key: 'Backspace',
run: _stateCmd(deleteCharBackward),
shift: _stateCmd(deleteCharBackward),
preventDefault: true,
),
KeyBinding(
key: 'Delete',
run: _stateCmd(deleteCharForward),
preventDefault: true,
),
KeyBinding(
key: 'Mod-Backspace',
mac: 'Alt-Backspace',
run: _stateCmd(deleteGroupBackward),
preventDefault: true,
),
KeyBinding(
key: 'Mod-Delete',
mac: 'Alt-Delete',
run: _stateCmd(deleteGroupForward),
preventDefault: true,
),
// Mac: Cmd-Backspace/Delete for line boundary deletion
KeyBinding(
mac: 'Mod-Backspace',
run: _stateCmd(deleteLineBoundaryBackward),
preventDefault: true,
),
KeyBinding(
mac: 'Mod-Delete',
run: _stateCmd(deleteLineBoundaryForward),
preventDefault: true,
),
// Emacs bindings for Mac
...emacsStyleKeymap.map((b) => KeyBinding(
mac: b.key,
run: b.run,
shift: b.shift,
)),
];