From a5c3e7dbcf07d805e007eb81ded6dfa8c90e72d5 Mon Sep 17 00:00:00 2001 From: Strackeror Date: Tue, 2 Jul 2024 13:55:29 +0200 Subject: [PATCH] Behavior choice: Basic helix keymap --- meta.ts | 3 + package.build.ts | 50 +- package.json | 1061 +++++++++++++++++++++-------- src/api/data/commands.yaml | 456 ++++++++----- src/commands/README.md | 640 ++++++++--------- src/commands/edit.ts | 44 +- src/commands/history.ts | 14 +- src/commands/layouts/azerty.fr.md | 640 ++++++++--------- src/commands/layouts/qwerty.md | 640 ++++++++--------- src/commands/misc.ts | 2 +- src/commands/modes.ts | 22 +- src/commands/search.ts | 32 +- src/commands/seek.ts | 20 +- src/commands/select.ts | 59 +- src/commands/selections.rotate.ts | 16 +- src/commands/selections.ts | 54 +- src/commands/view.ts | 8 +- src/state/extension.ts | 14 + 18 files changed, 2233 insertions(+), 1542 deletions(-) diff --git a/meta.ts b/meta.ts index 5b0dfbbc..c6db3888 100644 --- a/meta.ts +++ b/meta.ts @@ -519,6 +519,9 @@ export function parseKeys(keys: string) { const remainingKeybinding = keybinding.replace(/[csa]-/g, ""), whenClauses = ["editorTextFocus"]; + if (category !== "core") { + whenClauses.push(`dance.behavior == '${category}'`); + } for (let tag of tags.split(", ")) { const negate = tag.startsWith("!"); if (negate) { diff --git a/package.build.ts b/package.build.ts index 1bb2577c..76489367 100644 --- a/package.build.ts +++ b/package.build.ts @@ -206,6 +206,12 @@ export const pkg = (modules: Builder.ParsedModule[]) => ({ description: "Controls which mode is set by default when an editor is opened.", ...modeNamePattern, }, + "dance.behavior": { + enum: ["kakoune", "helix"], + enumItemLabels: ["Kakoune", "Helix"], + description: "Controls which base set of editor keybinds to use", + default: "kakoune", + }, "dance.modes": { type: "object", scope: "language-overridable", @@ -765,32 +771,28 @@ export const pkg = (modules: Builder.ParsedModule[]) => ({ ...symbols.map((x) => `Shift+${x}`), ]); - const keysToAssignForNormal = new Set(keysToAssign); - const keysToAssignForVisual = new Set(keysToAssign); - - for (const keybinding of keybindings) { - if (keybinding.when.includes("dance.mode == 'normal'")) { - keysToAssignForNormal.delete(keybinding.key); + for (const [category, mode] of [ + ["kakoune", "normal"], + ["helix", "normal"], + ["helix", "select"], + ]) { + const unassignedKeys = new Set(keysToAssign); + for (const keybinding of keybindings) { + const isInCategory = + keybinding.when.includes(`dance.behavior == '${category}'`) || !keybinding.when.includes("dance.behavior"); + const isMode = keybinding.when.includes(`dance.mode == '${mode}'`); + if (isMode && isInCategory) { + unassignedKeys.delete(keybinding.key); + } } - if (keybinding.when.includes("dance.mode == 'select'")) { - keysToAssignForVisual.delete(keybinding.key); - } - } - for (const keyToAssign of keysToAssignForNormal) { - keybindings.push({ - command: "dance.ignore", - key: keyToAssign, - when: "editorTextFocus && dance.mode == 'normal'", - }); - } - - for (const keyToAssign of keysToAssignForVisual) { - keybindings.push({ - command: "dance.ignore", - key: keyToAssign, - when: "editorTextFocus && dance.mode == 'select'", - }); + for (const unassignedKey of unassignedKeys) { + keybindings.push({ + key: unassignedKey, + command: "dance.ignore", + when: `dance.mode == '${mode}' && dance.behavior == '${category}'`, + }); + } } return keybindings; diff --git a/package.json b/package.json index e705a67b..c6debb29 100644 --- a/package.json +++ b/package.json @@ -96,6 +96,18 @@ "pattern": "^[a-zA-Z]\\w*$", "patternErrorMessage": "" }, + "dance.behavior": { + "enum": [ + "kakoune", + "helix" + ], + "enumItemLabels": [ + "Kakoune", + "Helix" + ], + "description": "Controls which base set of editor keybinds to use", + "default": "kakoune" + }, "dance.modes": { "type": "object", "scope": "language-overridable", @@ -2783,7 +2795,19 @@ }, { "key": "Alt+`", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Swap case", + "command": "dance.edit.case.swap" + }, + { + "key": "Shift+`", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", + "title": "Swap case", + "command": "dance.edit.case.swap" + }, + { + "key": "Shift+`", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Swap case", "command": "dance.edit.case.swap" }, @@ -2793,21 +2817,39 @@ "title": "Transform to lower case", "command": "dance.edit.case.toLower" }, + { + "key": "`", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Transform to lower case", + "command": "dance.edit.case.toLower" + }, { "key": "Shift+`", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Transform to upper case", + "command": "dance.edit.case.toUpper" + }, + { + "key": "Alt+`", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", + "title": "Transform to upper case", + "command": "dance.edit.case.toUpper" + }, + { + "key": "Alt+`", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Transform to upper case", "command": "dance.edit.case.toUpper" }, { "key": "Shift+Alt+7", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Copy indentation", "command": "dance.edit.copyIndentation" }, { "key": "Shift+Alt+,", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Deindent selected lines", "command": "dance.edit.deindent" }, @@ -2817,15 +2859,27 @@ "title": "Deindent selected lines (including incomplete indent)", "command": "dance.edit.deindent.withIncomplete" }, + { + "key": "Shift+,", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Deindent selected lines (including incomplete indent)", + "command": "dance.edit.deindent.withIncomplete" + }, { "key": "Alt+D", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Delete", "command": "dance.edit.delete" }, + { + "key": "Alt+D", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Delete", + "command": "dance.edit.delete" + }, { "key": "Alt+C", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Delete and switch to Insert", "command": "dance.edit.delete-insert" }, @@ -2835,15 +2889,21 @@ "title": "Indent selected lines", "command": "dance.edit.indent" }, + { + "key": "Shift+.", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Indent selected lines", + "command": "dance.edit.indent" + }, { "key": "Shift+Alt+.", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Indent selected lines (including empty lines)", "command": "dance.edit.indent.withEmpty" }, { "key": "Shift+Alt+R", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Insert contents of register", "command": "dance.edit.insert" }, @@ -2853,15 +2913,27 @@ "title": "Join lines", "command": "dance.edit.join" }, + { + "key": "Shift+J", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Join lines", + "command": "dance.edit.join" + }, { "key": "Shift+Alt+J", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Join lines and select inserted separators", "command": "dance.edit.join.select" }, + { + "key": "Shift+Alt+J", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Join lines and select inserted separators", + "command": "dance.edit.join.select" + }, { "key": "Shift+Alt+O", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Insert new line above each selection", "command": "dance.edit.newLine.above" }, @@ -2871,9 +2943,15 @@ "title": "Insert new line above and switch to insert", "command": "dance.edit.newLine.above.insert" }, + { + "key": "Shift+O", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Insert new line above and switch to insert", + "command": "dance.edit.newLine.above.insert" + }, { "key": "Alt+O", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Insert new line below each selection", "command": "dance.edit.newLine.below" }, @@ -2883,12 +2961,30 @@ "title": "Insert new line below and switch to insert", "command": "dance.edit.newLine.below.insert" }, + { + "key": "O", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Insert new line below and switch to insert", + "command": "dance.edit.newLine.below.insert" + }, + { + "key": "P", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Paste after", + "command": "dance.edit.paste.after" + }, { "key": "P", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Paste after and select", "command": "dance.edit.paste.after.select" }, + { + "key": "Shift+P", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Paste before", + "command": "dance.edit.paste.before" + }, { "key": "Shift+P", "when": "editorTextFocus && dance.mode == 'normal'", @@ -2897,13 +2993,13 @@ }, { "key": "Alt+P", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Paste all after and select", "command": "dance.edit.pasteAll.after.select" }, { "key": "Shift+Alt+P", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Paste all before and select", "command": "dance.edit.pasteAll.before.select" }, @@ -2915,13 +3011,13 @@ }, { "key": "Ctrl+R", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Pick register and replace", "command": "dance.edit.selectRegister-insert" }, { "key": "Ctrl+R", - "when": "editorTextFocus && dance.mode == 'insert'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert'", "title": "Pick register and replace", "command": "dance.edit.selectRegister-insert" }, @@ -2933,7 +3029,7 @@ }, { "key": "D", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Copy and delete", "command": "dance.edit.yank-delete" }, @@ -2945,37 +3041,37 @@ }, { "key": "C", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Copy, delete and switch to Insert", "command": "dance.edit.yank-delete-insert" }, { "key": "Shift+R", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Copy and replace", "command": "dance.edit.yank-replace" }, { "key": "Q", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Replay recording", "command": "dance.history.recording.play" }, { "key": "Shift+Q", - "when": "editorTextFocus && dance.mode == 'normal' && !dance.isRecording", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && !dance.isRecording", "title": "Start recording", "command": "dance.history.recording.start" }, { "key": "Escape", - "when": "editorTextFocus && dance.mode == 'normal' && dance.isRecording", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && dance.isRecording", "title": "Stop recording", "command": "dance.history.recording.stop" }, { "key": "Shift+Q", - "when": "editorTextFocus && dance.mode == 'normal' && dance.isRecording", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && dance.isRecording", "title": "Stop recording", "command": "dance.history.recording.stop" }, @@ -2987,13 +3083,13 @@ }, { "key": "Shift+U", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Redo", "command": "dance.history.redo" }, { "key": "Shift+Alt+U", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Redo a change of selections", "command": "dance.history.redo.selections" }, @@ -3015,6 +3111,12 @@ "title": "Repeat last seek", "command": "dance.history.repeat.seek" }, + { + "key": "Alt+.", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Repeat last seek", + "command": "dance.history.repeat.seek" + }, { "key": "U", "when": "editorTextFocus && dance.mode == 'normal'", @@ -3023,13 +3125,13 @@ }, { "key": "U", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Undo", "command": "dance.history.undo" }, { "key": "Alt+U", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Undo a change of selections", "command": "dance.history.undo.selections" }, @@ -3261,24 +3363,48 @@ "title": "Insert after", "command": "dance.modes.insert.after" }, + { + "key": "A", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Insert after", + "command": "dance.modes.insert.after" + }, { "key": "I", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Insert before", "command": "dance.modes.insert.before" }, + { + "key": "I", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Insert before", + "command": "dance.modes.insert.before" + }, { "key": "Shift+A", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Insert at line end", "command": "dance.modes.insert.lineEnd" }, + { + "key": "Shift+A", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Insert at line end", + "command": "dance.modes.insert.lineEnd" + }, { "key": "Shift+I", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Insert at line start", "command": "dance.modes.insert.lineStart" }, + { + "key": "Shift+I", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Insert at line start", + "command": "dance.modes.insert.lineStart" + }, { "key": "Escape", "when": "editorTextFocus && dance.mode == 'insert'", @@ -3287,19 +3413,31 @@ }, { "key": "Escape", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Set mode to Normal", + "command": "dance.modes.set.normal" + }, + { + "key": "V", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Set mode to Normal", "command": "dance.modes.set.normal" }, + { + "key": "V", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", + "title": "Set mode to Select", + "command": "dance.modes.set.select" + }, { "key": "Ctrl+V", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Temporary Insert mode", "command": "dance.modes.set.temporarily.insert" }, { "key": "Ctrl+V", - "when": "editorTextFocus && dance.mode == 'insert'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert'", "title": "Temporary Normal mode", "command": "dance.modes.set.temporarily.normal" }, @@ -3317,19 +3455,37 @@ }, { "key": "Alt+/", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Search backward", + "command": "dance.search.backward" + }, + { + "key": "Shift+/", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", "title": "Search backward", "command": "dance.search.backward" }, { "key": "Shift+Alt+/", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Search backward (extend)", "command": "dance.search.backward.extend" }, { "key": "Shift+/", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Search backward (extend)", + "command": "dance.search.backward.extend" + }, + { + "key": "Shift+/", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Search (extend)", + "command": "dance.search.extend" + }, + { + "key": "/", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Search (extend)", "command": "dance.search.extend" }, @@ -3341,19 +3497,37 @@ }, { "key": "Shift+N", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Add next match", + "command": "dance.search.next.add" + }, + { + "key": "N", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Add next match", "command": "dance.search.next.add" }, { "key": "Alt+N", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Select previous match", + "command": "dance.search.previous" + }, + { + "key": "Shift+N", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", "title": "Select previous match", "command": "dance.search.previous" }, { "key": "Shift+Alt+N", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Add previous match", + "command": "dance.search.previous.add" + }, + { + "key": "Shift+N", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Add previous match", "command": "dance.search.previous.add" }, @@ -3389,127 +3563,133 @@ }, { "key": "Alt+A", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select whole object", "command": "dance.seek.askObject" }, { "key": "Alt+A", - "when": "editorTextFocus && dance.mode == 'insert'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert'", "title": "Select whole object", "command": "dance.seek.askObject" }, { "key": "]", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select to whole object end", "command": "dance.seek.askObject.end" }, { "key": "Shift+]", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to whole object end", "command": "dance.seek.askObject.end.extend" }, { "key": "Alt+I", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select inner object", "command": "dance.seek.askObject.inner" }, { "key": "Alt+I", - "when": "editorTextFocus && dance.mode == 'insert'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert'", "title": "Select inner object", "command": "dance.seek.askObject.inner" }, { "key": "Alt+]", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select to inner object end", "command": "dance.seek.askObject.inner.end" }, { "key": "Shift+Alt+]", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to inner object end", "command": "dance.seek.askObject.inner.end.extend" }, { "key": "Alt+[", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select to inner object start", "command": "dance.seek.askObject.inner.start" }, { "key": "Shift+Alt+[", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to inner object start", "command": "dance.seek.askObject.inner.start.extend" }, { "key": "[", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select to whole object start", "command": "dance.seek.askObject.start" }, { "key": "Shift+[", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to whole object start", "command": "dance.seek.askObject.start.extend" }, { "key": "Alt+T", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Select to character (excluded, backward)", + "command": "dance.seek.backward" + }, + { + "key": "Shift+T", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", "title": "Select to character (excluded, backward)", "command": "dance.seek.backward" }, { "key": "M", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select to next enclosing character", "command": "dance.seek.enclosing" }, { "key": "Alt+M", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select to previous enclosing character", "command": "dance.seek.enclosing.backward" }, { "key": "Shift+M", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to next enclosing character", "command": "dance.seek.enclosing.extend" }, { "key": "Shift+Alt+M", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to previous enclosing character", "command": "dance.seek.enclosing.extend.backward" }, { "key": "Shift+T", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to character (excluded)", "command": "dance.seek.extend" }, { "key": "T", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to character (excluded)", "command": "dance.seek.extend" }, { "key": "Shift+Alt+T", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to character (excluded, backward)", "command": "dance.seek.extend.backward" }, { "key": "Shift+T", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to character (excluded, backward)", "command": "dance.seek.extend.backward" }, @@ -3521,31 +3701,37 @@ }, { "key": "Alt+F", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select to character (included, backward)", "command": "dance.seek.included.backward" }, { "key": "Shift+F", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", + "title": "Select to character (included, backward)", + "command": "dance.seek.included.backward" + }, + { + "key": "Shift+F", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to character (included)", "command": "dance.seek.included.extend" }, { "key": "F", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to character (included)", "command": "dance.seek.included.extend" }, { "key": "Shift+Alt+F", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to character (included, backward)", "command": "dance.seek.included.extend.backward" }, { "key": "Shift+F", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to character (included, backward)", "command": "dance.seek.included.extend.backward" }, @@ -3563,61 +3749,73 @@ }, { "key": "Shift+W", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to next word start", "command": "dance.seek.word.extend" }, { "key": "W", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to next word start", "command": "dance.seek.word.extend" }, { "key": "Shift+B", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to previous word start", "command": "dance.seek.word.extend.backward" }, { "key": "B", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to previous word start", "command": "dance.seek.word.extend.backward" }, { "key": "Alt+W", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Select to next non-whitespace word start", + "command": "dance.seek.word.ws" + }, + { + "key": "Shift+W", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", "title": "Select to next non-whitespace word start", "command": "dance.seek.word.ws" }, { "key": "Alt+B", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Select to previous non-whitespace word start", + "command": "dance.seek.word.ws.backward" + }, + { + "key": "Shift+B", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", "title": "Select to previous non-whitespace word start", "command": "dance.seek.word.ws.backward" }, { "key": "Shift+Alt+W", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to next non-whitespace word start", "command": "dance.seek.word.ws.extend" }, { "key": "Shift+W", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to next non-whitespace word start", "command": "dance.seek.word.ws.extend" }, { "key": "Shift+Alt+B", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to previous non-whitespace word start", "command": "dance.seek.word.ws.extend.backward" }, { "key": "Shift+B", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to previous non-whitespace word start", "command": "dance.seek.word.ws.extend.backward" }, @@ -3629,61 +3827,67 @@ }, { "key": "Shift+E", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to next word end", "command": "dance.seek.wordEnd.extend" }, { "key": "E", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to next word end", "command": "dance.seek.wordEnd.extend" }, { "key": "Alt+E", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Select to next non-whitespace word end", + "command": "dance.seek.wordEnd.ws" + }, + { + "key": "Shift+E", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", "title": "Select to next non-whitespace word end", "command": "dance.seek.wordEnd.ws" }, { "key": "Shift+Alt+E", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to next non-whitespace word end", "command": "dance.seek.wordEnd.ws.extend" }, { "key": "Shift+E", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to next non-whitespace word end", "command": "dance.seek.wordEnd.ws.extend" }, { "key": "Shift+5", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select whole buffer", "command": "dance.select.buffer" }, { "key": "Shift+J", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend down", "command": "dance.select.down.extend" }, { "key": "Shift+Down", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend down", "command": "dance.select.down.extend" }, { "key": "J", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend down", "command": "dance.select.down.extend" }, { "key": "Down", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend down", "command": "dance.select.down.extend" }, @@ -3701,25 +3905,25 @@ }, { "key": "Shift+H", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend left", "command": "dance.select.left.extend" }, { "key": "Shift+Left", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend left", "command": "dance.select.left.extend" }, { "key": "H", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend left", "command": "dance.select.left.extend" }, { "key": "Left", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend left", "command": "dance.select.left.extend" }, @@ -3735,9 +3939,21 @@ "title": "Jump left", "command": "dance.select.left.jump" }, + { + "key": "X", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", + "title": "Extend to line below", + "command": "dance.select.line.below.extend" + }, + { + "key": "X", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Extend to line below", + "command": "dance.select.line.below.extend" + }, { "key": "Alt+L", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select to line end", "command": "dance.select.lineEnd" }, @@ -3749,19 +3965,25 @@ }, { "key": "Shift+Alt+L", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to line end", "command": "dance.select.lineEnd.extend" }, { "key": "Shift+End", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Extend to line end", + "command": "dance.select.lineEnd.extend" + }, + { + "key": "End", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to line end", "command": "dance.select.lineEnd.extend" }, { "key": "Alt+H", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Select to line start", "command": "dance.select.lineStart" }, @@ -3773,37 +3995,43 @@ }, { "key": "Shift+Alt+H", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to line start", "command": "dance.select.lineStart.extend" }, { "key": "Shift+Home", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Extend to line start", + "command": "dance.select.lineStart.extend" + }, + { + "key": "Home", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to line start", "command": "dance.select.lineStart.extend" }, { "key": "Shift+L", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend right", "command": "dance.select.right.extend" }, { "key": "Shift+Right", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend right", "command": "dance.select.right.extend" }, { "key": "L", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend right", "command": "dance.select.right.extend" }, { "key": "Right", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend right", "command": "dance.select.right.extend" }, @@ -3821,13 +4049,13 @@ }, { "key": "Shift+G", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend to", "command": "dance.select.to.extend" }, { "key": "G", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend to", "command": "dance.select.to.extend" }, @@ -3839,25 +4067,25 @@ }, { "key": "Shift+K", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend up", "command": "dance.select.up.extend" }, { "key": "Shift+Up", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Extend up", "command": "dance.select.up.extend" }, { "key": "K", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend up", "command": "dance.select.up.extend" }, { "key": "Up", - "when": "editorTextFocus && dance.mode == 'select'", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Extend up", "command": "dance.select.up.extend" }, @@ -3954,10 +4182,56 @@ } }, { - "key": "Alt+;", - "when": "editorTextFocus && dance.mode == 'normal'", - "title": "Change direction of selections", - "command": "dance.selections.changeDirection" + "key": "Ctrl+F", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "command": "dance.select.vertically", + "args": { + "direction": 1, + "by": "page", + "shift": "extend" + } + }, + { + "key": "Ctrl+D", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "command": "dance.select.vertically", + "args": { + "direction": 1, + "by": "halfPage", + "shift": "extend" + } + }, + { + "key": "Ctrl+B", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "command": "dance.select.vertically", + "args": { + "direction": -1, + "by": "page", + "shift": "extend" + } + }, + { + "key": "Ctrl+U", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "command": "dance.select.vertically", + "args": { + "direction": -1, + "by": "halfPage", + "shift": "extend" + } + }, + { + "key": "Alt+;", + "when": "editorTextFocus && dance.mode == 'normal'", + "title": "Change direction of selections", + "command": "dance.selections.changeDirection" + }, + { + "key": "Alt+;", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Change direction of selections", + "command": "dance.selections.changeDirection" }, { "key": "Alt+,", @@ -3965,33 +4239,57 @@ "title": "Clear main selections", "command": "dance.selections.clear.main" }, + { + "key": "Alt+,", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Clear main selections", + "command": "dance.selections.clear.main" + }, { "key": ",", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Clear secondary selections", "command": "dance.selections.clear.secondary" }, + { + "key": ",", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Clear secondary selections", + "command": "dance.selections.clear.secondary" + }, { "key": "Shift+C", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Copy selections below", "command": "dance.selections.copy" }, { "key": "Shift+Alt+C", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Copy selections above", "command": "dance.selections.copy.above" }, { "key": "X", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Expand to lines", + "command": "dance.selections.expandToLines" + }, + { + "key": "Shift+X", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", + "title": "Expand to lines", + "command": "dance.selections.expandToLines" + }, + { + "key": "Shift+X", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Expand to lines", "command": "dance.selections.expandToLines" }, { "key": "Shift+Alt+;", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Forward selections", "command": "dance.selections.faceForward" }, @@ -4001,21 +4299,39 @@ "title": "Filter selections", "command": "dance.selections.filter" }, + { + "key": "Shift+4", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Filter selections", + "command": "dance.selections.filter" + }, { "key": "Alt+K", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Keep matching selections", "command": "dance.selections.filter.regexp" }, + { + "key": "Alt+K", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Keep matching selections", + "command": "dance.selections.filter.regexp" + }, { "key": "Shift+Alt+K", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Clear matching selections", "command": "dance.selections.filter.regexp.inverse" }, + { + "key": "Shift+Alt+K", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Clear matching selections", + "command": "dance.selections.filter.regexp.inverse" + }, { "key": "Shift+Alt+-", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Merge contiguous selections", "command": "dance.selections.merge" }, @@ -4025,51 +4341,81 @@ "title": "Pipe selections", "command": "dance.selections.pipe" }, + { + "key": "Shift+Alt+\\", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Pipe selections", + "command": "dance.selections.pipe" + }, { "key": "Shift+1", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Pipe and append", "command": "dance.selections.pipe.append" }, + { + "key": "Shift+1", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Pipe and append", + "command": "dance.selections.pipe.append" + }, { "key": "Shift+Alt+1", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Pipe and prepend", "command": "dance.selections.pipe.prepend" }, + { + "key": "Shift+Alt+1", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Pipe and prepend", + "command": "dance.selections.pipe.prepend" + }, { "key": "Shift+\\", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Pipe and replace", "command": "dance.selections.pipe.replace" }, + { + "key": "Shift+\\", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Pipe and replace", + "command": "dance.selections.pipe.replace" + }, { "key": ";", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Reduce selections to their cursor", "command": "dance.selections.reduce" }, + { + "key": ";", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Reduce selections to their cursor", + "command": "dance.selections.reduce" + }, { "key": "Shift+Alt+S", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Reduce selections to their ends", "command": "dance.selections.reduce.edges" }, { "key": "Z", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Restore selections", "command": "dance.selections.restore" }, { "key": "Alt+Z", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Combine register selections with current ones", "command": "dance.selections.restore.withCurrent" }, { "key": "Shift+Alt+Z", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "command": "dance.selections.restore.withCurrent", "args": { "reverse": true, @@ -4078,7 +4424,7 @@ }, { "key": "Shift+Z", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Save selections", "command": "dance.selections.save" }, @@ -4088,27 +4434,51 @@ "title": "Copy selections text", "command": "dance.selections.saveText" }, + { + "key": "Y", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Copy selections text", + "command": "dance.selections.saveText" + }, { "key": "S", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Leap or select", "command": "dance.selections.select.orLeap" }, + { + "key": "S", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Leap or select", + "command": "dance.selections.select.orLeap" + }, { "key": "Shift+S", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Split selections", "command": "dance.selections.split" }, + { + "key": "Shift+S", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Split selections", + "command": "dance.selections.split" + }, { "key": "Alt+S", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Leap or select backward", "command": "dance.selections.splitLines.orLeap.backward" }, + { + "key": "Alt+S", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Leap or select backward", + "command": "dance.selections.splitLines.orLeap.backward" + }, { "key": "Enter", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'dance' && dance.mode == 'normal'", "title": "Toggle selection indices", "command": "dance.selections.toggleIndices" }, @@ -4118,24 +4488,60 @@ "title": "Trim lines", "command": "dance.selections.trimLines" }, + { + "key": "Alt+X", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Trim lines", + "command": "dance.selections.trimLines" + }, { "key": "Shift+-", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Trim whitespace", "command": "dance.selections.trimWhitespace" }, + { + "key": "Shift+-", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Trim whitespace", + "command": "dance.selections.trimWhitespace" + }, { "key": "Shift+Alt+0", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Rotate selections clockwise", "command": "dance.selections.rotate.both" }, { "key": "Shift+Alt+9", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Rotate selections counter-clockwise", "command": "dance.selections.rotate.both.reverse" }, + { + "key": "Shift+Alt+0", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", + "title": "Rotate selections clockwise (contents only)", + "command": "dance.selections.rotate.contents" + }, + { + "key": "Shift+Alt+0", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Rotate selections clockwise (contents only)", + "command": "dance.selections.rotate.contents" + }, + { + "key": "Shift+Alt+9", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", + "title": "Rotate selections counter-clockwise (contents only)", + "command": "dance.selections.rotate.contents.reverse" + }, + { + "key": "Shift+Alt+9", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Rotate selections counter-clockwise (contents only)", + "command": "dance.selections.rotate.contents.reverse" + }, { "key": "Shift+0", "when": "editorTextFocus && dance.mode == 'normal'", @@ -4148,9 +4554,35 @@ "title": "Rotate selections counter-clockwise (selections only)", "command": "dance.selections.rotate.selections.reverse" }, + { + "key": "Shift+9", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Rotate selections counter-clockwise (selections only)", + "command": "dance.selections.rotate.selections.reverse" + }, { "key": "V", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "title": "Show view menu", + "command": "dance.openMenu", + "args": { + "menu": "view", + "$exclude": [] + } + }, + { + "key": "Z", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", + "title": "Show view menu", + "command": "dance.openMenu", + "args": { + "menu": "view", + "$exclude": [] + } + }, + { + "key": "Z", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", "title": "Show view menu", "command": "dance.openMenu", "args": { @@ -4160,7 +4592,7 @@ }, { "key": "Shift+V", - "when": "editorTextFocus && dance.mode == 'normal'", + "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", "title": "Show view menu (locked)", "command": "dance.openMenu", "args": { @@ -4170,439 +4602,486 @@ } }, { - "command": "dance.ignore", - "key": "Shift+D", - "when": "editorTextFocus && dance.mode == 'normal'" + "key": "Shift+Z", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal'", + "title": "Show view menu (locked)", + "command": "dance.openMenu", + "args": { + "menu": "view", + "locked": true, + "$exclude": [] + } }, { + "key": "Shift+Z", + "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "title": "Show view menu (locked)", + "command": "dance.openMenu", + "args": { + "menu": "view", + "locked": true, + "$exclude": [] + } + }, + { + "key": "Shift+D", "command": "dance.ignore", - "key": "Shift+X", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "Shift+X", "command": "dance.ignore", - "key": "Shift+Y", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "Shift+Y", "command": "dance.ignore", - "key": "Shift+2", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "Shift+2", "command": "dance.ignore", - "key": "Shift+3", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "Shift+3", "command": "dance.ignore", - "key": "Shift+6", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "Shift+6", "command": "dance.ignore", - "key": "'", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "'", "command": "dance.ignore", - "key": "-", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "-", "command": "dance.ignore", - "key": "=", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "=", "command": "dance.ignore", - "key": "Tab", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "Tab", "command": "dance.ignore", - "key": "Space", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "Space", "command": "dance.ignore", - "key": "NumPad_Add", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "NumPad_Add", "command": "dance.ignore", - "key": "NumPad_Subtract", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "NumPad_Subtract", "command": "dance.ignore", - "key": "Shift+=", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "Shift+=", "command": "dance.ignore", - "key": "Shift+Tab", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "Shift+Tab", "command": "dance.ignore", - "key": "Shift+Space", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "Shift+Space", "command": "dance.ignore", - "key": "Shift+NumPad_Add", - "when": "editorTextFocus && dance.mode == 'normal'" + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "Shift+NumPad_Add", "command": "dance.ignore", + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + }, + { "key": "Shift+NumPad_Subtract", - "when": "editorTextFocus && dance.mode == 'normal'" + "command": "dance.ignore", + "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" }, { + "key": "M", "command": "dance.ignore", - "key": "A", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Q", "command": "dance.ignore", - "key": "I", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+C", "command": "dance.ignore", - "key": "M", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+D", "command": "dance.ignore", - "key": "N", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+G", "command": "dance.ignore", - "key": "O", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+H", "command": "dance.ignore", - "key": "P", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+J", "command": "dance.ignore", - "key": "Q", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+K", "command": "dance.ignore", - "key": "R", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+L", "command": "dance.ignore", - "key": "S", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+M", "command": "dance.ignore", - "key": "V", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+Q", "command": "dance.ignore", - "key": "X", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+R", "command": "dance.ignore", - "key": "Y", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+V", "command": "dance.ignore", - "key": "Z", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+Y", "command": "dance.ignore", - "key": "0", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+2", "command": "dance.ignore", - "key": "1", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+3", "command": "dance.ignore", - "key": "2", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+5", "command": "dance.ignore", - "key": "3", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+6", "command": "dance.ignore", - "key": "4", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "'", "command": "dance.ignore", - "key": "5", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "-", "command": "dance.ignore", - "key": "6", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "=", "command": "dance.ignore", - "key": "7", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Tab", "command": "dance.ignore", - "key": "8", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Space", "command": "dance.ignore", - "key": "9", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "NumPad_Add", "command": "dance.ignore", - "key": "Shift+A", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "NumPad_Subtract", "command": "dance.ignore", - "key": "Shift+C", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+=", "command": "dance.ignore", - "key": "Shift+D", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+Tab", "command": "dance.ignore", - "key": "Shift+G", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+Space", "command": "dance.ignore", - "key": "Shift+H", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" + }, + { + "key": "Shift+NumPad_Add", + "command": "dance.ignore", + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "Shift+NumPad_Subtract", "command": "dance.ignore", - "key": "Shift+I", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'normal' && dance.behavior == 'helix'" }, { + "key": "M", "command": "dance.ignore", - "key": "Shift+J", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Q", "command": "dance.ignore", - "key": "Shift+K", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "R", "command": "dance.ignore", - "key": "Shift+L", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "0", "command": "dance.ignore", - "key": "Shift+M", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "1", "command": "dance.ignore", - "key": "Shift+N", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "2", "command": "dance.ignore", - "key": "Shift+O", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "3", "command": "dance.ignore", - "key": "Shift+P", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "4", "command": "dance.ignore", - "key": "Shift+Q", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "5", "command": "dance.ignore", - "key": "Shift+R", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "6", "command": "dance.ignore", - "key": "Shift+S", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "7", "command": "dance.ignore", - "key": "Shift+V", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "8", "command": "dance.ignore", - "key": "Shift+X", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "9", "command": "dance.ignore", - "key": "Shift+Y", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+C", "command": "dance.ignore", - "key": "Shift+Z", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+D", "command": "dance.ignore", - "key": "Shift+0", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+G", "command": "dance.ignore", - "key": "Shift+1", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+H", "command": "dance.ignore", - "key": "Shift+2", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+K", "command": "dance.ignore", - "key": "Shift+3", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+L", "command": "dance.ignore", - "key": "Shift+4", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+M", "command": "dance.ignore", - "key": "Shift+5", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+Q", "command": "dance.ignore", - "key": "Shift+6", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+R", "command": "dance.ignore", - "key": "Shift+7", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+V", "command": "dance.ignore", - "key": "Shift+8", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+Y", "command": "dance.ignore", - "key": "Shift+9", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+0", "command": "dance.ignore", - "key": ",", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+2", "command": "dance.ignore", - "key": "'", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+3", "command": "dance.ignore", - "key": "-", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+5", "command": "dance.ignore", - "key": "=", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+6", "command": "dance.ignore", - "key": "Tab", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+7", "command": "dance.ignore", - "key": "Space", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+8", "command": "dance.ignore", - "key": "NumPad_Add", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "'", "command": "dance.ignore", - "key": "NumPad_Subtract", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "-", "command": "dance.ignore", - "key": "Shift+,", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "=", "command": "dance.ignore", - "key": "Shift+'", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Tab", "command": "dance.ignore", - "key": "Shift+-", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Space", "command": "dance.ignore", - "key": "Shift+=", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "NumPad_Add", "command": "dance.ignore", - "key": "Shift+Tab", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "NumPad_Subtract", "command": "dance.ignore", - "key": "Shift+Space", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+'", "command": "dance.ignore", - "key": "Shift+NumPad_Add", - "when": "editorTextFocus && dance.mode == 'select'" + "when": "dance.mode == 'select' && dance.behavior == 'helix'" + }, + { + "key": "Shift+=", + "command": "dance.ignore", + "when": "dance.mode == 'select' && dance.behavior == 'helix'" }, { + "key": "Shift+Tab", + "command": "dance.ignore", + "when": "dance.mode == 'select' && dance.behavior == 'helix'" + }, + { + "key": "Shift+Space", + "command": "dance.ignore", + "when": "dance.mode == 'select' && dance.behavior == 'helix'" + }, + { + "key": "Shift+NumPad_Add", "command": "dance.ignore", + "when": "dance.mode == 'select' && dance.behavior == 'helix'" + }, + { "key": "Shift+NumPad_Subtract", - "when": "editorTextFocus && dance.mode == 'select'" + "command": "dance.ignore", + "when": "dance.mode == 'select' && dance.behavior == 'helix'" } ] } diff --git a/src/api/data/commands.yaml b/src/api/data/commands.yaml index 17f6d0f1..141edaaf 100644 --- a/src/api/data/commands.yaml +++ b/src/api/data/commands.yaml @@ -48,7 +48,7 @@ edit.align: keys: qwerty: |- - `&` (kakoune: normal) + `&` (core: normal) doc: en: |+ @@ -64,6 +64,8 @@ edit.case.swap: keys: qwerty: |- `` a-` `` (kakoune: normal) + `` s-` `` (helix: normal) + `` s-` `` (helix: select) doc: en: |+ @@ -75,7 +77,8 @@ edit.case.toLower: keys: qwerty: |- - `` ` `` (kakoune: normal) + `` ` `` (core: normal) + `` ` `` (helix: select) doc: en: |+ @@ -88,6 +91,8 @@ edit.case.toUpper: keys: qwerty: |- `` s-` `` (kakoune: normal) + `` a-` `` (helix: normal) + `` a-` `` (helix: select) doc: en: |+ @@ -126,7 +131,8 @@ edit.deindent.withIncomplete: keys: qwerty: |- - `<` (kakoune: normal) + `<` (core: normal) + `<` (helix: select) doc: en: |+ @@ -141,7 +147,8 @@ edit.delete: keys: qwerty: |- - `a-d` (kakoune: normal) + `a-d` (core: normal) + `a-d` (helix: select) edit.delete-insert: title: @@ -160,7 +167,8 @@ edit.indent: keys: qwerty: |- - `>` (kakoune: normal) + `>` (core: normal) + `>` (helix: select) doc: en: |+ @@ -206,18 +214,18 @@ edit.insert: | Title | Identifier | Keybinding | Commands | | ---------------------------------- | ------------------------ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | | Pick register and replace | `selectRegister-insert` | `c-r` (kakoune: normal), `c-r` (kakoune: insert) | `[".selectRegister", { +register }], [".edit.insert", { ... }]` | - | Paste before | `paste.before` | | `[".edit.insert", { handleNewLine: true, where: "start", ... }]` | - | Paste after | `paste.after` | | `[".edit.insert", { handleNewLine: true, where: "end" , ... }]` | - | Paste before and select | `paste.before.select` | `s-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "start", shift: "select", ... }]` | - | Paste after and select | `paste.after.select` | `p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , shift: "select", ... }]` | + | Paste before | `paste.before` | `s-p` (helix: select) | `[".edit.insert", { handleNewLine: true, where: "start", ... }]` | + | Paste after | `paste.after` | `p` (helix: select) | `[".edit.insert", { handleNewLine: true, where: "end" , ... }]` | + | Paste before and select | `paste.before.select` | `s-p` (core: normal) | `[".edit.insert", { handleNewLine: true, where: "start", shift: "select", ... }]` | + | Paste after and select | `paste.after.select` | `p` (core: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , shift: "select", ... }]` | | Paste all before | `pasteAll.before` | | `[".edit.insert", { handleNewLine: true, where: "start", all: true, ... }]` | | Paste all after | `pasteAll.after` | | `[".edit.insert", { handleNewLine: true, where: "end" , all: true, ... }]` | | Paste all before and select | `pasteAll.before.select` | `s-a-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "start", all: true, shift: "select", ... }]` | | Paste all after and select | `pasteAll.after.select` | `a-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , all: true, shift: "select", ... }]` | - | Delete | `delete` | `a-d` (kakoune: normal) | `[".edit.insert", { register: "_", ... }]` | + | Delete | `delete` | `a-d` (core: normal), `a-d` (helix: select) | `[".edit.insert", { register: "_", ... }]` | | Delete and switch to Insert | `delete-insert` | `a-c` (kakoune: normal) | `[".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | - | Copy and delete | `yank-delete` | `d` (kakoune: normal), `d` (helix: select) | `[".selections.saveText", { +register }], [".edit.insert", { register: "_", ... }]` | - | Copy, delete and switch to Insert | `yank-delete-insert` | `c` (kakoune: normal), `c` (helix: select) | `[".selections.saveText", { +register }], [".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | + | Copy and delete | `yank-delete` | `d` (core: normal), `d` (helix: select) | `[".selections.saveText", { +register }], [".edit.insert", { register: "_", ... }]` | + | Copy, delete and switch to Insert | `yank-delete-insert` | `c` (core: normal), `c` (helix: select) | `[".selections.saveText", { +register }], [".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | | Copy and replace | `yank-replace` | `s-r` (kakoune: normal) | `[".selections.saveText", { register: "tmp" }], [".edit.insert"], [".updateRegister", { copyFrom: "tmp", ... }]` | edit.join: @@ -226,7 +234,8 @@ edit.join: keys: qwerty: |- - `a-j` (kakoune: normal) + `a-j` (core: normal) + `s-j` (helix: select) doc: en: |+ @@ -238,7 +247,8 @@ edit.join.select: keys: qwerty: |- - `s-a-j` (kakoune: normal) + `s-a-j` (core: normal) + `s-a-j` (helix: select) doc: en: |+ @@ -262,9 +272,9 @@ edit.newLine.above: #### Additional keybindings - | Title | Identifier | Keybinding | Commands | - | ------------------------------------------ | ---------------------- | ----------------------- | --------------------------------------------------------------------------------- | - | Insert new line above and switch to insert | `newLine.above.insert` | `s-o` (kakoune: normal) | `[".edit.newLine.above", { shift: "select" }], [".modes.insert.before", { ... }]` | + | Title | Identifier | Keybinding | Commands | + | ------------------------------------------ | ---------------------- | ------------------------------------------- | --------------------------------------------------------------------------------- | + | Insert new line above and switch to insert | `newLine.above.insert` | `s-o` (core: normal), `s-o` (helix: select) | `[".edit.newLine.above", { shift: "select" }], [".modes.insert.before", { ... }]` | edit.newLine.above.insert: title: @@ -275,7 +285,8 @@ edit.newLine.above.insert: keys: qwerty: |- - `s-o` (kakoune: normal) + `s-o` (core: normal) + `s-o` (helix: select) edit.newLine.below: title: @@ -295,9 +306,9 @@ edit.newLine.below: #### Additional keybindings - | Title | Identifier | Keybinding | Commands | - | ------------------------------------------ | ---------------------- | --------------------- | --------------------------------------------------------------------------------- | - | Insert new line below and switch to insert | `newLine.below.insert` | `o` (kakoune: normal) | `[".edit.newLine.below", { shift: "select" }], [".modes.insert.before", { ... }]` | + | Title | Identifier | Keybinding | Commands | + | ------------------------------------------ | ---------------------- | --------------------------------------- | --------------------------------------------------------------------------------- | + | Insert new line below and switch to insert | `newLine.below.insert` | `o` (core: normal), `o` (helix: select) | `[".edit.newLine.below", { shift: "select" }], [".modes.insert.before", { ... }]` | edit.newLine.below.insert: title: @@ -308,7 +319,8 @@ edit.newLine.below.insert: keys: qwerty: |- - `o` (kakoune: normal) + `o` (core: normal) + `o` (helix: select) edit.paste.after: title: @@ -318,7 +330,8 @@ edit.paste.after: [".edit.insert", { handleNewLine: true, where: "end" , $exclude: [] }] keys: - qwerty: "" + qwerty: |- + `p` (helix: select) edit.paste.after.select: title: @@ -329,7 +342,7 @@ edit.paste.after.select: keys: qwerty: |- - `p` (kakoune: normal) + `p` (core: normal) edit.paste.before: title: @@ -339,7 +352,8 @@ edit.paste.before: [".edit.insert", { handleNewLine: true, where: "start", $exclude: [] }] keys: - qwerty: "" + qwerty: |- + `s-p` (helix: select) edit.paste.before.select: title: @@ -350,7 +364,7 @@ edit.paste.before.select: keys: qwerty: |- - `s-p` (kakoune: normal) + `s-p` (core: normal) edit.pasteAll.after: title: @@ -400,7 +414,7 @@ edit.replaceCharacters: keys: qwerty: |- - `r` (kakoune: normal) + `r` (core: normal) doc: en: |+ @@ -427,7 +441,7 @@ edit.yank-delete: keys: qwerty: |- - `d` (kakoune: normal) + `d` (core: normal) `d` (helix: select) edit.yank-delete-insert: @@ -439,7 +453,7 @@ edit.yank-delete-insert: keys: qwerty: |- - `c` (kakoune: normal) + `c` (core: normal) `c` (helix: select) edit.yank-replace: @@ -496,7 +510,7 @@ history.redo: keys: qwerty: |- - `s-u` (kakoune: normal) + `s-u` (core: normal) `s-u` (helix: select) doc: @@ -524,10 +538,10 @@ history.repeat: Repeat last change. - | Title | Identifier | Keybinding | Commands | - | ---------------------------- | ------------------ | ----------------------- | ----------------------------------------------------------------------------- | - | Repeat last selection change | `repeat.selection` | | `[".history.repeat", { filter: "dance\\.(seek|select|selections)", +count }]` | - | Repeat last seek | `repeat.seek` | `a-.` (kakoune: normal) | `[".history.repeat", { filter: "dance\\.seek", +count }]` | + | Title | Identifier | Keybinding | Commands | + | ---------------------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------------------------- | + | Repeat last selection change | `repeat.selection` | | `[".history.repeat", { filter: "dance\\.(seek|select|selections)", +count }]` | + | Repeat last seek | `repeat.seek` | `a-.` (core: normal), `a-.` (helix: select) | `[".history.repeat", { filter: "dance\\.seek", +count }]` | history.repeat.edit: title: @@ -535,8 +549,8 @@ history.repeat.edit: keys: qwerty: |- - `.` (kakoune: normal) - `NumPad_Decimal` (kakoune: normal) + `.` (core: normal) + `NumPad_Decimal` (core: normal) doc: en: |+ @@ -551,7 +565,8 @@ history.repeat.seek: keys: qwerty: |- - `a-.` (kakoune: normal) + `a-.` (core: normal) + `a-.` (helix: select) history.repeat.selection: title: @@ -569,7 +584,7 @@ history.undo: keys: qwerty: |- - `u` (kakoune: normal) + `u` (core: normal) `u` (helix: select) doc: @@ -624,7 +639,8 @@ modes.insert.after: keys: qwerty: |- - `a` (kakoune: normal) + `a` (core: normal) + `a` (helix: select) modes.insert.before: title: @@ -635,7 +651,8 @@ modes.insert.before: keys: qwerty: |- - `i` (kakoune: normal) + `i` (core: normal) + `i` (helix: select) modes.insert.lineEnd: title: @@ -646,7 +663,8 @@ modes.insert.lineEnd: keys: qwerty: |- - `s-a` (kakoune: normal) + `s-a` (core: normal) + `s-a` (helix: select) modes.insert.lineStart: title: @@ -657,7 +675,8 @@ modes.insert.lineStart: keys: qwerty: |- - `s-i` (kakoune: normal) + `s-i` (core: normal) + `s-i` (helix: select) modes.set: title: @@ -669,20 +688,20 @@ modes.set: #### Variants - | Title | Identifier | Keybinding | Command | - | ------------------ | ------------ | ---------------------------------------------------- | ----------------------------------------------------------- | - | Set mode to Normal | `set.normal` | `escape` (kakoune: insert), `escape` (helix: select) | `[".modes.set", { mode: "normal" }], ["hideSuggestWidget"]` | - | Set mode to Insert | `set.insert` | | `[".modes.set", { mode: "insert" }]` | - | Set mode to Select | `set.select` | | `[".modes.set", { mode: "select" }]` | + | Title | Identifier | Keybinding | Command | + | ------------------ | ------------ | ---------------------------------------------------------------------- | ----------------------------------------------------------- | + | Set mode to Normal | `set.normal` | `escape` (core: insert), `escape` (helix: select), `v` (helix: select) | `[".modes.set", { mode: "normal" }], ["hideSuggestWidget"]` | + | Set mode to Insert | `set.insert` | | `[".modes.set", { mode: "insert" }]` | + | Set mode to Select | `set.select` | `v` (helix: normal) | `[".modes.set", { mode: "select" }]` | Other variants are provided to switch to insert mode: - | Title | Identifier | Keybinding | Commands | - | -------------------- | ------------------ | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | Insert before | `insert.before` | `i` (kakoune: normal) | `[".selections.faceBackward", { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | - | Insert after | `insert.after` | `a` (kakoune: normal) | `[".selections.faceForward" , { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | - | Insert at line start | `insert.lineStart` | `s-i` (kakoune: normal) | `[".select.lineStart", { shift: "jump", skipBlank: true }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | - | Insert at line end | `insert.lineEnd` | `s-a` (kakoune: normal) | `[".select.lineEnd" , { shift: "jump" }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | + | Title | Identifier | Keybinding | Commands | + | -------------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | Insert before | `insert.before` | `i` (core: normal), `i` (helix: select) | `[".selections.faceBackward", { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | + | Insert after | `insert.after` | `a` (core: normal), `a` (helix: select) | `[".selections.faceForward" , { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | + | Insert at line start | `insert.lineStart` | `s-i` (core: normal), `s-i` (helix: select) | `[".select.lineStart", { shift: "jump", skipBlank: true }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | + | Insert at line end | `insert.lineEnd` | `s-a` (core: normal), `s-a` (helix: select) | `[".select.lineEnd" , { shift: "jump" }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | modes.set.insert: title: @@ -703,8 +722,9 @@ modes.set.normal: keys: qwerty: |- - `escape` (kakoune: insert) + `escape` (core: insert) `escape` (helix: select) + `v` (helix: select) modes.set.select: title: @@ -714,7 +734,8 @@ modes.set.select: [".modes.set", { mode: "select" }] keys: - qwerty: "" + qwerty: |- + `v` (helix: normal) modes.set.temporarily: title: @@ -879,19 +900,19 @@ search: keys: qwerty: |- - `/` (kakoune: normal) - `NumPad_Divide` (kakoune: normal) + `/` (core: normal) + `NumPad_Divide` (core: normal) doc: en: | Search. - | Title | Identifier | Keybinding | Command | - | ------------------------ | ----------------- | ----------------------- | ------------------------------------------------------ | - | Search (extend) | `extend` | `?` (kakoune: normal) | `[".search", { shift: "extend", ... }]` | - | Search backward | `backward` | `a-/` (kakoune: normal) | `[".search", { direction: -1 , ... }]` | - | Search backward (extend) | `backward.extend` | `a-?` (kakoune: normal) | `[".search", { direction: -1, shift: "extend", ... }]` | + | Title | Identifier | Keybinding | Command | + | ------------------------ | ----------------- | -------------------------------------------- | ------------------------------------------------------ | + | Search (extend) | `extend` | `?` (kakoune: normal), `/` (helix: select) | `[".search", { shift: "extend", ... }]` | + | Search backward | `backward` | `a-/` (kakoune: normal), `?` (helix: normal) | `[".search", { direction: -1 , ... }]` | + | Search backward (extend) | `backward.extend` | `a-?` (kakoune: normal), `?` (helix: select) | `[".search", { direction: -1, shift: "extend", ... }]` | search.backward: title: @@ -903,6 +924,7 @@ search.backward: keys: qwerty: |- `a-/` (kakoune: normal) + `?` (helix: normal) search.backward.extend: title: @@ -914,6 +936,7 @@ search.backward.extend: keys: qwerty: |- `a-?` (kakoune: normal) + `?` (helix: select) search.extend: title: @@ -925,6 +948,7 @@ search.extend: keys: qwerty: |- `?` (kakoune: normal) + `/` (helix: select) search.next: title: @@ -932,18 +956,18 @@ search.next: keys: qwerty: |- - `n` (kakoune: normal) + `n` (core: normal) doc: en: | Select next match. - | Title | Identifier | Keybinding | Command | - | --------------------- | -------------- | ------------------------- | ----------------------------------------------------- | - | Add next match | `next.add` | `s-n` (kakoune: normal) | `[".search.next", { add: true, ... }]` | - | Select previous match | `previous` | `a-n` (kakoune: normal) | `[".search.next", { direction: -1 , ... }]` | - | Add previous match | `previous.add` | `s-a-n` (kakoune: normal) | `[".search.next", { direction: -1, add: true, ... }]` | + | Title | Identifier | Keybinding | Command | + | --------------------- | -------------- | ------------------------------------------------ | ----------------------------------------------------- | + | Add next match | `next.add` | `s-n` (kakoune: normal), `n` (helix: select) | `[".search.next", { add: true, ... }]` | + | Select previous match | `previous` | `a-n` (kakoune: normal), `s-n` (helix: normal) | `[".search.next", { direction: -1 , ... }]` | + | Add previous match | `previous.add` | `s-a-n` (kakoune: normal), `s-n` (helix: select) | `[".search.next", { direction: -1, add: true, ... }]` | search.next.add: title: @@ -955,6 +979,7 @@ search.next.add: keys: qwerty: |- `s-n` (kakoune: normal) + `n` (helix: select) search.previous: title: @@ -966,6 +991,7 @@ search.previous: keys: qwerty: |- `a-n` (kakoune: normal) + `s-n` (helix: normal) search.previous.add: title: @@ -977,6 +1003,7 @@ search.previous.add: keys: qwerty: |- `s-a-n` (kakoune: normal) + `s-n` (helix: select) search.selection: title: @@ -984,17 +1011,17 @@ search.selection: keys: qwerty: |- - `a-*` (kakoune: normal) - `a-NumPad_Multiply` (kakoune: normal) + `a-*` (core: normal) + `a-NumPad_Multiply` (core: normal) doc: en: | Search current selection. - | Title | Identifier | Keybinding | Command | - | -------------------------------- | ----------------- | ---------------------------------------------------------- | --------------------------------------------------- | - | Search current selection (smart) | `selection.smart` | `*` (kakoune: normal), `NumPad_Multiply` (kakoune: normal) | `[".search.selection", { smart: true, +register }]` | + | Title | Identifier | Keybinding | Command | + | -------------------------------- | ----------------- | ---------------------------------------------------- | --------------------------------------------------- | + | Search current selection (smart) | `selection.smart` | `*` (core: normal), `NumPad_Multiply` (core: normal) | `[".search.selection", { smart: true, +register }]` | search.selection.smart: title: @@ -1005,8 +1032,8 @@ search.selection.smart: keys: qwerty: |- - `*` (kakoune: normal) - `NumPad_Multiply` (kakoune: normal) + `*` (core: normal) + `NumPad_Multiply` (core: normal) seek: title: @@ -1014,7 +1041,7 @@ seek: keys: qwerty: |- - `t` (kakoune: normal) + `t` (core: normal) doc: en: | @@ -1026,11 +1053,11 @@ seek: | Title | Identifier | Keybinding | Command | | ---------------------------------------- | -------------------------- | ------------------------------------------------ | ------------------------------------------------------------------- | | Extend to character (excluded) | `extend` | `s-t` (kakoune: normal), `t` (helix: select) | `[".seek", { shift: "extend" , ... }]` | - | Select to character (excluded, backward) | `backward` | `a-t` (kakoune: normal) | `[".seek", { direction: -1, ... }]` | + | Select to character (excluded, backward) | `backward` | `a-t` (kakoune: normal), `s-t` (helix: normal) | `[".seek", { direction: -1, ... }]` | | Extend to character (excluded, backward) | `extend.backward` | `s-a-t` (kakoune: normal), `s-t` (helix: select) | `[".seek", { shift: "extend", direction: -1, ... }]` | - | Select to character (included) | `included` | `f` (kakoune: normal) | `[".seek", { include: true , ... }]` | + | Select to character (included) | `included` | `f` (core: normal) | `[".seek", { include: true , ... }]` | | Extend to character (included) | `included.extend` | `s-f` (kakoune: normal), `f` (helix: select) | `[".seek", { include: true, shift: "extend" , ... }]` | - | Select to character (included, backward) | `included.backward` | `a-f` (kakoune: normal) | `[".seek", { include: true, direction: -1, ... }]` | + | Select to character (included, backward) | `included.backward` | `a-f` (kakoune: normal), `s-f` (helix: normal) | `[".seek", { include: true, direction: -1, ... }]` | | Extend to character (included, backward) | `included.extend.backward` | `s-a-f` (kakoune: normal), `s-f` (helix: select) | `[".seek", { include: true, shift: "extend", direction: -1, ... }]` | seek.askObject: @@ -1155,6 +1182,7 @@ seek.backward: keys: qwerty: |- `a-t` (kakoune: normal) + `s-t` (helix: normal) seek.enclosing: title: @@ -1243,7 +1271,7 @@ seek.included: keys: qwerty: |- - `f` (kakoune: normal) + `f` (core: normal) seek.included.backward: title: @@ -1255,6 +1283,7 @@ seek.included.backward: keys: qwerty: |- `a-f` (kakoune: normal) + `s-f` (helix: normal) seek.included.extend: title: @@ -1391,7 +1420,7 @@ seek.word: keys: qwerty: |- - `w` (kakoune: normal) + `w` (core: normal) doc: en: | @@ -1405,15 +1434,15 @@ seek.word: | Title | Identifier | Keybinding | Command | | -------------------------------------------- | ------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------- | | Extend to next word start | `word.extend` | `s-w` (kakoune: normal), `w` (helix: select) | `[".seek.word", { shift: "extend" , ... }]` | - | Select to previous word start | `word.backward` | `b` (kakoune: normal) | `[".seek.word", { direction: -1, ... }]` | + | Select to previous word start | `word.backward` | `b` (core: normal) | `[".seek.word", { direction: -1, ... }]` | | Extend to previous word start | `word.extend.backward` | `s-b` (kakoune: normal), `b` (helix: select) | `[".seek.word", { shift: "extend", direction: -1, ... }]` | - | Select to next non-whitespace word start | `word.ws` | `a-w` (kakoune: normal) | `[".seek.word", { ws: true , ... }]` | + | Select to next non-whitespace word start | `word.ws` | `a-w` (kakoune: normal), `s-w` (helix: normal) | `[".seek.word", { ws: true , ... }]` | | Extend to next non-whitespace word start | `word.ws.extend` | `s-a-w` (kakoune: normal), `s-w` (helix: select) | `[".seek.word", { ws: true, shift: "extend" , ... }]` | - | Select to previous non-whitespace word start | `word.ws.backward` | `a-b` (kakoune: normal) | `[".seek.word", { ws: true, direction: -1, ... }]` | + | Select to previous non-whitespace word start | `word.ws.backward` | `a-b` (kakoune: normal), `s-b` (helix: normal) | `[".seek.word", { ws: true, direction: -1, ... }]` | | Extend to previous non-whitespace word start | `word.ws.extend.backward` | `s-a-b` (kakoune: normal), `s-b` (helix: select) | `[".seek.word", { ws: true, shift: "extend", direction: -1, ... }]` | - | Select to next word end | `wordEnd` | `e` (kakoune: normal) | `[".seek.word", { stopAtEnd: true , ... }]` | + | Select to next word end | `wordEnd` | `e` (core: normal) | `[".seek.word", { stopAtEnd: true , ... }]` | | Extend to next word end | `wordEnd.extend` | `s-e` (kakoune: normal), `e` (helix: select) | `[".seek.word", { stopAtEnd: true , shift: "extend" , ... }]` | - | Select to next non-whitespace word end | `wordEnd.ws` | `a-e` (kakoune: normal) | `[".seek.word", { stopAtEnd: true , ws: true , ... }]` | + | Select to next non-whitespace word end | `wordEnd.ws` | `a-e` (kakoune: normal), `s-e` (helix: normal) | `[".seek.word", { stopAtEnd: true , ws: true , ... }]` | | Extend to next non-whitespace word end | `wordEnd.ws.extend` | `s-a-e` (kakoune: normal), `s-e` (helix: select) | `[".seek.word", { stopAtEnd: true , ws: true, shift: "extend" , ... }]` | seek.word.backward: @@ -1425,7 +1454,7 @@ seek.word.backward: keys: qwerty: |- - `b` (kakoune: normal) + `b` (core: normal) seek.word.extend: title: @@ -1461,6 +1490,7 @@ seek.word.ws: keys: qwerty: |- `a-w` (kakoune: normal) + `s-w` (helix: normal) seek.word.ws.backward: title: @@ -1472,6 +1502,7 @@ seek.word.ws.backward: keys: qwerty: |- `a-b` (kakoune: normal) + `s-b` (helix: normal) seek.word.ws.extend: title: @@ -1506,7 +1537,7 @@ seek.wordEnd: keys: qwerty: |- - `e` (kakoune: normal) + `e` (core: normal) seek.wordEnd.extend: title: @@ -1530,6 +1561,7 @@ seek.wordEnd.ws: keys: qwerty: |- `a-e` (kakoune: normal) + `s-e` (helix: normal) seek.wordEnd.ws.extend: title: @@ -1598,7 +1630,7 @@ select.down.jump: keys: qwerty: |- - `j` (kakoune: normal) , `down` (kakoune: normal) + `j` (core: normal) , `down` (core: normal) select.firstLine.extend: title: @@ -1662,9 +1694,9 @@ select.horizontally: | Title | Identifier | Keybinding | Command | | ------------ | -------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | - | Jump right | `right.jump` | `l` (kakoune: normal) , `right` (kakoune: normal) | `[".select.horizontally", { direction: 1, shift: "jump" , ... }]` | + | Jump right | `right.jump` | `l` (core: normal) , `right` (core: normal) | `[".select.horizontally", { direction: 1, shift: "jump" , ... }]` | | Extend right | `right.extend` | `s-l` (kakoune: normal), `s-right` (kakoune: normal), `l` (helix: select), `right` (helix: select) | `[".select.horizontally", { direction: 1, shift: "extend", ... }]` | - | Jump left | `left.jump` | `h` (kakoune: normal) , `left` (kakoune: normal) | `[".select.horizontally", { direction: -1, shift: "jump" , ... }]` | + | Jump left | `left.jump` | `h` (core: normal) , `left` (core: normal) | `[".select.horizontally", { direction: -1, shift: "jump" , ... }]` | | Extend left | `left.extend` | `s-h` (kakoune: normal), `s-left` (kakoune: normal), `h` (helix: select), `left` (helix: select) | `[".select.horizontally", { direction: -1, shift: "extend", ... }]` | select.lastLine: @@ -1748,7 +1780,7 @@ select.left.jump: keys: qwerty: |- - `h` (kakoune: normal) , `left` (kakoune: normal) + `h` (core: normal) , `left` (core: normal) select.line.above: title: @@ -1782,6 +1814,11 @@ select.line.below.extend: en: | Extend to line below. + keys: + qwerty: |- + `x` (helix: normal) + `x` (helix: select) + select.lineEnd: title: en: Select to line end @@ -1789,7 +1826,7 @@ select.lineEnd: keys: qwerty: |- `a-l` (kakoune: normal) - `end` (kakoune: normal) + `end` (core: normal) doc: en: | @@ -1799,11 +1836,11 @@ select.lineEnd: #### Variants - | Title | Identifier | Keybinding | Command | - | ------------------------ | -------------------- | ---------------------------------------------------- | --------------------------------------------------------------- | - | Extend to line end | `lineEnd.extend` | `s-a-l` (kakoune: normal), `s-end` (kakoune: normal) | `[".select.lineEnd", { shift: "extend", ... }]` | - | Jump to last character | `documentEnd.jump` | | `[".select.lineEnd", { count: MAX_INT, shift: "jump" , ... }]` | - | Extend to last character | `documentEnd.extend` | | `[".select.lineEnd", { count: MAX_INT, shift: "extend", ... }]` | + | Title | Identifier | Keybinding | Command | + | ------------------------ | -------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------- | + | Extend to line end | `lineEnd.extend` | `s-a-l` (kakoune: normal), `s-end` (kakoune: normal), `end` (helix: select) | `[".select.lineEnd", { shift: "extend", ... }]` | + | Jump to last character | `documentEnd.jump` | | `[".select.lineEnd", { count: MAX_INT, shift: "jump" , ... }]` | + | Extend to last character | `documentEnd.extend` | | `[".select.lineEnd", { count: MAX_INT, shift: "extend", ... }]` | select.lineEnd.extend: title: @@ -1816,6 +1853,7 @@ select.lineEnd.extend: qwerty: |- `s-a-l` (kakoune: normal) `s-end` (kakoune: normal) + `end` (helix: select) select.lineStart: title: @@ -1824,7 +1862,7 @@ select.lineStart: keys: qwerty: |- `a-h` (kakoune: normal) - `home` (kakoune: normal) + `home` (core: normal) doc: en: | @@ -1833,14 +1871,14 @@ select.lineStart: #### Variants - | Title | Identifier | Keybinding | Command | - | -------------------- | ------------------ | ----------------------------------------------------- | ------------------------------------------------------------------ | - | Jump to line start | `lineStart.jump` | | `[".select.lineStart", { shift: "jump" , ... }]` | - | Extend to line start | `lineStart.extend` | `s-a-h` (kakoune: normal), `s-home` (kakoune: normal) | `[".select.lineStart", { shift: "extend", ... }]` | - | Jump to line start (skip blank) | `lineStart.skipBlank.jump` | | `[".select.lineStart", { skipBlank: true, shift: "jump" , ... }]` | - | Extend to line start (skip blank) | `lineStart.skipBlank.extend` | | `[".select.lineStart", { skipBlank: true, shift: "extend", ... }]` | - | Jump to first line | `firstLine.jump` | | `[".select.lineStart", { count: 0, shift: "jump" , ... }]` | - | Extend to first line | `firstLine.extend` | | `[".select.lineStart", { count: 0, shift: "extend", ... }]` | + | Title | Identifier | Keybinding | Command | + | -------------------- | ------------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------ | + | Jump to line start | `lineStart.jump` | | `[".select.lineStart", { shift: "jump" , ... }]` | + | Extend to line start | `lineStart.extend` | `s-a-h` (kakoune: normal), `s-home` (kakoune: normal), `home` (helix: select) | `[".select.lineStart", { shift: "extend", ... }]` | + | Jump to line start (skip blank) | `lineStart.skipBlank.jump` | | `[".select.lineStart", { skipBlank: true, shift: "jump" , ... }]` | + | Extend to line start (skip blank) | `lineStart.skipBlank.extend` | | `[".select.lineStart", { skipBlank: true, shift: "extend", ... }]` | + | Jump to first line | `firstLine.jump` | | `[".select.lineStart", { count: 0, shift: "jump" , ... }]` | + | Extend to first line | `firstLine.extend` | | `[".select.lineStart", { count: 0, shift: "extend", ... }]` | select.lineStart.extend: title: @@ -1853,6 +1891,7 @@ select.lineStart.extend: qwerty: |- `s-a-h` (kakoune: normal) `s-home` (kakoune: normal) + `home` (helix: select) select.lineStart.jump: title: @@ -1936,7 +1975,7 @@ select.right.jump: keys: qwerty: |- - `l` (kakoune: normal) , `right` (kakoune: normal) + `l` (core: normal) , `right` (core: normal) select.to: title: @@ -1953,7 +1992,7 @@ select.to: | Title | Identifier | Keybinding | Command | | --------- | ----------- | -------------------------------------------- | ------------------------------------------ | - | Go to | `to.jump` | `g` (kakoune: normal) | `[".select.to", { shift: "jump" , ... }]` | + | Go to | `to.jump` | `g` (core: normal) | `[".select.to", { shift: "jump" , ... }]` | | Extend to | `to.extend` | `s-g` (kakoune: normal), `g` (helix: select) | `[".select.to", { shift: "extend", ... }]` | select.to.extend: @@ -1977,7 +2016,7 @@ select.to.jump: keys: qwerty: |- - `g` (kakoune: normal) + `g` (core: normal) select.up.extend: title: @@ -2001,7 +2040,7 @@ select.up.jump: keys: qwerty: |- - `k` (kakoune: normal) , `up` (kakoune: normal) + `k` (core: normal) , `up` (core: normal) select.vertically: title: @@ -2014,21 +2053,25 @@ select.vertically: #### Variants - | Title | Identifier | Keybinding | Command | + | Title | Identifier | Keybinding | Command | | ----------- | ------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | - | Jump down | `down.jump` | `j` (kakoune: normal) , `down` (kakoune: normal) | `[".select.vertically", { direction: 1, shift: "jump" , ... }]` | + | Jump down | `down.jump` | `j` (core: normal) , `down` (core: normal) | `[".select.vertically", { direction: 1, shift: "jump" , ... }]` | | Extend down | `down.extend` | `s-j` (kakoune: normal), `s-down` (kakoune: normal), `j` (helix: select), `down` (helix: select) | `[".select.vertically", { direction: 1, shift: "extend", ... }]` | - | Jump up | `up.jump` | `k` (kakoune: normal) , `up` (kakoune: normal) | `[".select.vertically", { direction: -1, shift: "jump" , ... }]` | + | Jump up | `up.jump` | `k` (core: normal) , `up` (core: normal) | `[".select.vertically", { direction: -1, shift: "jump" , ... }]` | | Extend up | `up.extend` | `s-k` (kakoune: normal), `s-up` (kakoune: normal) , `k` (helix: select), `up` (helix: select) | `[".select.vertically", { direction: -1, shift: "extend", ... }]` | The following keybindings are also defined: - | Keybinding | Command | - | ------------------------------------------------ | -------------------------------------------------------------------------- | - | `c-f` (kakoune: normal), `c-f` (kakoune: insert) | `[".select.vertically", { direction: 1, by: "page" , shift: "jump" }]` | - | `c-d` (kakoune: normal), `c-d` (kakoune: insert) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "jump" }]` | - | `c-b` (kakoune: normal), `c-b` (kakoune: insert) | `[".select.vertically", { direction: -1, by: "page" , shift: "jump" }]` | - | `c-u` (kakoune: normal), `c-u` (kakoune: insert) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "jump" }]` | + | Keybinding | Command | + | -------------------------------------------| ---------------------------------------------------------------------------- | + | `c-f` (core: normal), `c-f` (core: insert) | `[".select.vertically", { direction: 1, by: "page" , shift: "jump" }]` | + | `c-d` (core: normal), `c-d` (core: insert) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "jump" }]` | + | `c-b` (core: normal), `c-b` (core: insert) | `[".select.vertically", { direction: -1, by: "page" , shift: "jump" }]` | + | `c-u` (core: normal), `c-u` (core: insert) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "jump" }]` | + | `c-f` (helix: select) | `[".select.vertically", { direction: 1, by: "page" , shift: "extend" }]` | + | `c-d` (helix: select) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "extend" }]` | + | `c-b` (helix: select) | `[".select.vertically", { direction: -1, by: "page" , shift: "extend" }]` | + | `c-u` (helix: select) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "extend" }]` | selections.changeDirection: title: @@ -2036,7 +2079,8 @@ selections.changeDirection: keys: qwerty: |- - `a-;` (kakoune: normal) + `a-;` (core: normal) + `a-;` (helix: select) doc: en: | @@ -2076,7 +2120,8 @@ selections.clear.main: keys: qwerty: |- - `a-,` (kakoune: normal) + `a-,` (core: normal) + `a-,` (helix: select) selections.clear.secondary: title: @@ -2087,7 +2132,8 @@ selections.clear.secondary: keys: qwerty: |- - `,` (kakoune: normal) + `,` (core: normal) + `,` (helix: select) selections.copy: title: @@ -2126,6 +2172,8 @@ selections.expandToLines: keys: qwerty: |- `x` (kakoune: normal) + `s-x` (helix: normal) + `s-x` (helix: select) doc: en: |+ @@ -2160,21 +2208,21 @@ selections.filter: keys: qwerty: |- - `$` (kakoune: normal) + `$` (core: normal) + `$` (helix: select) doc: en: | Filter selections. - #### Variants - | Title | Identifier | Keybinding | Commands | - | -------------------------- | ----------------------- | --------------------------| ------------------------------------------------------------------------ | - | Keep matching selections | `filter.regexp` | `a-k` (kakoune: normal) | `[".selections.filter", { defaultExpression: "/" , ... }]` | - | Clear matching selections | `filter.regexp.inverse` | `s-a-k` (kakoune: normal) | `[".selections.filter", { defaultExpression: "/", inverse: true, ... }]` | - | Clear secondary selections | `clear.secondary` | `,` (kakoune: normal) | `[".selections.filter", { expression: "i === count" , ... }]` | - | Clear main selections | `clear.main` | `a-,` (kakoune: normal) | `[".selections.filter", { expression: "i !== count" , ... }]` | + | Title | Identifier | Keybinding | Commands | + | -------------------------- | ----------------------- | ----------------------------------------------- | ------------------------------------------------------------------------ | + | Keep matching selections | `filter.regexp` | `a-k` (core: normal), `a-k` (helix: select) | `[".selections.filter", { defaultExpression: "/" , ... }]` | + | Clear matching selections | `filter.regexp.inverse` | `s-a-k` (core: normal), `s-a-k` (helix: select) | `[".selections.filter", { defaultExpression: "/", inverse: true, ... }]` | + | Clear secondary selections | `clear.secondary` | `,` (core: normal), `,` (helix: select) | `[".selections.filter", { expression: "i === count" , ... }]` | + | Clear main selections | `clear.main` | `a-,` (core: normal), `a-,` (helix: select) | `[".selections.filter", { expression: "i !== count" , ... }]` | selections.filter.regexp: title: @@ -2185,18 +2233,20 @@ selections.filter.regexp: keys: qwerty: |- - `a-k` (kakoune: normal) + `a-k` (core: normal) + `a-k` (helix: select) selections.filter.regexp.inverse: title: en: Clear matching selections - commands: |- - [".selections.filter", { defaultExpression: "/", inverse: true, $exclude: [] }] - keys: qwerty: |- - `s-a-k` (kakoune: normal) + `s-a-k` (core: normal) + `s-a-k` (helix: select) + + commands: |- + [".selections.filter", { defaultExpression: "/", inverse: true, $exclude: [] }] selections.hideIndices: title: @@ -2245,7 +2295,8 @@ selections.pipe: keys: qwerty: |- - `a-|` (kakoune: normal) + `a-|` (core: normal) + `a-|` (helix: select) doc: en: | @@ -2254,16 +2305,15 @@ selections.pipe: Run the specified command or code with the contents of each selection, and save the result to a register. - See https://github.com/mawww/kakoune/blob/master/doc/pages/keys.asciidoc#changes-through-external-programs #### Additional commands - | Title | Identifier | Keybinding | Commands | - | ------------------- | -------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------- | - | Pipe and replace | `pipe.replace` | `|` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", ... }]` | - | Pipe and append | `pipe.append` | `!` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", where: "end" , shift: "select", ... }]` | - | Pipe and prepend | `pipe.prepend` | `a-!` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", where: "start", shift: "select", ... }]` | + | Title | Identifier | Keybinding | Commands | + | ------------------- | -------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | + | Pipe and replace | `pipe.replace` | `|` (core: normal), `|` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", ... }]` | + | Pipe and append | `pipe.append` | `!` (core: normal), `!` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", where: "end" , shift: "select", ... }]` | + | Pipe and prepend | `pipe.prepend` | `a-!` (core: normal), `a-!` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", where: "start", shift: "select", ... }]` | selections.pipe.append: title: @@ -2274,7 +2324,8 @@ selections.pipe.append: keys: qwerty: |- - `!` (kakoune: normal) + `!` (core: normal) + `!` (helix: select) selections.pipe.prepend: title: @@ -2285,7 +2336,8 @@ selections.pipe.prepend: keys: qwerty: |- - `a-!` (kakoune: normal) + `a-!` (core: normal) + `a-!` (helix: select) selections.pipe.replace: title: @@ -2296,7 +2348,8 @@ selections.pipe.replace: keys: qwerty: |- - `|` (kakoune: normal) + `|` (core: normal) + `|` (helix: select) selections.reduce: title: @@ -2304,7 +2357,8 @@ selections.reduce: keys: qwerty: |- - `;` (kakoune: normal) + `;` (core: normal) + `;` (helix: select) doc: en: | @@ -2400,16 +2454,27 @@ selections.rotate.contents: en: | Rotate selections clockwise (contents only). + The following command is also available: - | Title | Identifier | Command | - | --------------------------------------------------- | ------------------ | ---------------------------------------------------- | - | Rotate selections counter-clockwise (contents only) | `contents.reverse` | `[".selections.rotate.contents", { reverse: true }]` | + | Title | Identifier | Keybinding | Command | + | --------------------------------------------------- | ------------------ | -------------------------------------------- | ---------------------------------------------------- | + | Rotate selections counter-clockwise (contents only) | `contents.reverse` | `a-(` (helix: normal), `a-(` (helix: select) | `[".selections.rotate.contents", { reverse: true }]` | + + keys: + qwerty: |- + `a-)` (helix: normal) + `a-)` (helix: select) selections.rotate.contents.reverse: title: en: Rotate selections counter-clockwise (contents only) + keys: + qwerty: |- + `a-(` (helix: normal) + `a-(` (helix: select) + commands: |- [".selections.rotate.contents", { reverse: true }] @@ -2419,7 +2484,7 @@ selections.rotate.selections: keys: qwerty: |- - `)` (kakoune: normal) + `)` (core: normal) doc: en: | @@ -2428,9 +2493,9 @@ selections.rotate.selections: The following keybinding is also available: - | Title | Identifier | Keybinding | Command | - | ----------------------------------------------------- | -------------------- | --------------------- | ------------------------------------------------------ | - | Rotate selections counter-clockwise (selections only) | `selections.reverse` | `(` (kakoune: normal) | `[".selections.rotate.selections", { reverse: true }]` | + | Title | Identifier | Keybinding | Command | + | ----------------------------------------------------- | -------------------- | --------------------------------------- | ------------------------------------------------------ | + | Rotate selections counter-clockwise (selections only) | `selections.reverse` | `(` (core: normal), `(` (helix: select) | `[".selections.rotate.selections", { reverse: true }]` | selections.rotate.selections.reverse: title: @@ -2441,7 +2506,8 @@ selections.rotate.selections.reverse: keys: qwerty: |- - `(` (kakoune: normal) + `(` (core: normal) + `(` (helix: select) selections.save: title: @@ -2461,7 +2527,8 @@ selections.saveText: keys: qwerty: |- - `y` (kakoune: normal) + `y` (core: normal) + `y` (helix: select) doc: en: |+ @@ -2477,9 +2544,9 @@ selections.select: #### Variants - | Title | Identifier | Keybinding | Command | - | -------------- | --------------- | --------------------- | ------------------------------------------------------------------------------------------------- | - | Leap or select | `select.orLeap` | `s` (kakoune: normal) | `[".ifEmpty", { then: [[".seek.leap", { ... }]], otherwise: [[".selections.select", { ... }]] }]` | + | Title | Identifier | Keybinding | Command | + | -------------- | --------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------- | + | Leap or select | `select.orLeap` | `s` (core: normal), `s` (helix: select) | `[".ifEmpty", { then: [[".seek.leap", { ... }]], otherwise: [[".selections.select", { ... }]] }]` | selections.select.orLeap: title: @@ -2490,7 +2557,8 @@ selections.select.orLeap: keys: qwerty: |- - `s` (kakoune: normal) + `s` (core: normal) + `s` (helix: select) selections.showIndices: title: @@ -2514,7 +2582,8 @@ selections.split: keys: qwerty: |- - `s-s` (kakoune: normal) + `s-s` (core: normal) + `s-s` (helix: select) doc: en: |+ @@ -2530,9 +2599,9 @@ selections.splitLines: #### Variants - | Title | Identifier | Keybinding | Command | - | ----------------------- | ---------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------- | - | Leap or select backward | `splitLines.orLeap.backward` | `a-s` (kakoune: normal) | `[".ifEmpty", { then: [[".seek.leap", { direction: -1, ... }]], otherwise: [[".selections.splitLines", { ... }]] }]` | + | Title | Identifier | Keybinding | Command | + | ----------------------- | ---------------------------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | + | Leap or select backward | `splitLines.orLeap.backward` | `a-s` (core: normal), `a-s` (helix: select) | `[".ifEmpty", { then: [[".seek.leap", { direction: -1, ... }]], otherwise: [[".selections.splitLines", { ... }]] }]` | selections.splitLines.orLeap.backward: title: @@ -2543,7 +2612,8 @@ selections.splitLines.orLeap.backward: keys: qwerty: |- - `a-s` (kakoune: normal) + `a-s` (core: normal) + `a-s` (helix: select) selections.toggleIndices: title: @@ -2571,7 +2641,8 @@ selections.trimLines: keys: qwerty: |- - `a-x` (kakoune: normal) + `a-x` (core: normal) + `a-x` (helix: select) doc: en: |+ @@ -2585,7 +2656,8 @@ selections.trimWhitespace: keys: qwerty: |- - `_` (kakoune: normal) + `_` (core: normal) + `_` (helix: select) doc: en: |+ @@ -2599,7 +2671,7 @@ selectRegister: keys: qwerty: |- - `"` (kakoune: normal) + `"` (core: normal) doc: en: |+ @@ -2676,6 +2748,8 @@ anonymous: keys: qwerty: |- `v` (kakoune: normal) + `z` (helix: normal) + `z` (helix: select) - title: en: Show view menu (locked) @@ -2686,38 +2760,68 @@ anonymous: keys: qwerty: |- `s-v` (kakoune: normal) + `s-z` (helix: normal) + `s-z` (helix: select) + + - commands: |- + [".select.vertically", { direction: -1, by: "halfPage", shift: "extend" }] + + keys: + qwerty: |- + `c-u` (helix: select) - commands: |- [".select.vertically", { direction: -1, by: "halfPage", shift: "jump" }] keys: qwerty: |- - `c-u` (kakoune: normal) - `c-u` (kakoune: insert) + `c-u` (core: normal) + `c-u` (core: insert) + + - commands: |- + [".select.vertically", { direction: -1, by: "page" , shift: "extend" }] + + keys: + qwerty: |- + `c-b` (helix: select) - commands: |- [".select.vertically", { direction: -1, by: "page" , shift: "jump" }] keys: qwerty: |- - `c-b` (kakoune: normal) - `c-b` (kakoune: insert) + `c-b` (core: normal) + `c-b` (core: insert) + + - commands: |- + [".select.vertically", { direction: 1, by: "halfPage", shift: "extend" }] + + keys: + qwerty: |- + `c-d` (helix: select) - commands: |- [".select.vertically", { direction: 1, by: "halfPage", shift: "jump" }] keys: qwerty: |- - `c-d` (kakoune: normal) - `c-d` (kakoune: insert) + `c-d` (core: normal) + `c-d` (core: insert) + + - commands: |- + [".select.vertically", { direction: 1, by: "page" , shift: "extend" }] + + keys: + qwerty: |- + `c-f` (helix: select) - commands: |- [".select.vertically", { direction: 1, by: "page" , shift: "jump" }] keys: qwerty: |- - `c-f` (kakoune: normal) - `c-f` (kakoune: insert) + `c-f` (core: normal) + `c-f` (core: insert) - commands: |- [".selections.restore.withCurrent", { reverse: true, $exclude: [] }] diff --git a/src/commands/README.md b/src/commands/README.md index 823a062c..ab733b6a 100644 --- a/src/commands/README.md +++ b/src/commands/README.md @@ -27,47 +27,47 @@ depending on the keyboard layout. The following layouts _will be_\* supported: devdev.copyLastErrorMessageCopies the last encountered error message dev.setSelectionBehaviorSet the selection behavior of the specified mode editedit.alignAlign selectionsShift+7 (editorTextFocus && dance.mode == 'normal') -edit.case.swapSwap caseAlt+` (editorTextFocus && dance.mode == 'normal') -edit.case.toLowerTransform to lower case` (editorTextFocus && dance.mode == 'normal') -edit.case.toUpperTransform to upper caseShift+` (editorTextFocus && dance.mode == 'normal') -edit.copyIndentationCopy indentationShift+Alt+7 (editorTextFocus && dance.mode == 'normal') -edit.deindentDeindent selected linesShift+Alt+, (editorTextFocus && dance.mode == 'normal') -edit.deindent.withIncompleteDeindent selected lines (including incomplete indent)Shift+, (editorTextFocus && dance.mode == 'normal') -edit.deleteDeleteAlt+D (editorTextFocus && dance.mode == 'normal') -edit.delete-insertDelete and switch to InsertAlt+C (editorTextFocus && dance.mode == 'normal') -edit.newLine.above.insertInsert new line above and switch to insertShift+O (editorTextFocus && dance.mode == 'normal') -edit.newLine.below.insertInsert new line below and switch to insertO (editorTextFocus && dance.mode == 'normal') -edit.paste.afterPaste after +edit.case.swapSwap caseAlt+` (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.case.toLowerTransform to lower case` (editorTextFocus && dance.mode == 'normal')` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.case.toUpperTransform to upper caseShift+` (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Alt+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Alt+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.copyIndentationCopy indentationShift+Alt+7 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.deindentDeindent selected linesShift+Alt+, (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.deindent.withIncompleteDeindent selected lines (including incomplete indent)Shift+, (editorTextFocus && dance.mode == 'normal')Shift+, (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.deleteDeleteAlt+D (editorTextFocus && dance.mode == 'normal')Alt+D (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.delete-insertDelete and switch to InsertAlt+C (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.newLine.above.insertInsert new line above and switch to insertShift+O (editorTextFocus && dance.mode == 'normal')Shift+O (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.newLine.below.insertInsert new line below and switch to insertO (editorTextFocus && dance.mode == 'normal')O (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.paste.afterPaste afterP (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') edit.paste.after.selectPaste after and selectP (editorTextFocus && dance.mode == 'normal') -edit.paste.beforePaste before +edit.paste.beforePaste beforeShift+P (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') edit.paste.before.selectPaste before and selectShift+P (editorTextFocus && dance.mode == 'normal') edit.pasteAll.afterPaste all after -edit.pasteAll.after.selectPaste all after and selectAlt+P (editorTextFocus && dance.mode == 'normal') +edit.pasteAll.after.selectPaste all after and selectAlt+P (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') edit.pasteAll.beforePaste all before -edit.pasteAll.before.selectPaste all before and selectShift+Alt+P (editorTextFocus && dance.mode == 'normal') -edit.selectRegister-insertPick register and replaceCtrl+R (editorTextFocus && dance.mode == 'normal')Ctrl+R (editorTextFocus && dance.mode == 'insert') -edit.yank-deleteCopy and deleteD (editorTextFocus && dance.mode == 'normal')D (editorTextFocus && dance.mode == 'select') -edit.yank-delete-insertCopy, delete and switch to InsertC (editorTextFocus && dance.mode == 'normal')C (editorTextFocus && dance.mode == 'select') -edit.yank-replaceCopy and replaceShift+R (editorTextFocus && dance.mode == 'normal') -edit.indentIndent selected linesShift+. (editorTextFocus && dance.mode == 'normal') -edit.indent.withEmptyIndent selected lines (including empty lines)Shift+Alt+. (editorTextFocus && dance.mode == 'normal') -edit.insertInsert contents of registerShift+Alt+R (editorTextFocus && dance.mode == 'normal') -edit.joinJoin linesAlt+J (editorTextFocus && dance.mode == 'normal') -edit.join.selectJoin lines and select inserted separatorsShift+Alt+J (editorTextFocus && dance.mode == 'normal') -edit.newLine.aboveInsert new line above each selectionShift+Alt+O (editorTextFocus && dance.mode == 'normal') -edit.newLine.belowInsert new line below each selectionAlt+O (editorTextFocus && dance.mode == 'normal') +edit.pasteAll.before.selectPaste all before and selectShift+Alt+P (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.selectRegister-insertPick register and replaceCtrl+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Ctrl+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') +edit.yank-deleteCopy and deleteD (editorTextFocus && dance.mode == 'normal')D (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.yank-delete-insertCopy, delete and switch to InsertC (editorTextFocus && dance.mode == 'normal')C (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.yank-replaceCopy and replaceShift+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.indentIndent selected linesShift+. (editorTextFocus && dance.mode == 'normal')Shift+. (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.indent.withEmptyIndent selected lines (including empty lines)Shift+Alt+. (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.insertInsert contents of registerShift+Alt+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.joinJoin linesAlt+J (editorTextFocus && dance.mode == 'normal')Shift+J (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.join.selectJoin lines and select inserted separatorsShift+Alt+J (editorTextFocus && dance.mode == 'normal')Shift+Alt+J (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.newLine.aboveInsert new line above each selectionShift+Alt+O (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.newLine.belowInsert new line below each selectionAlt+O (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') edit.replaceCharactersReplace charactersR (editorTextFocus && dance.mode == 'normal') -historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal') +historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal')Alt+. (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') history.repeat.selectionRepeat last selection change -history.recording.playReplay recordingQ (editorTextFocus && dance.mode == 'normal') -history.recording.startStart recordingShift+Q (editorTextFocus && dance.mode == 'normal' && !dance.isRecording) -history.recording.stopStop recordingEscape (editorTextFocus && dance.mode == 'normal' && dance.isRecording)Shift+Q (editorTextFocus && dance.mode == 'normal' && dance.isRecording) -history.redoRedoShift+U (editorTextFocus && dance.mode == 'normal')Shift+U (editorTextFocus && dance.mode == 'select') -history.redo.selectionsRedo a change of selectionsShift+Alt+U (editorTextFocus && dance.mode == 'normal') +history.recording.playReplay recordingQ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +history.recording.startStart recordingShift+Q (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && !dance.isRecording) +history.recording.stopStop recordingEscape (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && dance.isRecording)Shift+Q (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && dance.isRecording) +history.redoRedoShift+U (editorTextFocus && dance.mode == 'normal')Shift+U (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +history.redo.selectionsRedo a change of selectionsShift+Alt+U (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') history.repeatRepeat last change history.repeat.editRepeat last edit without a command. (editorTextFocus && dance.mode == 'normal')NumPad_Decimal (editorTextFocus && dance.mode == 'normal') -history.undoUndoU (editorTextFocus && dance.mode == 'normal')U (editorTextFocus && dance.mode == 'select') -history.undo.selectionsUndo a change of selectionsAlt+U (editorTextFocus && dance.mode == 'normal') +history.undoUndoU (editorTextFocus && dance.mode == 'normal')U (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +history.undo.selectionsUndo a change of selectionsAlt+U (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') keybindingskeybindings.setupSet up Dance keybindings misccancelCancel Dance operationEscape (editorTextFocus && dance.mode == 'normal' && !dance.isRecording && !markersNavigationVisible)Escape (editorTextFocus && dance.mode == 'input') changeInputChange current input @@ -79,70 +79,70 @@ selections are empty selectRegisterSelect register for next commandShift+' (editorTextFocus && dance.mode == 'normal') updateCountUpdate Dance count updateRegisterUpdate the contents of a register -modesmodes.insert.afterInsert afterA (editorTextFocus && dance.mode == 'normal') -modes.insert.beforeInsert beforeI (editorTextFocus && dance.mode == 'normal') -modes.insert.lineEndInsert at line endShift+A (editorTextFocus && dance.mode == 'normal') -modes.insert.lineStartInsert at line startShift+I (editorTextFocus && dance.mode == 'normal') +modesmodes.insert.afterInsert afterA (editorTextFocus && dance.mode == 'normal')A (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.insert.beforeInsert beforeI (editorTextFocus && dance.mode == 'normal')I (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.insert.lineEndInsert at line endShift+A (editorTextFocus && dance.mode == 'normal')Shift+A (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.insert.lineStartInsert at line startShift+I (editorTextFocus && dance.mode == 'normal')Shift+I (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') modes.set.insertSet mode to Insert -modes.set.normalSet mode to NormalEscape (editorTextFocus && dance.mode == 'insert')Escape (editorTextFocus && dance.mode == 'select') -modes.set.selectSet mode to Select -modes.set.temporarily.insertTemporary Insert modeCtrl+V (editorTextFocus && dance.mode == 'normal') -modes.set.temporarily.normalTemporary Normal modeCtrl+V (editorTextFocus && dance.mode == 'insert') +modes.set.normalSet mode to NormalEscape (editorTextFocus && dance.mode == 'insert')Escape (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')V (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.set.selectSet mode to SelectV (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +modes.set.temporarily.insertTemporary Insert modeCtrl+V (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +modes.set.temporarily.normalTemporary Normal modeCtrl+V (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') modes.setSet Dance mode modes.set.temporarilySet Dance mode temporarily searchsearch.nextSelect next matchN (editorTextFocus && dance.mode == 'normal') search.searchSearch/ (editorTextFocus && dance.mode == 'normal')NumPad_Divide (editorTextFocus && dance.mode == 'normal') -search.backwardSearch backwardAlt+/ (editorTextFocus && dance.mode == 'normal') -search.backward.extendSearch backward (extend)Shift+Alt+/ (editorTextFocus && dance.mode == 'normal') -search.extendSearch (extend)Shift+/ (editorTextFocus && dance.mode == 'normal') -search.next.addAdd next matchShift+N (editorTextFocus && dance.mode == 'normal') -search.previousSelect previous matchAlt+N (editorTextFocus && dance.mode == 'normal') -search.previous.addAdd previous matchShift+Alt+N (editorTextFocus && dance.mode == 'normal') +search.backwardSearch backwardAlt+/ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +search.backward.extendSearch backward (extend)Shift+Alt+/ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +search.extendSearch (extend)Shift+/ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')/ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +search.next.addAdd next matchShift+N (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')N (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +search.previousSelect previous matchAlt+N (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+N (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +search.previous.addAdd previous matchShift+Alt+N (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+N (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') search.selection.smartSearch current selection (smart)Shift+8 (editorTextFocus && dance.mode == 'normal')NumPad_Multiply (editorTextFocus && dance.mode == 'normal') search.selectionSearch current selectionShift+Alt+8 (editorTextFocus && dance.mode == 'normal')Alt+NumPad_Multiply (editorTextFocus && dance.mode == 'normal') -seekseek.enclosingSelect to next enclosing characterM (editorTextFocus && dance.mode == 'normal') +seekseek.enclosingSelect to next enclosing characterM (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') seek.leapLeap forward seek.objectSelect object seek.seekSelect to character (excluded)T (editorTextFocus && dance.mode == 'normal') -seek.askObjectSelect whole objectAlt+A (editorTextFocus && dance.mode == 'normal')Alt+A (editorTextFocus && dance.mode == 'insert') -seek.askObject.endSelect to whole object end] (editorTextFocus && dance.mode == 'normal') -seek.askObject.end.extendExtend to whole object endShift+] (editorTextFocus && dance.mode == 'normal') -seek.askObject.innerSelect inner objectAlt+I (editorTextFocus && dance.mode == 'normal')Alt+I (editorTextFocus && dance.mode == 'insert') -seek.askObject.inner.endSelect to inner object endAlt+] (editorTextFocus && dance.mode == 'normal') -seek.askObject.inner.end.extendExtend to inner object endShift+Alt+] (editorTextFocus && dance.mode == 'normal') -seek.askObject.inner.startSelect to inner object startAlt+[ (editorTextFocus && dance.mode == 'normal') -seek.askObject.inner.start.extendExtend to inner object startShift+Alt+[ (editorTextFocus && dance.mode == 'normal') -seek.askObject.startSelect to whole object start[ (editorTextFocus && dance.mode == 'normal') -seek.askObject.start.extendExtend to whole object startShift+[ (editorTextFocus && dance.mode == 'normal') -seek.backwardSelect to character (excluded, backward)Alt+T (editorTextFocus && dance.mode == 'normal') -seek.enclosing.backwardSelect to previous enclosing characterAlt+M (editorTextFocus && dance.mode == 'normal') -seek.enclosing.extendExtend to next enclosing characterShift+M (editorTextFocus && dance.mode == 'normal') -seek.enclosing.extend.backwardExtend to previous enclosing characterShift+Alt+M (editorTextFocus && dance.mode == 'normal') -seek.extendExtend to character (excluded)Shift+T (editorTextFocus && dance.mode == 'normal')T (editorTextFocus && dance.mode == 'select') -seek.extend.backwardExtend to character (excluded, backward)Shift+Alt+T (editorTextFocus && dance.mode == 'normal')Shift+T (editorTextFocus && dance.mode == 'select') +seek.askObjectSelect whole objectAlt+A (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Alt+A (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') +seek.askObject.endSelect to whole object end] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.end.extendExtend to whole object endShift+] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.innerSelect inner objectAlt+I (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Alt+I (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') +seek.askObject.inner.endSelect to inner object endAlt+] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.inner.end.extendExtend to inner object endShift+Alt+] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.inner.startSelect to inner object startAlt+[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.inner.start.extendExtend to inner object startShift+Alt+[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.startSelect to whole object start[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.start.extendExtend to whole object startShift+[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.backwardSelect to character (excluded, backward)Alt+T (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+T (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.enclosing.backwardSelect to previous enclosing characterAlt+M (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.enclosing.extendExtend to next enclosing characterShift+M (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.enclosing.extend.backwardExtend to previous enclosing characterShift+Alt+M (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.extendExtend to character (excluded)Shift+T (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')T (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.extend.backwardExtend to character (excluded, backward)Shift+Alt+T (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+T (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.includedSelect to character (included)F (editorTextFocus && dance.mode == 'normal') -seek.included.backwardSelect to character (included, backward)Alt+F (editorTextFocus && dance.mode == 'normal') -seek.included.extendExtend to character (included)Shift+F (editorTextFocus && dance.mode == 'normal')F (editorTextFocus && dance.mode == 'select') -seek.included.extend.backwardExtend to character (included, backward)Shift+Alt+F (editorTextFocus && dance.mode == 'normal')Shift+F (editorTextFocus && dance.mode == 'select') +seek.included.backwardSelect to character (included, backward)Alt+F (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+F (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.included.extendExtend to character (included)Shift+F (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')F (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.included.extend.backwardExtend to character (included, backward)Shift+Alt+F (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+F (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.leap.backwardLeap backward seek.syntax.child.experimentalSelect child syntax object seek.syntax.next.experimentalSelect next syntax object seek.syntax.parent.experimentalSelect parent syntax object seek.syntax.previous.experimentalSelect previous syntax object seek.word.backwardSelect to previous word startB (editorTextFocus && dance.mode == 'normal') -seek.word.extendExtend to next word startShift+W (editorTextFocus && dance.mode == 'normal')W (editorTextFocus && dance.mode == 'select') -seek.word.extend.backwardExtend to previous word startShift+B (editorTextFocus && dance.mode == 'normal')B (editorTextFocus && dance.mode == 'select') -seek.word.wsSelect to next non-whitespace word startAlt+W (editorTextFocus && dance.mode == 'normal') -seek.word.ws.backwardSelect to previous non-whitespace word startAlt+B (editorTextFocus && dance.mode == 'normal') -seek.word.ws.extendExtend to next non-whitespace word startShift+Alt+W (editorTextFocus && dance.mode == 'normal')Shift+W (editorTextFocus && dance.mode == 'select') -seek.word.ws.extend.backwardExtend to previous non-whitespace word startShift+Alt+B (editorTextFocus && dance.mode == 'normal')Shift+B (editorTextFocus && dance.mode == 'select') +seek.word.extendExtend to next word startShift+W (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')W (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.word.extend.backwardExtend to previous word startShift+B (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')B (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.word.wsSelect to next non-whitespace word startAlt+W (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+W (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.word.ws.backwardSelect to previous non-whitespace word startAlt+B (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+B (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.word.ws.extendExtend to next non-whitespace word startShift+Alt+W (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+W (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.word.ws.extend.backwardExtend to previous non-whitespace word startShift+Alt+B (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+B (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.wordEndSelect to next word endE (editorTextFocus && dance.mode == 'normal') -seek.wordEnd.extendExtend to next word endShift+E (editorTextFocus && dance.mode == 'normal')E (editorTextFocus && dance.mode == 'select') -seek.wordEnd.wsSelect to next non-whitespace word endAlt+E (editorTextFocus && dance.mode == 'normal') -seek.wordEnd.ws.extendExtend to next non-whitespace word endShift+Alt+E (editorTextFocus && dance.mode == 'normal')Shift+E (editorTextFocus && dance.mode == 'select') +seek.wordEnd.extendExtend to next word endShift+E (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')E (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.wordEnd.wsSelect to next non-whitespace word endAlt+E (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+E (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.wordEnd.ws.extendExtend to next non-whitespace word endShift+Alt+E (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+E (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.syntax.experimentalSelect syntax object seek.wordSelect to next word startW (editorTextFocus && dance.mode == 'normal') -selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.mode == 'normal') +selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') select.firstVisibleLineSelect to first visible line select.horizontallySelect horizontally select.lastLineSelect to last line @@ -150,82 +150,82 @@ selections are empty select.line.aboveSelect line above select.line.above.extendExtend to line above select.line.belowSelect line below -select.line.below.extendExtend to line below -select.lineEndSelect to line endAlt+L (editorTextFocus && dance.mode == 'normal')End (editorTextFocus && dance.mode == 'normal') -select.lineStartSelect to line startAlt+H (editorTextFocus && dance.mode == 'normal')Home (editorTextFocus && dance.mode == 'normal') +select.line.below.extendExtend to line belowX (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.lineEndSelect to line endAlt+L (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')End (editorTextFocus && dance.mode == 'normal') +select.lineStartSelect to line startAlt+H (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Home (editorTextFocus && dance.mode == 'normal') select.middleVisibleLineSelect to middle visible line -select.documentEnd.extendExtend to last character -select.documentEnd.jumpJump to last character -select.down.extendExtend downShift+J (editorTextFocus && dance.mode == 'normal')Shift+Down (editorTextFocus && dance.mode == 'normal')J (editorTextFocus && dance.mode == 'select')Down (editorTextFocus && dance.mode == 'select') +select.documentEnd.extendExtend to last character +select.documentEnd.jumpJump to last character +select.down.extendExtend downShift+J (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Down (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')J (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Down (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') select.down.jumpJump downJ (editorTextFocus && dance.mode == 'normal')Down (editorTextFocus && dance.mode == 'normal') -select.firstLine.extendExtend to first line -select.firstLine.jumpJump to first line -select.firstVisibleLine.extendExtend to first visible line -select.firstVisibleLine.jumpJump to first visible line -select.lastLine.extendExtend to last line -select.lastLine.jumpJump to last line -select.lastVisibleLine.extendExtend to last visible line -select.lastVisibleLine.jumpJump to last visible line -select.left.extendExtend leftShift+H (editorTextFocus && dance.mode == 'normal')Shift+Left (editorTextFocus && dance.mode == 'normal')H (editorTextFocus && dance.mode == 'select')Left (editorTextFocus && dance.mode == 'select') -select.left.jumpJump leftH (editorTextFocus && dance.mode == 'normal')Left (editorTextFocus && dance.mode == 'normal') -select.lineEnd.extendExtend to line endShift+Alt+L (editorTextFocus && dance.mode == 'normal')Shift+End (editorTextFocus && dance.mode == 'normal') -select.lineStart.extendExtend to line startShift+Alt+H (editorTextFocus && dance.mode == 'normal')Shift+Home (editorTextFocus && dance.mode == 'normal') -select.lineStart.jumpJump to line start -select.lineStart.skipBlank.extendExtend to line start (skip blank) -select.lineStart.skipBlank.jumpJump to line start (skip blank) -select.middleVisibleLine.extendExtend to middle visible line -select.middleVisibleLine.jumpJump to middle visible line -select.right.extendExtend rightShift+L (editorTextFocus && dance.mode == 'normal')Shift+Right (editorTextFocus && dance.mode == 'normal')L (editorTextFocus && dance.mode == 'select')Right (editorTextFocus && dance.mode == 'select') -select.right.jumpJump rightL (editorTextFocus && dance.mode == 'normal')Right (editorTextFocus && dance.mode == 'normal') -select.to.extendExtend toShift+G (editorTextFocus && dance.mode == 'normal')G (editorTextFocus && dance.mode == 'select') -select.to.jumpGo toG (editorTextFocus && dance.mode == 'normal') -select.up.extendExtend upShift+K (editorTextFocus && dance.mode == 'normal')Shift+Up (editorTextFocus && dance.mode == 'normal')K (editorTextFocus && dance.mode == 'select')Up (editorTextFocus && dance.mode == 'select') +select.firstLine.extendExtend to first line +select.firstLine.jumpJump to first line +select.firstVisibleLine.extendExtend to first visible line +select.firstVisibleLine.jumpJump to first visible line +select.lastLine.extendExtend to last line +select.lastLine.jumpJump to last line +select.lastVisibleLine.extendExtend to last visible line +select.lastVisibleLine.jumpJump to last visible line +select.left.extendExtend leftShift+H (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Left (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')H (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Left (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.left.jumpJump leftH (editorTextFocus && dance.mode == 'normal')Left (editorTextFocus && dance.mode == 'normal') +select.lineEnd.extendExtend to line endShift+Alt+L (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+End (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')End (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.lineStart.extendExtend to line startShift+Alt+H (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Home (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Home (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.lineStart.jumpJump to line start +select.lineStart.skipBlank.extendExtend to line start (skip blank) +select.lineStart.skipBlank.jumpJump to line start (skip blank) +select.middleVisibleLine.extendExtend to middle visible line +select.middleVisibleLine.jumpJump to middle visible line +select.right.extendExtend rightShift+L (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Right (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')L (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Right (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.right.jumpJump rightL (editorTextFocus && dance.mode == 'normal')Right (editorTextFocus && dance.mode == 'normal') +select.to.extendExtend toShift+G (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')G (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.to.jumpGo toG (editorTextFocus && dance.mode == 'normal') +select.up.extendExtend upShift+K (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Up (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')K (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Up (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') select.up.jumpJump upK (editorTextFocus && dance.mode == 'normal')Up (editorTextFocus && dance.mode == 'normal') select.toSelect to select.verticallySelect vertically -selectionsselections.changeDirectionChange direction of selectionsAlt+; (editorTextFocus && dance.mode == 'normal') +selectionsselections.changeDirectionChange direction of selectionsAlt+; (editorTextFocus && dance.mode == 'normal')Alt+; (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.changeOrderReverse selections -selections.copyCopy selections belowShift+C (editorTextFocus && dance.mode == 'normal') -selections.expandToLinesExpand to linesX (editorTextFocus && dance.mode == 'normal') -selections.filterFilter selectionsShift+4 (editorTextFocus && dance.mode == 'normal') -selections.mergeMerge contiguous selectionsShift+Alt+- (editorTextFocus && dance.mode == 'normal') +selections.copyCopy selections belowShift+C (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.expandToLinesExpand to linesX (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.filterFilter selectionsShift+4 (editorTextFocus && dance.mode == 'normal')Shift+4 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.mergeMerge contiguous selectionsShift+Alt+- (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') selections.openOpen selected file -selections.pipePipe selectionsShift+Alt+\ (editorTextFocus && dance.mode == 'normal') -selections.reduceReduce selections to their cursor; (editorTextFocus && dance.mode == 'normal') -selections.restoreRestore selectionsZ (editorTextFocus && dance.mode == 'normal') -selections.restore.withCurrentCombine register selections with current onesAlt+Z (editorTextFocus && dance.mode == 'normal') -selections.saveSave selectionsShift+Z (editorTextFocus && dance.mode == 'normal') -selections.saveTextCopy selections textY (editorTextFocus && dance.mode == 'normal') +selections.pipePipe selectionsShift+Alt+\ (editorTextFocus && dance.mode == 'normal')Shift+Alt+\ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.reduceReduce selections to their cursor; (editorTextFocus && dance.mode == 'normal'); (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.restoreRestore selectionsZ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.restore.withCurrentCombine register selections with current onesAlt+Z (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.saveSave selectionsShift+Z (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.saveTextCopy selections textY (editorTextFocus && dance.mode == 'normal')Y (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.selectSelect within selections -selections.clear.mainClear main selectionsAlt+, (editorTextFocus && dance.mode == 'normal') -selections.clear.secondaryClear secondary selections, (editorTextFocus && dance.mode == 'normal') -selections.copy.aboveCopy selections aboveShift+Alt+C (editorTextFocus && dance.mode == 'normal') -selections.faceBackwardBackward selections -selections.faceForwardForward selectionsShift+Alt+; (editorTextFocus && dance.mode == 'normal') -selections.filter.regexpKeep matching selectionsAlt+K (editorTextFocus && dance.mode == 'normal') -selections.filter.regexp.inverseClear matching selectionsShift+Alt+K (editorTextFocus && dance.mode == 'normal') -selections.hideIndicesHide selection indices -selections.orderAscendingOrder selections ascending -selections.orderDescendingOrder selections descending -selections.pipe.appendPipe and appendShift+1 (editorTextFocus && dance.mode == 'normal') -selections.pipe.prependPipe and prependShift+Alt+1 (editorTextFocus && dance.mode == 'normal') -selections.pipe.replacePipe and replaceShift+\ (editorTextFocus && dance.mode == 'normal') -selections.reduce.edgesReduce selections to their endsShift+Alt+S (editorTextFocus && dance.mode == 'normal') -selections.select.orLeapLeap or selectS (editorTextFocus && dance.mode == 'normal') -selections.showIndicesShow selection indices -selections.splitLines.orLeap.backwardLeap or select backwardAlt+S (editorTextFocus && dance.mode == 'normal') +selections.clear.mainClear main selectionsAlt+, (editorTextFocus && dance.mode == 'normal')Alt+, (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.clear.secondaryClear secondary selections, (editorTextFocus && dance.mode == 'normal'), (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.copy.aboveCopy selections aboveShift+Alt+C (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.faceBackwardBackward selections +selections.faceForwardForward selectionsShift+Alt+; (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.filter.regexpKeep matching selectionsAlt+K (editorTextFocus && dance.mode == 'normal')Alt+K (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.filter.regexp.inverseClear matching selectionsShift+Alt+K (editorTextFocus && dance.mode == 'normal')Shift+Alt+K (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.hideIndicesHide selection indices +selections.orderAscendingOrder selections ascending +selections.orderDescendingOrder selections descending +selections.pipe.appendPipe and appendShift+1 (editorTextFocus && dance.mode == 'normal')Shift+1 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.pipe.prependPipe and prependShift+Alt+1 (editorTextFocus && dance.mode == 'normal')Shift+Alt+1 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.pipe.replacePipe and replaceShift+\ (editorTextFocus && dance.mode == 'normal')Shift+\ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.reduce.edgesReduce selections to their endsShift+Alt+S (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.select.orLeapLeap or selectS (editorTextFocus && dance.mode == 'normal')S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.showIndicesShow selection indices +selections.splitLines.orLeap.backwardLeap or select backwardAlt+S (editorTextFocus && dance.mode == 'normal')Alt+S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.sortSort selections -selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal') +selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal')Shift+S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.splitLinesSplit selections at line boundaries -selections.toggleIndicesToggle selection indicesEnter (editorTextFocus && dance.mode == 'normal') -selections.trimLinesTrim linesAlt+X (editorTextFocus && dance.mode == 'normal') -selections.trimWhitespaceTrim whitespaceShift+- (editorTextFocus && dance.mode == 'normal') -selections.rotateselections.rotate.bothRotate selections clockwiseShift+Alt+0 (editorTextFocus && dance.mode == 'normal') -selections.rotate.contentsRotate selections clockwise (contents only) +selections.toggleIndicesToggle selection indicesEnter (editorTextFocus && dance.behavior == 'dance' && dance.mode == 'normal') +selections.trimLinesTrim linesAlt+X (editorTextFocus && dance.mode == 'normal')Alt+X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.trimWhitespaceTrim whitespaceShift+- (editorTextFocus && dance.mode == 'normal')Shift+- (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.rotateselections.rotate.bothRotate selections clockwiseShift+Alt+0 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.rotate.contentsRotate selections clockwise (contents only)Shift+Alt+0 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+Alt+0 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.rotate.selectionsRotate selections clockwise (selections only)Shift+0 (editorTextFocus && dance.mode == 'normal') -selections.rotate.both.reverseRotate selections counter-clockwiseShift+Alt+9 (editorTextFocus && dance.mode == 'normal') -selections.rotate.contents.reverseRotate selections counter-clockwise (contents only) -selections.rotate.selections.reverseRotate selections counter-clockwise (selections only)Shift+9 (editorTextFocus && dance.mode == 'normal') +selections.rotate.both.reverseRotate selections counter-clockwiseShift+Alt+9 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.rotate.contents.reverseRotate selections counter-clockwise (contents only)Shift+Alt+9 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+Alt+9 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.rotate.selections.reverseRotate selections counter-clockwise (selections only)Shift+9 (editorTextFocus && dance.mode == 'normal')Shift+9 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') viewview.lineReveals a position based on the main cursor @@ -283,18 +283,18 @@ Specify `all` to paste all contents next to each selection. | Title | Identifier | Keybinding | Commands | | ---------------------------------- | ------------------------ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | | Pick register and replace | `selectRegister-insert` | `c-r` (kakoune: normal), `c-r` (kakoune: insert) | `[".selectRegister", { +register }], [".edit.insert", { ... }]` | -| Paste before | `paste.before` | | `[".edit.insert", { handleNewLine: true, where: "start", ... }]` | -| Paste after | `paste.after` | | `[".edit.insert", { handleNewLine: true, where: "end" , ... }]` | -| Paste before and select | `paste.before.select` | `s-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "start", shift: "select", ... }]` | -| Paste after and select | `paste.after.select` | `p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , shift: "select", ... }]` | +| Paste before | `paste.before` | `s-p` (helix: select) | `[".edit.insert", { handleNewLine: true, where: "start", ... }]` | +| Paste after | `paste.after` | `p` (helix: select) | `[".edit.insert", { handleNewLine: true, where: "end" , ... }]` | +| Paste before and select | `paste.before.select` | `s-p` (core: normal) | `[".edit.insert", { handleNewLine: true, where: "start", shift: "select", ... }]` | +| Paste after and select | `paste.after.select` | `p` (core: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , shift: "select", ... }]` | | Paste all before | `pasteAll.before` | | `[".edit.insert", { handleNewLine: true, where: "start", all: true, ... }]` | | Paste all after | `pasteAll.after` | | `[".edit.insert", { handleNewLine: true, where: "end" , all: true, ... }]` | | Paste all before and select | `pasteAll.before.select` | `s-a-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "start", all: true, shift: "select", ... }]` | | Paste all after and select | `pasteAll.after.select` | `a-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , all: true, shift: "select", ... }]` | -| Delete | `delete` | `a-d` (kakoune: normal) | `[".edit.insert", { register: "_", ... }]` | +| Delete | `delete` | `a-d` (core: normal), `a-d` (helix: select) | `[".edit.insert", { register: "_", ... }]` | | Delete and switch to Insert | `delete-insert` | `a-c` (kakoune: normal) | `[".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | -| Copy and delete | `yank-delete` | `d` (kakoune: normal), `d` (helix: select) | `[".selections.saveText", { +register }], [".edit.insert", { register: "_", ... }]` | -| Copy, delete and switch to Insert | `yank-delete-insert` | `c` (kakoune: normal), `c` (helix: select) | `[".selections.saveText", { +register }], [".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | +| Copy and delete | `yank-delete` | `d` (core: normal), `d` (helix: select) | `[".selections.saveText", { +register }], [".edit.insert", { register: "_", ... }]` | +| Copy, delete and switch to Insert | `yank-delete-insert` | `c` (core: normal), `c` (helix: select) | `[".selections.saveText", { +register }], [".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | | Copy and replace | `yank-replace` | `s-r` (kakoune: normal) | `[".selections.saveText", { register: "tmp" }], [".edit.insert"], [".updateRegister", { copyFrom: "tmp", ... }]` | This command: @@ -319,7 +319,8 @@ Join lines. This command: - takes an argument `separator` of type `string`. -Default keybinding: `a-j` (kakoune: normal) +Default keybinding: `a-j` (core: normal) +`s-j` (helix: select) @@ -331,7 +332,8 @@ Join lines and select inserted separators. This command: - takes an argument `separator` of type `string`. -Default keybinding: `s-a-j` (kakoune: normal) +Default keybinding: `s-a-j` (core: normal) +`s-a-j` (helix: select) @@ -343,7 +345,8 @@ Indent selected lines. This command: - may be repeated with a given number of repetitions. -Default keybinding: `>` (kakoune: normal) +Default keybinding: `>` (core: normal) +`>` (helix: select) @@ -379,7 +382,8 @@ Deindent selected lines (including incomplete indent). This command: - may be repeated with a given number of repetitions. -Default keybinding: `<` (kakoune: normal) +Default keybinding: `<` (core: normal) +`<` (helix: select) @@ -389,7 +393,8 @@ Transform to lower case. -Default keybinding: `` ` `` (kakoune: normal) +Default keybinding: `` ` `` (core: normal) +`` ` `` (helix: select) @@ -400,6 +405,8 @@ Transform to upper case. Default keybinding: `` s-` `` (kakoune: normal) +`` a-` `` (helix: normal) +`` a-` `` (helix: select) @@ -410,6 +417,8 @@ Swap case. Default keybinding: `` a-` `` (kakoune: normal) +`` s-` `` (helix: normal) +`` s-` `` (helix: select) @@ -422,7 +431,7 @@ This command: - may be repeated with a given number of repetitions. - takes an input `input` of type `string`. -Default keybinding: `r` (kakoune: normal) +Default keybinding: `r` (core: normal) @@ -437,7 +446,7 @@ before the first character of each selection. This command: - takes an argument `fill` of type `string`. -Default keybinding: `&` (kakoune: normal) +Default keybinding: `&` (core: normal) @@ -466,9 +475,9 @@ keep the current selections. #### Additional keybindings -| Title | Identifier | Keybinding | Commands | -| ------------------------------------------ | ---------------------- | ----------------------- | --------------------------------------------------------------------------------- | -| Insert new line above and switch to insert | `newLine.above.insert` | `s-o` (kakoune: normal) | `[".edit.newLine.above", { shift: "select" }], [".modes.insert.before", { ... }]` | +| Title | Identifier | Keybinding | Commands | +| ------------------------------------------ | ---------------------- | ------------------------------------------- | --------------------------------------------------------------------------------- | +| Insert new line above and switch to insert | `newLine.above.insert` | `s-o` (core: normal), `s-o` (helix: select) | `[".edit.newLine.above", { shift: "select" }], [".modes.insert.before", { ... }]` | This command: - may be repeated with a given number of repetitions. @@ -488,9 +497,9 @@ keep the current selections. #### Additional keybindings -| Title | Identifier | Keybinding | Commands | -| ------------------------------------------ | ---------------------- | --------------------- | --------------------------------------------------------------------------------- | -| Insert new line below and switch to insert | `newLine.below.insert` | `o` (kakoune: normal) | `[".edit.newLine.below", { shift: "select" }], [".modes.insert.before", { ... }]` | +| Title | Identifier | Keybinding | Commands | +| ------------------------------------------ | ---------------------- | --------------------------------------- | --------------------------------------------------------------------------------- | +| Insert new line below and switch to insert | `newLine.below.insert` | `o` (core: normal), `o` (helix: select) | `[".edit.newLine.below", { shift: "select" }], [".modes.insert.before", { ... }]` | This command: - may be repeated with a given number of repetitions. @@ -512,7 +521,7 @@ Undo. This command: - does not require an active text editor. -Default keybinding: `u` (kakoune: normal) +Default keybinding: `u` (core: normal) `u` (helix: select) @@ -525,7 +534,7 @@ Redo. This command: - does not require an active text editor. -Default keybinding: `s-u` (kakoune: normal) +Default keybinding: `s-u` (core: normal) `s-u` (helix: select) @@ -559,10 +568,10 @@ Default keybinding: `s-a-u` (kakoune: normal) Repeat last change. -| Title | Identifier | Keybinding | Commands | -| ---------------------------- | ------------------ | ----------------------- | ----------------------------------------------------------------------------- | -| Repeat last selection change | `repeat.selection` | | `[".history.repeat", { filter: "dance\\.(seek\|select\|selections)", +count }]` | -| Repeat last seek | `repeat.seek` | `a-.` (kakoune: normal) | `[".history.repeat", { filter: "dance\\.seek", +count }]` | +| Title | Identifier | Keybinding | Commands | +| ---------------------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------------------------- | +| Repeat last selection change | `repeat.selection` | | `[".history.repeat", { filter: "dance\\.(seek\|select\|selections)", +count }]` | +| Repeat last seek | `repeat.seek` | `a-.` (core: normal), `a-.` (helix: select) | `[".history.repeat", { filter: "dance\\.seek", +count }]` | This command: - may be repeated with a given number of repetitions. @@ -578,8 +587,8 @@ Repeat last edit without a command. This command: - may be repeated with a given number of repetitions. -Default keybinding: `.` (kakoune: normal) -`NumPad_Decimal` (kakoune: normal) +Default keybinding: `.` (core: normal) +`NumPad_Decimal` (core: normal) @@ -791,7 +800,7 @@ current document. This command: - takes an input `register` of type `string | Register`. -Default keybinding: `"` (kakoune: normal) +Default keybinding: `"` (core: normal) @@ -898,20 +907,20 @@ Set Dance mode. #### Variants -| Title | Identifier | Keybinding | Command | -| ------------------ | ------------ | ---------------------------------------------------- | ----------------------------------------------------------- | -| Set mode to Normal | `set.normal` | `escape` (kakoune: insert), `escape` (helix: select) | `[".modes.set", { mode: "normal" }], ["hideSuggestWidget"]` | -| Set mode to Insert | `set.insert` | | `[".modes.set", { mode: "insert" }]` | -| Set mode to Select | `set.select` | | `[".modes.set", { mode: "select" }]` | +| Title | Identifier | Keybinding | Command | +| ------------------ | ------------ | ---------------------------------------------------------------------- | ----------------------------------------------------------- | +| Set mode to Normal | `set.normal` | `escape` (core: insert), `escape` (helix: select), `v` (helix: select) | `[".modes.set", { mode: "normal" }], ["hideSuggestWidget"]` | +| Set mode to Insert | `set.insert` | | `[".modes.set", { mode: "insert" }]` | +| Set mode to Select | `set.select` | `v` (helix: normal) | `[".modes.set", { mode: "select" }]` | Other variants are provided to switch to insert mode: -| Title | Identifier | Keybinding | Commands | -| -------------------- | ------------------ | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Insert before | `insert.before` | `i` (kakoune: normal) | `[".selections.faceBackward", { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | -| Insert after | `insert.after` | `a` (kakoune: normal) | `[".selections.faceForward" , { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | -| Insert at line start | `insert.lineStart` | `s-i` (kakoune: normal) | `[".select.lineStart", { shift: "jump", skipBlank: true }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | -| Insert at line end | `insert.lineEnd` | `s-a` (kakoune: normal) | `[".select.lineEnd" , { shift: "jump" }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | +| Title | Identifier | Keybinding | Commands | +| -------------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Insert before | `insert.before` | `i` (core: normal), `i` (helix: select) | `[".selections.faceBackward", { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | +| Insert after | `insert.after` | `a` (core: normal), `a` (helix: select) | `[".selections.faceForward" , { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | +| Insert at line start | `insert.lineStart` | `s-i` (core: normal), `s-i` (helix: select) | `[".select.lineStart", { shift: "jump", skipBlank: true }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | +| Insert at line end | `insert.lineEnd` | `s-a` (core: normal), `s-a` (helix: select) | `[".select.lineEnd" , { shift: "jump" }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | This command: @@ -946,11 +955,11 @@ Search for patterns and replace or add selections. Search. -| Title | Identifier | Keybinding | Command | -| ------------------------ | ----------------- | ----------------------- | ------------------------------------------------------ | -| Search (extend) | `extend` | `?` (kakoune: normal) | `[".search", { shift: "extend", ... }]` | -| Search backward | `backward` | `a-/` (kakoune: normal) | `[".search", { direction: -1 , ... }]` | -| Search backward (extend) | `backward.extend` | `a-?` (kakoune: normal) | `[".search", { direction: -1, shift: "extend", ... }]` | +| Title | Identifier | Keybinding | Command | +| ------------------------ | ----------------- | -------------------------------------------- | ------------------------------------------------------ | +| Search (extend) | `extend` | `?` (kakoune: normal), `/` (helix: select) | `[".search", { shift: "extend", ... }]` | +| Search backward | `backward` | `a-/` (kakoune: normal), `?` (helix: normal) | `[".search", { direction: -1 , ... }]` | +| Search backward (extend) | `backward.extend` | `a-?` (kakoune: normal), `?` (helix: select) | `[".search", { direction: -1, shift: "extend", ... }]` | This command: - accepts a register (by default, it uses `slash`). @@ -959,8 +968,8 @@ This command: - takes an argument `add` of type `boolean`. - takes an argument `interactive` of type `boolean`. -Default keybinding: `/` (kakoune: normal) -`NumPad_Divide` (kakoune: normal) +Default keybinding: `/` (core: normal) +`NumPad_Divide` (core: normal) @@ -969,16 +978,16 @@ Default keybinding: `/` (kakoune: normal) Search current selection. -| Title | Identifier | Keybinding | Command | -| -------------------------------- | ----------------- | ---------------------------------------------------------- | --------------------------------------------------- | -| Search current selection (smart) | `selection.smart` | `*` (kakoune: normal), `NumPad_Multiply` (kakoune: normal) | `[".search.selection", { smart: true, +register }]` | +| Title | Identifier | Keybinding | Command | +| -------------------------------- | ----------------- | ---------------------------------------------------- | --------------------------------------------------- | +| Search current selection (smart) | `selection.smart` | `*` (core: normal), `NumPad_Multiply` (core: normal) | `[".search.selection", { smart: true, +register }]` | This command: - accepts a register (by default, it uses `slash`). - takes an argument `smart` of type `boolean`. -Default keybinding: `a-*` (kakoune: normal) -`a-NumPad_Multiply` (kakoune: normal) +Default keybinding: `a-*` (core: normal) +`a-NumPad_Multiply` (core: normal) @@ -987,18 +996,18 @@ Default keybinding: `a-*` (kakoune: normal) Select next match. -| Title | Identifier | Keybinding | Command | -| --------------------- | -------------- | ------------------------- | ----------------------------------------------------- | -| Add next match | `next.add` | `s-n` (kakoune: normal) | `[".search.next", { add: true, ... }]` | -| Select previous match | `previous` | `a-n` (kakoune: normal) | `[".search.next", { direction: -1 , ... }]` | -| Add previous match | `previous.add` | `s-a-n` (kakoune: normal) | `[".search.next", { direction: -1, add: true, ... }]` | +| Title | Identifier | Keybinding | Command | +| --------------------- | -------------- | ------------------------------------------------ | ----------------------------------------------------- | +| Add next match | `next.add` | `s-n` (kakoune: normal), `n` (helix: select) | `[".search.next", { add: true, ... }]` | +| Select previous match | `previous` | `a-n` (kakoune: normal), `s-n` (helix: normal) | `[".search.next", { direction: -1 , ... }]` | +| Add previous match | `previous.add` | `s-a-n` (kakoune: normal), `s-n` (helix: select) | `[".search.next", { direction: -1, add: true, ... }]` | This command: - accepts a register (by default, it uses `slash`). - may be repeated with a given number of repetitions. - takes an argument `add` of type `boolean`. -Default keybinding: `n` (kakoune: normal) +Default keybinding: `n` (core: normal) ## [`seek`](./seek.ts) @@ -1016,11 +1025,11 @@ Select to character (excluded). | Title | Identifier | Keybinding | Command | | ---------------------------------------- | -------------------------- | ------------------------------------------------ | ------------------------------------------------------------------- | | Extend to character (excluded) | `extend` | `s-t` (kakoune: normal), `t` (helix: select) | `[".seek", { shift: "extend" , ... }]` | -| Select to character (excluded, backward) | `backward` | `a-t` (kakoune: normal) | `[".seek", { direction: -1, ... }]` | +| Select to character (excluded, backward) | `backward` | `a-t` (kakoune: normal), `s-t` (helix: normal) | `[".seek", { direction: -1, ... }]` | | Extend to character (excluded, backward) | `extend.backward` | `s-a-t` (kakoune: normal), `s-t` (helix: select) | `[".seek", { shift: "extend", direction: -1, ... }]` | -| Select to character (included) | `included` | `f` (kakoune: normal) | `[".seek", { include: true , ... }]` | +| Select to character (included) | `included` | `f` (core: normal) | `[".seek", { include: true , ... }]` | | Extend to character (included) | `included.extend` | `s-f` (kakoune: normal), `f` (helix: select) | `[".seek", { include: true, shift: "extend" , ... }]` | -| Select to character (included, backward) | `included.backward` | `a-f` (kakoune: normal) | `[".seek", { include: true, direction: -1, ... }]` | +| Select to character (included, backward) | `included.backward` | `a-f` (kakoune: normal), `s-f` (helix: normal) | `[".seek", { include: true, direction: -1, ... }]` | | Extend to character (included, backward) | `included.extend.backward` | `s-a-f` (kakoune: normal), `s-f` (helix: select) | `[".seek", { include: true, shift: "extend", direction: -1, ... }]` | This command: @@ -1028,7 +1037,7 @@ This command: - takes an argument `include` of type `boolean`. - takes an input `input` of type `string`. -Default keybinding: `t` (kakoune: normal) +Default keybinding: `t` (core: normal) @@ -1065,15 +1074,15 @@ Select the word and following whitespaces on the right of the end of each select | Title | Identifier | Keybinding | Command | | -------------------------------------------- | ------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------- | | Extend to next word start | `word.extend` | `s-w` (kakoune: normal), `w` (helix: select) | `[".seek.word", { shift: "extend" , ... }]` | -| Select to previous word start | `word.backward` | `b` (kakoune: normal) | `[".seek.word", { direction: -1, ... }]` | +| Select to previous word start | `word.backward` | `b` (core: normal) | `[".seek.word", { direction: -1, ... }]` | | Extend to previous word start | `word.extend.backward` | `s-b` (kakoune: normal), `b` (helix: select) | `[".seek.word", { shift: "extend", direction: -1, ... }]` | -| Select to next non-whitespace word start | `word.ws` | `a-w` (kakoune: normal) | `[".seek.word", { ws: true , ... }]` | +| Select to next non-whitespace word start | `word.ws` | `a-w` (kakoune: normal), `s-w` (helix: normal) | `[".seek.word", { ws: true , ... }]` | | Extend to next non-whitespace word start | `word.ws.extend` | `s-a-w` (kakoune: normal), `s-w` (helix: select) | `[".seek.word", { ws: true, shift: "extend" , ... }]` | -| Select to previous non-whitespace word start | `word.ws.backward` | `a-b` (kakoune: normal) | `[".seek.word", { ws: true, direction: -1, ... }]` | +| Select to previous non-whitespace word start | `word.ws.backward` | `a-b` (kakoune: normal), `s-b` (helix: normal) | `[".seek.word", { ws: true, direction: -1, ... }]` | | Extend to previous non-whitespace word start | `word.ws.extend.backward` | `s-a-b` (kakoune: normal), `s-b` (helix: select) | `[".seek.word", { ws: true, shift: "extend", direction: -1, ... }]` | -| Select to next word end | `wordEnd` | `e` (kakoune: normal) | `[".seek.word", { stopAtEnd: true , ... }]` | +| Select to next word end | `wordEnd` | `e` (core: normal) | `[".seek.word", { stopAtEnd: true , ... }]` | | Extend to next word end | `wordEnd.extend` | `s-e` (kakoune: normal), `e` (helix: select) | `[".seek.word", { stopAtEnd: true , shift: "extend" , ... }]` | -| Select to next non-whitespace word end | `wordEnd.ws` | `a-e` (kakoune: normal) | `[".seek.word", { stopAtEnd: true , ws: true , ... }]` | +| Select to next non-whitespace word end | `wordEnd.ws` | `a-e` (kakoune: normal), `s-e` (helix: normal) | `[".seek.word", { stopAtEnd: true , ws: true , ... }]` | | Extend to next non-whitespace word end | `wordEnd.ws.extend` | `s-a-e` (kakoune: normal), `s-e` (helix: select) | `[".seek.word", { stopAtEnd: true , ws: true, shift: "extend" , ... }]` | This command: @@ -1081,7 +1090,7 @@ This command: - takes an argument `stopAtEnd` of type `boolean`. - takes an argument `ws` of type `boolean`. -Default keybinding: `w` (kakoune: normal) +Default keybinding: `w` (core: normal) @@ -1174,28 +1183,32 @@ Default keybinding: `%` (kakoune: normal) -### [`select.vertically`](./select.ts#L31-L64) +### [`select.vertically`](./select.ts#L31-L68) Select vertically. #### Variants -| Title | Identifier | Keybinding | Command | +| Title | Identifier | Keybinding | Command | | ----------- | ------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | -| Jump down | `down.jump` | `j` (kakoune: normal) , `down` (kakoune: normal) | `[".select.vertically", { direction: 1, shift: "jump" , ... }]` | +| Jump down | `down.jump` | `j` (core: normal) , `down` (core: normal) | `[".select.vertically", { direction: 1, shift: "jump" , ... }]` | | Extend down | `down.extend` | `s-j` (kakoune: normal), `s-down` (kakoune: normal), `j` (helix: select), `down` (helix: select) | `[".select.vertically", { direction: 1, shift: "extend", ... }]` | -| Jump up | `up.jump` | `k` (kakoune: normal) , `up` (kakoune: normal) | `[".select.vertically", { direction: -1, shift: "jump" , ... }]` | +| Jump up | `up.jump` | `k` (core: normal) , `up` (core: normal) | `[".select.vertically", { direction: -1, shift: "jump" , ... }]` | | Extend up | `up.extend` | `s-k` (kakoune: normal), `s-up` (kakoune: normal) , `k` (helix: select), `up` (helix: select) | `[".select.vertically", { direction: -1, shift: "extend", ... }]` | The following keybindings are also defined: -| Keybinding | Command | -| ------------------------------------------------ | -------------------------------------------------------------------------- | -| `c-f` (kakoune: normal), `c-f` (kakoune: insert) | `[".select.vertically", { direction: 1, by: "page" , shift: "jump" }]` | -| `c-d` (kakoune: normal), `c-d` (kakoune: insert) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "jump" }]` | -| `c-b` (kakoune: normal), `c-b` (kakoune: insert) | `[".select.vertically", { direction: -1, by: "page" , shift: "jump" }]` | -| `c-u` (kakoune: normal), `c-u` (kakoune: insert) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "jump" }]` | +| Keybinding | Command | +| -------------------------------------------| ---------------------------------------------------------------------------- | +| `c-f` (core: normal), `c-f` (core: insert) | `[".select.vertically", { direction: 1, by: "page" , shift: "jump" }]` | +| `c-d` (core: normal), `c-d` (core: insert) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "jump" }]` | +| `c-b` (core: normal), `c-b` (core: insert) | `[".select.vertically", { direction: -1, by: "page" , shift: "jump" }]` | +| `c-u` (core: normal), `c-u` (core: insert) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "jump" }]` | +| `c-f` (helix: select) | `[".select.vertically", { direction: 1, by: "page" , shift: "extend" }]` | +| `c-d` (helix: select) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "extend" }]` | +| `c-b` (helix: select) | `[".select.vertically", { direction: -1, by: "page" , shift: "extend" }]` | +| `c-u` (helix: select) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "extend" }]` | This command: - may be repeated with a given number of repetitions. @@ -1204,7 +1217,7 @@ This command: -### [`select.horizontally`](./select.ts#L217-L239) +### [`select.horizontally`](./select.ts#L221-L243) Select horizontally. @@ -1213,9 +1226,9 @@ Select horizontally. | Title | Identifier | Keybinding | Command | | ------------ | -------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -| Jump right | `right.jump` | `l` (kakoune: normal) , `right` (kakoune: normal) | `[".select.horizontally", { direction: 1, shift: "jump" , ... }]` | +| Jump right | `right.jump` | `l` (core: normal) , `right` (core: normal) | `[".select.horizontally", { direction: 1, shift: "jump" , ... }]` | | Extend right | `right.extend` | `s-l` (kakoune: normal), `s-right` (kakoune: normal), `l` (helix: select), `right` (helix: select) | `[".select.horizontally", { direction: 1, shift: "extend", ... }]` | -| Jump left | `left.jump` | `h` (kakoune: normal) , `left` (kakoune: normal) | `[".select.horizontally", { direction: -1, shift: "jump" , ... }]` | +| Jump left | `left.jump` | `h` (core: normal) , `left` (core: normal) | `[".select.horizontally", { direction: -1, shift: "jump" , ... }]` | | Extend left | `left.extend` | `s-h` (kakoune: normal), `s-left` (kakoune: normal), `h` (helix: select), `left` (helix: select) | `[".select.horizontally", { direction: -1, shift: "extend", ... }]` | This command: @@ -1224,7 +1237,7 @@ This command: -### [`select.to`](./select.ts#L286-L304) +### [`select.to`](./select.ts#L290-L308) Select to. @@ -1235,7 +1248,7 @@ line. If no count is specified, this command will shift open the `goto` menu. | Title | Identifier | Keybinding | Command | | --------- | ----------- | -------------------------------------------- | ------------------------------------------ | -| Go to | `to.jump` | `g` (kakoune: normal) | `[".select.to", { shift: "jump" , ... }]` | +| Go to | `to.jump` | `g` (core: normal) | `[".select.to", { shift: "jump" , ... }]` | | Extend to | `to.extend` | `s-g` (kakoune: normal), `g` (helix: select) | `[".select.to", { shift: "extend", ... }]` | This command: @@ -1244,7 +1257,7 @@ This command: -### [`select.line.below`](./select.ts#L314-L317) +### [`select.line.below`](./select.ts#L318-L321) Select line below. @@ -1253,16 +1266,19 @@ This command: -### [`select.line.below.extend`](./select.ts#L342-L345) +### [`select.line.below.extend`](./select.ts#L346-L350) Extend to line below. This command: - may be repeated with a given number of repetitions. +Default keybinding: `x` (helix: normal) +`x` (helix: select) + -### [`select.line.above`](./select.ts#L372-L375) +### [`select.line.above`](./select.ts#L377-L380) Select line above. @@ -1271,7 +1287,7 @@ This command: -### [`select.line.above.extend`](./select.ts#L399-L402) +### [`select.line.above.extend`](./select.ts#L404-L407) Extend to line above. @@ -1280,32 +1296,32 @@ This command: -### [`select.lineStart`](./select.ts#L448-L470) +### [`select.lineStart`](./select.ts#L453-L475) Select to line start. #### Variants -| Title | Identifier | Keybinding | Command | -| -------------------- | ------------------ | ----------------------------------------------------- | ------------------------------------------------------------------ | -| Jump to line start | `lineStart.jump` | | `[".select.lineStart", { shift: "jump" , ... }]` | -| Extend to line start | `lineStart.extend` | `s-a-h` (kakoune: normal), `s-home` (kakoune: normal) | `[".select.lineStart", { shift: "extend", ... }]` | -| Jump to line start (skip blank) | `lineStart.skipBlank.jump` | | `[".select.lineStart", { skipBlank: true, shift: "jump" , ... }]` | -| Extend to line start (skip blank) | `lineStart.skipBlank.extend` | | `[".select.lineStart", { skipBlank: true, shift: "extend", ... }]` | -| Jump to first line | `firstLine.jump` | | `[".select.lineStart", { count: 0, shift: "jump" , ... }]` | -| Extend to first line | `firstLine.extend` | | `[".select.lineStart", { count: 0, shift: "extend", ... }]` | +| Title | Identifier | Keybinding | Command | +| -------------------- | ------------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| Jump to line start | `lineStart.jump` | | `[".select.lineStart", { shift: "jump" , ... }]` | +| Extend to line start | `lineStart.extend` | `s-a-h` (kakoune: normal), `s-home` (kakoune: normal), `home` (helix: select) | `[".select.lineStart", { shift: "extend", ... }]` | +| Jump to line start (skip blank) | `lineStart.skipBlank.jump` | | `[".select.lineStart", { skipBlank: true, shift: "jump" , ... }]` | +| Extend to line start (skip blank) | `lineStart.skipBlank.extend` | | `[".select.lineStart", { skipBlank: true, shift: "extend", ... }]` | +| Jump to first line | `firstLine.jump` | | `[".select.lineStart", { count: 0, shift: "jump" , ... }]` | +| Extend to first line | `firstLine.extend` | | `[".select.lineStart", { count: 0, shift: "extend", ... }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `skipBlank` of type `boolean`. Default keybinding: `a-h` (kakoune: normal) -`home` (kakoune: normal) +`home` (core: normal) -### [`select.lineEnd`](./select.ts#L495-L517) +### [`select.lineEnd`](./select.ts#L500-L522) Select to line end. @@ -1313,22 +1329,22 @@ Select to line end. #### Variants -| Title | Identifier | Keybinding | Command | -| ------------------------ | -------------------- | ---------------------------------------------------- | --------------------------------------------------------------- | -| Extend to line end | `lineEnd.extend` | `s-a-l` (kakoune: normal), `s-end` (kakoune: normal) | `[".select.lineEnd", { shift: "extend", ... }]` | -| Jump to last character | `documentEnd.jump` | | `[".select.lineEnd", { count: MAX_INT, shift: "jump" , ... }]` | -| Extend to last character | `documentEnd.extend` | | `[".select.lineEnd", { count: MAX_INT, shift: "extend", ... }]` | +| Title | Identifier | Keybinding | Command | +| ------------------------ | -------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------- | +| Extend to line end | `lineEnd.extend` | `s-a-l` (kakoune: normal), `s-end` (kakoune: normal), `end` (helix: select) | `[".select.lineEnd", { shift: "extend", ... }]` | +| Jump to last character | `documentEnd.jump` | | `[".select.lineEnd", { count: MAX_INT, shift: "jump" , ... }]` | +| Extend to last character | `documentEnd.extend` | | `[".select.lineEnd", { count: MAX_INT, shift: "extend", ... }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `lineBreak` of type `boolean`. Default keybinding: `a-l` (kakoune: normal) -`end` (kakoune: normal) +`end` (core: normal) -### [`select.lastLine`](./select.ts#L545-L555) +### [`select.lastLine`](./select.ts#L550-L560) Select to last line. @@ -1341,7 +1357,7 @@ Select to last line. -### [`select.firstVisibleLine`](./select.ts#L566-L576) +### [`select.firstVisibleLine`](./select.ts#L571-L581) Select to first visible line. @@ -1354,7 +1370,7 @@ Select to first visible line. -### [`select.middleVisibleLine`](./select.ts#L583-L593) +### [`select.middleVisibleLine`](./select.ts#L588-L598) Select to middle visible line. @@ -1367,7 +1383,7 @@ Select to middle visible line. -### [`select.lastVisibleLine`](./select.ts#L600-L610) +### [`select.lastVisibleLine`](./select.ts#L605-L615) Select to last visible line. @@ -1392,7 +1408,8 @@ Copy selections text. This command: - accepts a register (by default, it uses `dquote`). -Default keybinding: `y` (kakoune: normal) +Default keybinding: `y` (core: normal) +`y` (helix: select) @@ -1445,45 +1462,44 @@ Default keybinding: `a-z` (kakoune: normal) -### [`selections.pipe`](./selections.ts#L241-L263) +### [`selections.pipe`](./selections.ts#L241-L262) Pipe selections. Run the specified command or code with the contents of each selection, and save the result to a register. - See https://github.com/mawww/kakoune/blob/master/doc/pages/keys.asciidoc#changes-through-external-programs #### Additional commands -| Title | Identifier | Keybinding | Commands | -| ------------------- | -------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------- | -| Pipe and replace | `pipe.replace` | `\|` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", ... }]` | -| Pipe and append | `pipe.append` | `!` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "end" , shift: "select", ... }]` | -| Pipe and prepend | `pipe.prepend` | `a-!` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "start", shift: "select", ... }]` | +| Title | Identifier | Keybinding | Commands | +| ------------------- | -------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| Pipe and replace | `pipe.replace` | `\|` (core: normal), `\|` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", ... }]` | +| Pipe and append | `pipe.append` | `!` (core: normal), `!` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "end" , shift: "select", ... }]` | +| Pipe and prepend | `pipe.prepend` | `a-!` (core: normal), `a-!` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "start", shift: "select", ... }]` | This command: - accepts a register (by default, it uses `pipe`). - takes an input `expression` of type `string`. -Default keybinding: `a-|` (kakoune: normal) +Default keybinding: `a-|` (core: normal) +`a-|` (helix: select) -### [`selections.filter`](./selections.ts#L291-L313) +### [`selections.filter`](./selections.ts#L290-L311) Filter selections. - #### Variants -| Title | Identifier | Keybinding | Commands | -| -------------------------- | ----------------------- | --------------------------| ------------------------------------------------------------------------ | -| Keep matching selections | `filter.regexp` | `a-k` (kakoune: normal) | `[".selections.filter", { defaultExpression: "/" , ... }]` | -| Clear matching selections | `filter.regexp.inverse` | `s-a-k` (kakoune: normal) | `[".selections.filter", { defaultExpression: "/", inverse: true, ... }]` | -| Clear secondary selections | `clear.secondary` | `,` (kakoune: normal) | `[".selections.filter", { expression: "i === count" , ... }]` | -| Clear main selections | `clear.main` | `a-,` (kakoune: normal) | `[".selections.filter", { expression: "i !== count" , ... }]` | +| Title | Identifier | Keybinding | Commands | +| -------------------------- | ----------------------- | ----------------------------------------------- | ------------------------------------------------------------------------ | +| Keep matching selections | `filter.regexp` | `a-k` (core: normal), `a-k` (helix: select) | `[".selections.filter", { defaultExpression: "/" , ... }]` | +| Clear matching selections | `filter.regexp.inverse` | `s-a-k` (core: normal), `s-a-k` (helix: select) | `[".selections.filter", { defaultExpression: "/", inverse: true, ... }]` | +| Clear secondary selections | `clear.secondary` | `,` (core: normal), `,` (helix: select) | `[".selections.filter", { expression: "i === count" , ... }]` | +| Clear main selections | `clear.main` | `a-,` (core: normal), `a-,` (helix: select) | `[".selections.filter", { expression: "i !== count" , ... }]` | This command: - accepts an argument of type `{ expression?: string }`. @@ -1492,19 +1508,20 @@ This command: - takes an argument `interactive` of type `boolean`. - takes an argument `inverse` of type `boolean`. -Default keybinding: `$` (kakoune: normal) +Default keybinding: `$` (core: normal) +`$` (helix: select) -### [`selections.select`](./selections.ts#L346-L360) +### [`selections.select`](./selections.ts#L344-L358) Select within selections. #### Variants -| Title | Identifier | Keybinding | Command | -| -------------- | --------------- | --------------------- | ------------------------------------------------------------------------------------------------- | -| Leap or select | `select.orLeap` | `s` (kakoune: normal) | `[".ifEmpty", { then: [[".seek.leap", { ... }]], otherwise: [[".selections.select", { ... }]] }]` | +| Title | Identifier | Keybinding | Command | +| -------------- | --------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------- | +| Leap or select | `select.orLeap` | `s` (core: normal), `s` (helix: select) | `[".ifEmpty", { then: [[".seek.leap", { ... }]], otherwise: [[".selections.select", { ... }]] }]` | This command: - accepts an argument of type `{ re?: string | RegExp }`. @@ -1512,7 +1529,7 @@ This command: -### [`selections.split`](./selections.ts#L379-L390) +### [`selections.split`](./selections.ts#L377-L388) Split selections. @@ -1522,19 +1539,20 @@ This command: - takes an argument `excludeEmpty` of type `boolean`. - takes an argument `interactive` of type `boolean`. -Default keybinding: `s-s` (kakoune: normal) +Default keybinding: `s-s` (core: normal) +`s-s` (helix: select) -### [`selections.splitLines`](./selections.ts#L415-L431) +### [`selections.splitLines`](./selections.ts#L413-L429) Split selections at line boundaries. #### Variants -| Title | Identifier | Keybinding | Command | -| ----------------------- | ---------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------- | -| Leap or select backward | `splitLines.orLeap.backward` | `a-s` (kakoune: normal) | `[".ifEmpty", { then: [[".seek.leap", { direction: -1, ... }]], otherwise: [[".selections.splitLines", { ... }]] }]` | +| Title | Identifier | Keybinding | Command | +| ----------------------- | ---------------------------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| Leap or select backward | `splitLines.orLeap.backward` | `a-s` (core: normal), `a-s` (helix: select) | `[".ifEmpty", { then: [[".seek.leap", { direction: -1, ... }]], otherwise: [[".selections.splitLines", { ... }]] }]` | This command: - may be repeated with a given number of repetitions. @@ -1542,7 +1560,7 @@ This command: -### [`selections.expandToLines`](./selections.ts#L474-L481) +### [`selections.expandToLines`](./selections.ts#L472-L479) Expand to lines. @@ -1551,10 +1569,12 @@ Expand selections to contain full lines (including end-of-line characters). Default keybinding: `x` (kakoune: normal) +`s-x` (helix: normal) +`s-x` (helix: select) -### [`selections.trimLines`](./selections.ts#L508-L515) +### [`selections.trimLines`](./selections.ts#L506-L513) Trim lines. @@ -1562,11 +1582,12 @@ Trim selections to only contain full lines (from start to line break). -Default keybinding: `a-x` (kakoune: normal) +Default keybinding: `a-x` (core: normal) +`a-x` (helix: select) -### [`selections.trimWhitespace`](./selections.ts#L540-L547) +### [`selections.trimWhitespace`](./selections.ts#L538-L545) Trim whitespace. @@ -1574,11 +1595,12 @@ Trim whitespace at beginning and end of selections. -Default keybinding: `_` (kakoune: normal) +Default keybinding: `_` (core: normal) +`_` (helix: select) -### [`selections.reduce`](./selections.ts#L566-L585) +### [`selections.reduce`](./selections.ts#L564-L583) Reduce selections to their cursor. @@ -1594,11 +1616,12 @@ This command: - takes an argument `empty` of type `boolean`. - takes an argument `where` of type `"active" | "anchor" | "start" | "end" | "both"`. -Default keybinding: `;` (kakoune: normal) +Default keybinding: `;` (core: normal) +`;` (helix: select) -### [`selections.changeDirection`](./selections.ts#L647-L662) +### [`selections.changeDirection`](./selections.ts#L645-L660) Change direction of selections. @@ -1612,11 +1635,12 @@ Change direction of selections. | Backward selections | `faceBackward` | | `[".selections.changeDirection", { direction: -1 }]` | -Default keybinding: `a-;` (kakoune: normal) +Default keybinding: `a-;` (core: normal) +`a-;` (helix: select) -### [`selections.changeOrder`](./selections.ts#L687-L701) +### [`selections.changeOrder`](./selections.ts#L685-L699) Reverse selections. @@ -1630,7 +1654,7 @@ Reverse selections. -### [`selections.sort`](./selections.ts#L714-L726) +### [`selections.sort`](./selections.ts#L712-L724) Sort selections. @@ -1641,7 +1665,7 @@ This command: -### [`selections.copy`](./selections.ts#L799-L817) +### [`selections.copy`](./selections.ts#L797-L815) Copy selections below. @@ -1659,7 +1683,7 @@ Default keybinding: `s-c` (kakoune: normal) -### [`selections.merge`](./selections.ts#L851-L856) +### [`selections.merge`](./selections.ts#L849-L854) Merge contiguous selections. @@ -1669,13 +1693,13 @@ Default keybinding: `a-_` (kakoune: normal) -### [`selections.open`](./selections.ts#L860-L863) +### [`selections.open`](./selections.ts#L858-L861) Open selected file. -### [`selections.toggleIndices`](./selections.ts#L876-L893) +### [`selections.toggleIndices`](./selections.ts#L874-L891) Toggle selection indices. @@ -1718,38 +1742,42 @@ Default keybinding: `a-)` (kakoune: normal) -### [`selections.rotate.contents`](./selections.rotate.ts#L28-L37) +### [`selections.rotate.contents`](./selections.rotate.ts#L28-L39) Rotate selections clockwise (contents only). + The following command is also available: -| Title | Identifier | Command | -| --------------------------------------------------- | ------------------ | ---------------------------------------------------- | -| Rotate selections counter-clockwise (contents only) | `contents.reverse` | `[".selections.rotate.contents", { reverse: true }]` | +| Title | Identifier | Keybinding | Command | +| --------------------------------------------------- | ------------------ | -------------------------------------------- | ---------------------------------------------------- | +| Rotate selections counter-clockwise (contents only) | `contents.reverse` | `a-(` (helix: normal), `a-(` (helix: select) | `[".selections.rotate.contents", { reverse: true }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `reverse` of type `boolean`. +Default keybinding: `a-)` (helix: normal) +`a-)` (helix: select) + -### [`selections.rotate.selections`](./selections.rotate.ts#L45-L56) +### [`selections.rotate.selections`](./selections.rotate.ts#L47-L58) Rotate selections clockwise (selections only). The following keybinding is also available: -| Title | Identifier | Keybinding | Command | -| ----------------------------------------------------- | -------------------- | --------------------- | ------------------------------------------------------ | -| Rotate selections counter-clockwise (selections only) | `selections.reverse` | `(` (kakoune: normal) | `[".selections.rotate.selections", { reverse: true }]` | +| Title | Identifier | Keybinding | Command | +| ----------------------------------------------------- | -------------------- | --------------------------------------- | ------------------------------------------------------ | +| Rotate selections counter-clockwise (selections only) | `selections.reverse` | `(` (core: normal), `(` (helix: select) | `[".selections.rotate.selections", { reverse: true }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `reverse` of type `boolean`. -Default keybinding: `)` (kakoune: normal) +Default keybinding: `)` (core: normal) ## [`view`](./view.ts) @@ -1757,10 +1785,10 @@ Moving the editor view. #### Predefined keybindings -| Title | Keybinding | Command | -| ----------------------- | ----------------------- | ---------------------------------------------------- | -| Show view menu | `v` (kakoune: normal) | `[".openMenu", { menu: "view", ... }]` | -| Show view menu (locked) | `s-v` (kakoune: normal) | `[".openMenu", { menu: "view", locked: true, ... }]` | +| Title | Keybinding | Command | +| ----------------------- | --------------------------------------------------------------------- | ---------------------------------------------------- | +| Show view menu | `v` (kakoune: normal), `z` (helix: normal), `z` (helix: select) | `[".openMenu", { menu: "view", ... }]` | +| Show view menu (locked) | `s-v` (kakoune: normal), `s-z` (helix: normal), `s-z` (helix: select) | `[".openMenu", { menu: "view", locked: true, ... }]` | diff --git a/src/commands/edit.ts b/src/commands/edit.ts index 8e76a36f..24db4a16 100644 --- a/src/commands/edit.ts +++ b/src/commands/edit.ts @@ -32,18 +32,18 @@ declare module "./edit"; * | Title | Identifier | Keybinding | Commands | * | ---------------------------------- | ------------------------ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | * | Pick register and replace | `selectRegister-insert` | `c-r` (kakoune: normal), `c-r` (kakoune: insert) | `[".selectRegister", { +register }], [".edit.insert", { ... }]` | - * | Paste before | `paste.before` | | `[".edit.insert", { handleNewLine: true, where: "start", ... }]` | - * | Paste after | `paste.after` | | `[".edit.insert", { handleNewLine: true, where: "end" , ... }]` | - * | Paste before and select | `paste.before.select` | `s-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "start", shift: "select", ... }]` | - * | Paste after and select | `paste.after.select` | `p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , shift: "select", ... }]` | + * | Paste before | `paste.before` | `s-p` (helix: select) | `[".edit.insert", { handleNewLine: true, where: "start", ... }]` | + * | Paste after | `paste.after` | `p` (helix: select) | `[".edit.insert", { handleNewLine: true, where: "end" , ... }]` | + * | Paste before and select | `paste.before.select` | `s-p` (core: normal) | `[".edit.insert", { handleNewLine: true, where: "start", shift: "select", ... }]` | + * | Paste after and select | `paste.after.select` | `p` (core: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , shift: "select", ... }]` | * | Paste all before | `pasteAll.before` | | `[".edit.insert", { handleNewLine: true, where: "start", all: true, ... }]` | * | Paste all after | `pasteAll.after` | | `[".edit.insert", { handleNewLine: true, where: "end" , all: true, ... }]` | * | Paste all before and select | `pasteAll.before.select` | `s-a-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "start", all: true, shift: "select", ... }]` | * | Paste all after and select | `pasteAll.after.select` | `a-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , all: true, shift: "select", ... }]` | - * | Delete | `delete` | `a-d` (kakoune: normal) | `[".edit.insert", { register: "_", ... }]` | + * | Delete | `delete` | `a-d` (core: normal), `a-d` (helix: select) | `[".edit.insert", { register: "_", ... }]` | * | Delete and switch to Insert | `delete-insert` | `a-c` (kakoune: normal) | `[".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | - * | Copy and delete | `yank-delete` | `d` (kakoune: normal), `d` (helix: select) | `[".selections.saveText", { +register }], [".edit.insert", { register: "_", ... }]` | - * | Copy, delete and switch to Insert | `yank-delete-insert` | `c` (kakoune: normal), `c` (helix: select) | `[".selections.saveText", { +register }], [".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | + * | Copy and delete | `yank-delete` | `d` (core: normal), `d` (helix: select) | `[".selections.saveText", { +register }], [".edit.insert", { register: "_", ... }]` | + * | Copy, delete and switch to Insert | `yank-delete-insert` | `c` (core: normal), `c` (helix: select) | `[".selections.saveText", { +register }], [".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | * | Copy and replace | `yank-replace` | `s-r` (kakoune: normal) | `[".selections.saveText", { register: "tmp" }], [".edit.insert"], [".updateRegister", { copyFrom: "tmp", ... }]` | */ export async function insert( @@ -133,7 +133,7 @@ export async function insert( /** * Join lines. * - * @keys `a-j` (kakoune: normal) + * @keys `a-j` (core: normal), `s-j` (helix: select) */ export function join(_: Context, separator?: Argument) { return joinLines(Selections.lines(), separator); @@ -142,7 +142,7 @@ export function join(_: Context, separator?: Argument) { /** * Join lines and select inserted separators. * - * @keys `s-a-j` (kakoune: normal) + * @keys `s-a-j` (core: normal), `s-a-j` (helix: select) */ export async function join_select(_: Context, separator?: Argument) { Selections.set(await joinLines(Selections.lines(), separator)); @@ -151,7 +151,7 @@ export async function join_select(_: Context, separator?: Argument) { /** * Indent selected lines. * - * @keys `>` (kakoune: normal) + * @keys `>` (core: normal), `>` (helix: select) */ export function indent(_: Context, repetitions: number) { return indentLines(Selections.lines(), repetitions, /* indentEmpty= */ false); @@ -178,7 +178,7 @@ export function deindent(_: Context, repetitions: number) { /** * Deindent selected lines (including incomplete indent). * - * @keys `<` (kakoune: normal) + * @keys `<` (core: normal), `<` (helix: select) */ export function deindent_withIncomplete(_: Context, repetitions: number) { return deindentLines(Selections.lines(), repetitions, /* deindentIncomplete= */ true); @@ -187,7 +187,7 @@ export function deindent_withIncomplete(_: Context, repetitions: number) { /** * Transform to lower case. * - * @keys `` ` `` (kakoune: normal) + * @keys `` ` `` (core: normal), `` ` `` (helix: select) */ export function case_toLower(_: Context) { return replace((text) => text.toLocaleLowerCase()); @@ -196,7 +196,7 @@ export function case_toLower(_: Context) { /** * Transform to upper case. * - * @keys `` s-` `` (kakoune: normal) + * @keys `` s-` `` (kakoune: normal), `` a-` `` (helix: normal), `` a-` `` (helix: select) */ export function case_toUpper(_: Context) { return replace((text) => text.toLocaleUpperCase()); @@ -205,7 +205,7 @@ export function case_toUpper(_: Context) { /** * Swap case. * - * @keys `` a-` `` (kakoune: normal) + * @keys `` a-` `` (kakoune: normal), `` s-` `` (helix: normal), `` s-` `` (helix: select) */ export function case_swap(_: Context) { return replace((text) => { @@ -225,7 +225,7 @@ export function case_swap(_: Context) { /** * Replace characters. * - * @keys `r` (kakoune: normal) + * @keys `r` (core: normal) */ export async function replaceCharacters( _: Context, @@ -280,7 +280,7 @@ export async function replaceCharacters( * Align selections, aligning the cursor of each selection by inserting spaces * before the first character of each selection. * - * @keys `&` (kakoune: normal) + * @keys `&` (core: normal) */ export function align(_: Context, fill: Argument = " ") { return edit((builder, selections) => { @@ -384,9 +384,9 @@ export function copyIndentation( * * #### Additional keybindings * - * | Title | Identifier | Keybinding | Commands | - * | ------------------------------------------ | ---------------------- | ----------------------- | --------------------------------------------------------------------------------- | - * | Insert new line above and switch to insert | `newLine.above.insert` | `s-o` (kakoune: normal) | `[".edit.newLine.above", { shift: "select" }], [".modes.insert.before", { ... }]` | + * | Title | Identifier | Keybinding | Commands | + * | ------------------------------------------ | ---------------------- | ------------------------------------------- | --------------------------------------------------------------------------------- | + * | Insert new line above and switch to insert | `newLine.above.insert` | `s-o` (core: normal), `s-o` (helix: select) | `[".edit.newLine.above", { shift: "select" }], [".modes.insert.before", { ... }]` | */ export function newLine_above( _: Context, @@ -422,9 +422,9 @@ export function newLine_above( * * #### Additional keybindings * - * | Title | Identifier | Keybinding | Commands | - * | ------------------------------------------ | ---------------------- | --------------------- | --------------------------------------------------------------------------------- | - * | Insert new line below and switch to insert | `newLine.below.insert` | `o` (kakoune: normal) | `[".edit.newLine.below", { shift: "select" }], [".modes.insert.before", { ... }]` | + * | Title | Identifier | Keybinding | Commands | + * | ------------------------------------------ | ---------------------- | --------------------------------------- | --------------------------------------------------------------------------------- | + * | Insert new line below and switch to insert | `newLine.below.insert` | `o` (core: normal), `o` (helix: select) | `[".edit.newLine.below", { shift: "select" }], [".modes.insert.before", { ... }]` | */ export function newLine_below( _: Context, diff --git a/src/commands/history.ts b/src/commands/history.ts index 80a6742c..1a18670f 100644 --- a/src/commands/history.ts +++ b/src/commands/history.ts @@ -15,7 +15,7 @@ declare module "./history"; /** * Undo. * - * @keys `u` (kakoune: normal), `u` (helix: select) + * @keys `u` (core: normal), `u` (helix: select) */ export function undo() { return vscode.commands.executeCommand("undo"); @@ -24,7 +24,7 @@ export function undo() { /** * Redo. * - * @keys `s-u` (kakoune: normal), `s-u` (helix: select) + * @keys `s-u` (core: normal), `s-u` (helix: select) */ export function redo() { return vscode.commands.executeCommand("redo"); @@ -53,10 +53,10 @@ export function redo_selections() { * * @noreplay * - * | Title | Identifier | Keybinding | Commands | - * | ---------------------------- | ------------------ | ----------------------- | ----------------------------------------------------------------------------- | - * | Repeat last selection change | `repeat.selection` | | `[".history.repeat", { filter: "dance\\.(seek|select|selections)", +count }]` | - * | Repeat last seek | `repeat.seek` | `a-.` (kakoune: normal) | `[".history.repeat", { filter: "dance\\.seek", +count }]` | + * | Title | Identifier | Keybinding | Commands | + * | ---------------------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------------------------- | + * | Repeat last selection change | `repeat.selection` | | `[".history.repeat", { filter: "dance\\.(seek|select|selections)", +count }]` | + * | Repeat last seek | `repeat.seek` | `a-.` (core: normal), `a-.` (helix: select) | `[".history.repeat", { filter: "dance\\.seek", +count }]` | */ export async function repeat( _: Context, @@ -98,7 +98,7 @@ export async function repeat( /** * Repeat last edit without a command. * - * @keys `.` (kakoune: normal), `NumPad_Decimal` (kakoune: normal) + * @keys `.` (core: normal), `NumPad_Decimal` (core: normal) * @noreplay */ export async function repeat_edit(_: Context, repetitions: number) { diff --git a/src/commands/layouts/azerty.fr.md b/src/commands/layouts/azerty.fr.md index c94c53ba..92fc138d 100644 --- a/src/commands/layouts/azerty.fr.md +++ b/src/commands/layouts/azerty.fr.md @@ -12,47 +12,47 @@ devdev.copyLastErrorMessageCopies the last encountered error message dev.setSelectionBehaviorSet the selection behavior of the specified mode editedit.alignAlign selectionsShift+7 (editorTextFocus && dance.mode == 'normal') -edit.case.swapSwap caseAlt+` (editorTextFocus && dance.mode == 'normal') -edit.case.toLowerTransform to lower case` (editorTextFocus && dance.mode == 'normal') -edit.case.toUpperTransform to upper caseShift+` (editorTextFocus && dance.mode == 'normal') -edit.copyIndentationCopy indentationShift+Alt+7 (editorTextFocus && dance.mode == 'normal') -edit.deindentDeindent selected linesShift+Alt+, (editorTextFocus && dance.mode == 'normal') -edit.deindent.withIncompleteDeindent selected lines (including incomplete indent)Shift+, (editorTextFocus && dance.mode == 'normal') -edit.deleteDeleteAlt+D (editorTextFocus && dance.mode == 'normal') -edit.delete-insertDelete and switch to InsertAlt+C (editorTextFocus && dance.mode == 'normal') -edit.newLine.above.insertInsert new line above and switch to insertShift+O (editorTextFocus && dance.mode == 'normal') -edit.newLine.below.insertInsert new line below and switch to insertO (editorTextFocus && dance.mode == 'normal') -edit.paste.afterPaste after +edit.case.swapSwap caseAlt+` (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.case.toLowerTransform to lower case` (editorTextFocus && dance.mode == 'normal')` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.case.toUpperTransform to upper caseShift+` (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Alt+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Alt+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.copyIndentationCopy indentationShift+Alt+7 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.deindentDeindent selected linesShift+Alt+, (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.deindent.withIncompleteDeindent selected lines (including incomplete indent)Shift+, (editorTextFocus && dance.mode == 'normal')Shift+, (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.deleteDeleteAlt+D (editorTextFocus && dance.mode == 'normal')Alt+D (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.delete-insertDelete and switch to InsertAlt+C (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.newLine.above.insertInsert new line above and switch to insertShift+O (editorTextFocus && dance.mode == 'normal')Shift+O (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.newLine.below.insertInsert new line below and switch to insertO (editorTextFocus && dance.mode == 'normal')O (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.paste.afterPaste afterP (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') edit.paste.after.selectPaste after and selectP (editorTextFocus && dance.mode == 'normal') -edit.paste.beforePaste before +edit.paste.beforePaste beforeShift+P (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') edit.paste.before.selectPaste before and selectShift+P (editorTextFocus && dance.mode == 'normal') edit.pasteAll.afterPaste all after -edit.pasteAll.after.selectPaste all after and selectAlt+P (editorTextFocus && dance.mode == 'normal') +edit.pasteAll.after.selectPaste all after and selectAlt+P (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') edit.pasteAll.beforePaste all before -edit.pasteAll.before.selectPaste all before and selectShift+Alt+P (editorTextFocus && dance.mode == 'normal') -edit.selectRegister-insertPick register and replaceCtrl+R (editorTextFocus && dance.mode == 'normal')Ctrl+R (editorTextFocus && dance.mode == 'insert') -edit.yank-deleteCopy and deleteD (editorTextFocus && dance.mode == 'normal')D (editorTextFocus && dance.mode == 'select') -edit.yank-delete-insertCopy, delete and switch to InsertC (editorTextFocus && dance.mode == 'normal')C (editorTextFocus && dance.mode == 'select') -edit.yank-replaceCopy and replaceShift+R (editorTextFocus && dance.mode == 'normal') -edit.indentIndent selected linesShift+. (editorTextFocus && dance.mode == 'normal') -edit.indent.withEmptyIndent selected lines (including empty lines)Shift+Alt+. (editorTextFocus && dance.mode == 'normal') -edit.insertInsert contents of registerShift+Alt+R (editorTextFocus && dance.mode == 'normal') -edit.joinJoin linesAlt+J (editorTextFocus && dance.mode == 'normal') -edit.join.selectJoin lines and select inserted separatorsShift+Alt+J (editorTextFocus && dance.mode == 'normal') -edit.newLine.aboveInsert new line above each selectionShift+Alt+O (editorTextFocus && dance.mode == 'normal') -edit.newLine.belowInsert new line below each selectionAlt+O (editorTextFocus && dance.mode == 'normal') +edit.pasteAll.before.selectPaste all before and selectShift+Alt+P (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.selectRegister-insertPick register and replaceCtrl+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Ctrl+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') +edit.yank-deleteCopy and deleteD (editorTextFocus && dance.mode == 'normal')D (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.yank-delete-insertCopy, delete and switch to InsertC (editorTextFocus && dance.mode == 'normal')C (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.yank-replaceCopy and replaceShift+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.indentIndent selected linesShift+. (editorTextFocus && dance.mode == 'normal')Shift+. (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.indent.withEmptyIndent selected lines (including empty lines)Shift+Alt+. (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.insertInsert contents of registerShift+Alt+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.joinJoin linesAlt+J (editorTextFocus && dance.mode == 'normal')Shift+J (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.join.selectJoin lines and select inserted separatorsShift+Alt+J (editorTextFocus && dance.mode == 'normal')Shift+Alt+J (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.newLine.aboveInsert new line above each selectionShift+Alt+O (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.newLine.belowInsert new line below each selectionAlt+O (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') edit.replaceCharactersReplace charactersR (editorTextFocus && dance.mode == 'normal') -historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal') +historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal')Alt+. (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') history.repeat.selectionRepeat last selection change -history.recording.playReplay recordingQ (editorTextFocus && dance.mode == 'normal') -history.recording.startStart recordingShift+Q (editorTextFocus && dance.mode == 'normal' && !dance.isRecording) -history.recording.stopStop recordingEscape (editorTextFocus && dance.mode == 'normal' && dance.isRecording)Shift+Q (editorTextFocus && dance.mode == 'normal' && dance.isRecording) -history.redoRedoShift+U (editorTextFocus && dance.mode == 'normal')Shift+U (editorTextFocus && dance.mode == 'select') -history.redo.selectionsRedo a change of selectionsShift+Alt+U (editorTextFocus && dance.mode == 'normal') +history.recording.playReplay recordingQ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +history.recording.startStart recordingShift+Q (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && !dance.isRecording) +history.recording.stopStop recordingEscape (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && dance.isRecording)Shift+Q (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && dance.isRecording) +history.redoRedoShift+U (editorTextFocus && dance.mode == 'normal')Shift+U (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +history.redo.selectionsRedo a change of selectionsShift+Alt+U (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') history.repeatRepeat last change history.repeat.editRepeat last edit without a command. (editorTextFocus && dance.mode == 'normal')NumPad_Decimal (editorTextFocus && dance.mode == 'normal') -history.undoUndoU (editorTextFocus && dance.mode == 'normal')U (editorTextFocus && dance.mode == 'select') -history.undo.selectionsUndo a change of selectionsAlt+U (editorTextFocus && dance.mode == 'normal') +history.undoUndoU (editorTextFocus && dance.mode == 'normal')U (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +history.undo.selectionsUndo a change of selectionsAlt+U (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') keybindingskeybindings.setupSet up Dance keybindings misccancelCancel Dance operationEscape (editorTextFocus && dance.mode == 'normal' && !dance.isRecording && !markersNavigationVisible)Escape (editorTextFocus && dance.mode == 'input') changeInputChange current input @@ -64,70 +64,70 @@ selections are empty selectRegisterSelect register for next commandShift+' (editorTextFocus && dance.mode == 'normal') updateCountUpdate Dance count updateRegisterUpdate the contents of a register -modesmodes.insert.afterInsert afterA (editorTextFocus && dance.mode == 'normal') -modes.insert.beforeInsert beforeI (editorTextFocus && dance.mode == 'normal') -modes.insert.lineEndInsert at line endShift+A (editorTextFocus && dance.mode == 'normal') -modes.insert.lineStartInsert at line startShift+I (editorTextFocus && dance.mode == 'normal') +modesmodes.insert.afterInsert afterA (editorTextFocus && dance.mode == 'normal')A (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.insert.beforeInsert beforeI (editorTextFocus && dance.mode == 'normal')I (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.insert.lineEndInsert at line endShift+A (editorTextFocus && dance.mode == 'normal')Shift+A (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.insert.lineStartInsert at line startShift+I (editorTextFocus && dance.mode == 'normal')Shift+I (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') modes.set.insertSet mode to Insert -modes.set.normalSet mode to NormalEscape (editorTextFocus && dance.mode == 'insert')Escape (editorTextFocus && dance.mode == 'select') -modes.set.selectSet mode to Select -modes.set.temporarily.insertTemporary Insert modeCtrl+V (editorTextFocus && dance.mode == 'normal') -modes.set.temporarily.normalTemporary Normal modeCtrl+V (editorTextFocus && dance.mode == 'insert') +modes.set.normalSet mode to NormalEscape (editorTextFocus && dance.mode == 'insert')Escape (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')V (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.set.selectSet mode to SelectV (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +modes.set.temporarily.insertTemporary Insert modeCtrl+V (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +modes.set.temporarily.normalTemporary Normal modeCtrl+V (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') modes.setSet Dance mode modes.set.temporarilySet Dance mode temporarily searchsearch.nextSelect next matchN (editorTextFocus && dance.mode == 'normal') search.searchSearch/ (editorTextFocus && dance.mode == 'normal')NumPad_Divide (editorTextFocus && dance.mode == 'normal') -search.backwardSearch backwardAlt+/ (editorTextFocus && dance.mode == 'normal') -search.backward.extendSearch backward (extend)Shift+Alt+/ (editorTextFocus && dance.mode == 'normal') -search.extendSearch (extend)Shift+/ (editorTextFocus && dance.mode == 'normal') -search.next.addAdd next matchShift+N (editorTextFocus && dance.mode == 'normal') -search.previousSelect previous matchAlt+N (editorTextFocus && dance.mode == 'normal') -search.previous.addAdd previous matchShift+Alt+N (editorTextFocus && dance.mode == 'normal') +search.backwardSearch backwardAlt+/ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +search.backward.extendSearch backward (extend)Shift+Alt+/ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +search.extendSearch (extend)Shift+/ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')/ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +search.next.addAdd next matchShift+N (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')N (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +search.previousSelect previous matchAlt+N (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+N (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +search.previous.addAdd previous matchShift+Alt+N (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+N (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') search.selection.smartSearch current selection (smart)Shift+8 (editorTextFocus && dance.mode == 'normal')NumPad_Multiply (editorTextFocus && dance.mode == 'normal') search.selectionSearch current selectionShift+Alt+8 (editorTextFocus && dance.mode == 'normal')Alt+NumPad_Multiply (editorTextFocus && dance.mode == 'normal') -seekseek.enclosingSelect to next enclosing characterM (editorTextFocus && dance.mode == 'normal') +seekseek.enclosingSelect to next enclosing characterM (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') seek.leapLeap forward seek.objectSelect object seek.seekSelect to character (excluded)T (editorTextFocus && dance.mode == 'normal') -seek.askObjectSelect whole objectAlt+A (editorTextFocus && dance.mode == 'normal')Alt+A (editorTextFocus && dance.mode == 'insert') -seek.askObject.endSelect to whole object end] (editorTextFocus && dance.mode == 'normal') -seek.askObject.end.extendExtend to whole object endShift+] (editorTextFocus && dance.mode == 'normal') -seek.askObject.innerSelect inner objectAlt+I (editorTextFocus && dance.mode == 'normal')Alt+I (editorTextFocus && dance.mode == 'insert') -seek.askObject.inner.endSelect to inner object endAlt+] (editorTextFocus && dance.mode == 'normal') -seek.askObject.inner.end.extendExtend to inner object endShift+Alt+] (editorTextFocus && dance.mode == 'normal') -seek.askObject.inner.startSelect to inner object startAlt+[ (editorTextFocus && dance.mode == 'normal') -seek.askObject.inner.start.extendExtend to inner object startShift+Alt+[ (editorTextFocus && dance.mode == 'normal') -seek.askObject.startSelect to whole object start[ (editorTextFocus && dance.mode == 'normal') -seek.askObject.start.extendExtend to whole object startShift+[ (editorTextFocus && dance.mode == 'normal') -seek.backwardSelect to character (excluded, backward)Alt+T (editorTextFocus && dance.mode == 'normal') -seek.enclosing.backwardSelect to previous enclosing characterAlt+M (editorTextFocus && dance.mode == 'normal') -seek.enclosing.extendExtend to next enclosing characterShift+M (editorTextFocus && dance.mode == 'normal') -seek.enclosing.extend.backwardExtend to previous enclosing characterShift+Alt+M (editorTextFocus && dance.mode == 'normal') -seek.extendExtend to character (excluded)Shift+T (editorTextFocus && dance.mode == 'normal')T (editorTextFocus && dance.mode == 'select') -seek.extend.backwardExtend to character (excluded, backward)Shift+Alt+T (editorTextFocus && dance.mode == 'normal')Shift+T (editorTextFocus && dance.mode == 'select') +seek.askObjectSelect whole objectAlt+A (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Alt+A (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') +seek.askObject.endSelect to whole object end] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.end.extendExtend to whole object endShift+] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.innerSelect inner objectAlt+I (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Alt+I (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') +seek.askObject.inner.endSelect to inner object endAlt+] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.inner.end.extendExtend to inner object endShift+Alt+] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.inner.startSelect to inner object startAlt+[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.inner.start.extendExtend to inner object startShift+Alt+[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.startSelect to whole object start[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.start.extendExtend to whole object startShift+[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.backwardSelect to character (excluded, backward)Alt+T (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+T (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.enclosing.backwardSelect to previous enclosing characterAlt+M (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.enclosing.extendExtend to next enclosing characterShift+M (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.enclosing.extend.backwardExtend to previous enclosing characterShift+Alt+M (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.extendExtend to character (excluded)Shift+T (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')T (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.extend.backwardExtend to character (excluded, backward)Shift+Alt+T (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+T (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.includedSelect to character (included)F (editorTextFocus && dance.mode == 'normal') -seek.included.backwardSelect to character (included, backward)Alt+F (editorTextFocus && dance.mode == 'normal') -seek.included.extendExtend to character (included)Shift+F (editorTextFocus && dance.mode == 'normal')F (editorTextFocus && dance.mode == 'select') -seek.included.extend.backwardExtend to character (included, backward)Shift+Alt+F (editorTextFocus && dance.mode == 'normal')Shift+F (editorTextFocus && dance.mode == 'select') +seek.included.backwardSelect to character (included, backward)Alt+F (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+F (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.included.extendExtend to character (included)Shift+F (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')F (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.included.extend.backwardExtend to character (included, backward)Shift+Alt+F (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+F (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.leap.backwardLeap backward seek.syntax.child.experimentalSelect child syntax object seek.syntax.next.experimentalSelect next syntax object seek.syntax.parent.experimentalSelect parent syntax object seek.syntax.previous.experimentalSelect previous syntax object seek.word.backwardSelect to previous word startB (editorTextFocus && dance.mode == 'normal') -seek.word.extendExtend to next word startShift+W (editorTextFocus && dance.mode == 'normal')W (editorTextFocus && dance.mode == 'select') -seek.word.extend.backwardExtend to previous word startShift+B (editorTextFocus && dance.mode == 'normal')B (editorTextFocus && dance.mode == 'select') -seek.word.wsSelect to next non-whitespace word startAlt+W (editorTextFocus && dance.mode == 'normal') -seek.word.ws.backwardSelect to previous non-whitespace word startAlt+B (editorTextFocus && dance.mode == 'normal') -seek.word.ws.extendExtend to next non-whitespace word startShift+Alt+W (editorTextFocus && dance.mode == 'normal')Shift+W (editorTextFocus && dance.mode == 'select') -seek.word.ws.extend.backwardExtend to previous non-whitespace word startShift+Alt+B (editorTextFocus && dance.mode == 'normal')Shift+B (editorTextFocus && dance.mode == 'select') +seek.word.extendExtend to next word startShift+W (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')W (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.word.extend.backwardExtend to previous word startShift+B (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')B (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.word.wsSelect to next non-whitespace word startAlt+W (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+W (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.word.ws.backwardSelect to previous non-whitespace word startAlt+B (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+B (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.word.ws.extendExtend to next non-whitespace word startShift+Alt+W (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+W (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.word.ws.extend.backwardExtend to previous non-whitespace word startShift+Alt+B (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+B (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.wordEndSelect to next word endE (editorTextFocus && dance.mode == 'normal') -seek.wordEnd.extendExtend to next word endShift+E (editorTextFocus && dance.mode == 'normal')E (editorTextFocus && dance.mode == 'select') -seek.wordEnd.wsSelect to next non-whitespace word endAlt+E (editorTextFocus && dance.mode == 'normal') -seek.wordEnd.ws.extendExtend to next non-whitespace word endShift+Alt+E (editorTextFocus && dance.mode == 'normal')Shift+E (editorTextFocus && dance.mode == 'select') +seek.wordEnd.extendExtend to next word endShift+E (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')E (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.wordEnd.wsSelect to next non-whitespace word endAlt+E (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+E (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.wordEnd.ws.extendExtend to next non-whitespace word endShift+Alt+E (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+E (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.syntax.experimentalSelect syntax object seek.wordSelect to next word startW (editorTextFocus && dance.mode == 'normal') -selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.mode == 'normal') +selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') select.firstVisibleLineSelect to first visible line select.horizontallySelect horizontally select.lastLineSelect to last line @@ -135,82 +135,82 @@ selections are empty select.line.aboveSelect line above select.line.above.extendExtend to line above select.line.belowSelect line below -select.line.below.extendExtend to line below -select.lineEndSelect to line endAlt+L (editorTextFocus && dance.mode == 'normal')End (editorTextFocus && dance.mode == 'normal') -select.lineStartSelect to line startAlt+H (editorTextFocus && dance.mode == 'normal')Home (editorTextFocus && dance.mode == 'normal') +select.line.below.extendExtend to line belowX (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.lineEndSelect to line endAlt+L (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')End (editorTextFocus && dance.mode == 'normal') +select.lineStartSelect to line startAlt+H (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Home (editorTextFocus && dance.mode == 'normal') select.middleVisibleLineSelect to middle visible line -select.documentEnd.extendExtend to last character -select.documentEnd.jumpJump to last character -select.down.extendExtend downShift+J (editorTextFocus && dance.mode == 'normal')Shift+Down (editorTextFocus && dance.mode == 'normal')J (editorTextFocus && dance.mode == 'select')Down (editorTextFocus && dance.mode == 'select') +select.documentEnd.extendExtend to last character +select.documentEnd.jumpJump to last character +select.down.extendExtend downShift+J (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Down (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')J (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Down (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') select.down.jumpJump downJ (editorTextFocus && dance.mode == 'normal')Down (editorTextFocus && dance.mode == 'normal') -select.firstLine.extendExtend to first line -select.firstLine.jumpJump to first line -select.firstVisibleLine.extendExtend to first visible line -select.firstVisibleLine.jumpJump to first visible line -select.lastLine.extendExtend to last line -select.lastLine.jumpJump to last line -select.lastVisibleLine.extendExtend to last visible line -select.lastVisibleLine.jumpJump to last visible line -select.left.extendExtend leftShift+H (editorTextFocus && dance.mode == 'normal')Shift+Left (editorTextFocus && dance.mode == 'normal')H (editorTextFocus && dance.mode == 'select')Left (editorTextFocus && dance.mode == 'select') -select.left.jumpJump leftH (editorTextFocus && dance.mode == 'normal')Left (editorTextFocus && dance.mode == 'normal') -select.lineEnd.extendExtend to line endShift+Alt+L (editorTextFocus && dance.mode == 'normal')Shift+End (editorTextFocus && dance.mode == 'normal') -select.lineStart.extendExtend to line startShift+Alt+H (editorTextFocus && dance.mode == 'normal')Shift+Home (editorTextFocus && dance.mode == 'normal') -select.lineStart.jumpJump to line start -select.lineStart.skipBlank.extendExtend to line start (skip blank) -select.lineStart.skipBlank.jumpJump to line start (skip blank) -select.middleVisibleLine.extendExtend to middle visible line -select.middleVisibleLine.jumpJump to middle visible line -select.right.extendExtend rightShift+L (editorTextFocus && dance.mode == 'normal')Shift+Right (editorTextFocus && dance.mode == 'normal')L (editorTextFocus && dance.mode == 'select')Right (editorTextFocus && dance.mode == 'select') -select.right.jumpJump rightL (editorTextFocus && dance.mode == 'normal')Right (editorTextFocus && dance.mode == 'normal') -select.to.extendExtend toShift+G (editorTextFocus && dance.mode == 'normal')G (editorTextFocus && dance.mode == 'select') -select.to.jumpGo toG (editorTextFocus && dance.mode == 'normal') -select.up.extendExtend upShift+K (editorTextFocus && dance.mode == 'normal')Shift+Up (editorTextFocus && dance.mode == 'normal')K (editorTextFocus && dance.mode == 'select')Up (editorTextFocus && dance.mode == 'select') +select.firstLine.extendExtend to first line +select.firstLine.jumpJump to first line +select.firstVisibleLine.extendExtend to first visible line +select.firstVisibleLine.jumpJump to first visible line +select.lastLine.extendExtend to last line +select.lastLine.jumpJump to last line +select.lastVisibleLine.extendExtend to last visible line +select.lastVisibleLine.jumpJump to last visible line +select.left.extendExtend leftShift+H (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Left (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')H (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Left (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.left.jumpJump leftH (editorTextFocus && dance.mode == 'normal')Left (editorTextFocus && dance.mode == 'normal') +select.lineEnd.extendExtend to line endShift+Alt+L (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+End (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')End (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.lineStart.extendExtend to line startShift+Alt+H (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Home (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Home (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.lineStart.jumpJump to line start +select.lineStart.skipBlank.extendExtend to line start (skip blank) +select.lineStart.skipBlank.jumpJump to line start (skip blank) +select.middleVisibleLine.extendExtend to middle visible line +select.middleVisibleLine.jumpJump to middle visible line +select.right.extendExtend rightShift+L (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Right (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')L (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Right (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.right.jumpJump rightL (editorTextFocus && dance.mode == 'normal')Right (editorTextFocus && dance.mode == 'normal') +select.to.extendExtend toShift+G (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')G (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.to.jumpGo toG (editorTextFocus && dance.mode == 'normal') +select.up.extendExtend upShift+K (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Up (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')K (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Up (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') select.up.jumpJump upK (editorTextFocus && dance.mode == 'normal')Up (editorTextFocus && dance.mode == 'normal') select.toSelect to select.verticallySelect vertically -selectionsselections.changeDirectionChange direction of selectionsAlt+; (editorTextFocus && dance.mode == 'normal') +selectionsselections.changeDirectionChange direction of selectionsAlt+; (editorTextFocus && dance.mode == 'normal')Alt+; (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.changeOrderReverse selections -selections.copyCopy selections belowShift+C (editorTextFocus && dance.mode == 'normal') -selections.expandToLinesExpand to linesX (editorTextFocus && dance.mode == 'normal') -selections.filterFilter selectionsShift+4 (editorTextFocus && dance.mode == 'normal') -selections.mergeMerge contiguous selectionsShift+Alt+- (editorTextFocus && dance.mode == 'normal') +selections.copyCopy selections belowShift+C (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.expandToLinesExpand to linesX (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.filterFilter selectionsShift+4 (editorTextFocus && dance.mode == 'normal')Shift+4 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.mergeMerge contiguous selectionsShift+Alt+- (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') selections.openOpen selected file -selections.pipePipe selectionsShift+Alt+\ (editorTextFocus && dance.mode == 'normal') -selections.reduceReduce selections to their cursor; (editorTextFocus && dance.mode == 'normal') -selections.restoreRestore selectionsZ (editorTextFocus && dance.mode == 'normal') -selections.restore.withCurrentCombine register selections with current onesAlt+Z (editorTextFocus && dance.mode == 'normal') -selections.saveSave selectionsShift+Z (editorTextFocus && dance.mode == 'normal') -selections.saveTextCopy selections textY (editorTextFocus && dance.mode == 'normal') +selections.pipePipe selectionsShift+Alt+\ (editorTextFocus && dance.mode == 'normal')Shift+Alt+\ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.reduceReduce selections to their cursor; (editorTextFocus && dance.mode == 'normal'); (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.restoreRestore selectionsZ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.restore.withCurrentCombine register selections with current onesAlt+Z (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.saveSave selectionsShift+Z (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.saveTextCopy selections textY (editorTextFocus && dance.mode == 'normal')Y (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.selectSelect within selections -selections.clear.mainClear main selectionsAlt+, (editorTextFocus && dance.mode == 'normal') -selections.clear.secondaryClear secondary selections, (editorTextFocus && dance.mode == 'normal') -selections.copy.aboveCopy selections aboveShift+Alt+C (editorTextFocus && dance.mode == 'normal') -selections.faceBackwardBackward selections -selections.faceForwardForward selectionsShift+Alt+; (editorTextFocus && dance.mode == 'normal') -selections.filter.regexpKeep matching selectionsAlt+K (editorTextFocus && dance.mode == 'normal') -selections.filter.regexp.inverseClear matching selectionsShift+Alt+K (editorTextFocus && dance.mode == 'normal') -selections.hideIndicesHide selection indices -selections.orderAscendingOrder selections ascending -selections.orderDescendingOrder selections descending -selections.pipe.appendPipe and appendShift+1 (editorTextFocus && dance.mode == 'normal') -selections.pipe.prependPipe and prependShift+Alt+1 (editorTextFocus && dance.mode == 'normal') -selections.pipe.replacePipe and replaceShift+\ (editorTextFocus && dance.mode == 'normal') -selections.reduce.edgesReduce selections to their endsShift+Alt+S (editorTextFocus && dance.mode == 'normal') -selections.select.orLeapLeap or selectS (editorTextFocus && dance.mode == 'normal') -selections.showIndicesShow selection indices -selections.splitLines.orLeap.backwardLeap or select backwardAlt+S (editorTextFocus && dance.mode == 'normal') +selections.clear.mainClear main selectionsAlt+, (editorTextFocus && dance.mode == 'normal')Alt+, (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.clear.secondaryClear secondary selections, (editorTextFocus && dance.mode == 'normal'), (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.copy.aboveCopy selections aboveShift+Alt+C (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.faceBackwardBackward selections +selections.faceForwardForward selectionsShift+Alt+; (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.filter.regexpKeep matching selectionsAlt+K (editorTextFocus && dance.mode == 'normal')Alt+K (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.filter.regexp.inverseClear matching selectionsShift+Alt+K (editorTextFocus && dance.mode == 'normal')Shift+Alt+K (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.hideIndicesHide selection indices +selections.orderAscendingOrder selections ascending +selections.orderDescendingOrder selections descending +selections.pipe.appendPipe and appendShift+1 (editorTextFocus && dance.mode == 'normal')Shift+1 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.pipe.prependPipe and prependShift+Alt+1 (editorTextFocus && dance.mode == 'normal')Shift+Alt+1 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.pipe.replacePipe and replaceShift+\ (editorTextFocus && dance.mode == 'normal')Shift+\ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.reduce.edgesReduce selections to their endsShift+Alt+S (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.select.orLeapLeap or selectS (editorTextFocus && dance.mode == 'normal')S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.showIndicesShow selection indices +selections.splitLines.orLeap.backwardLeap or select backwardAlt+S (editorTextFocus && dance.mode == 'normal')Alt+S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.sortSort selections -selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal') +selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal')Shift+S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.splitLinesSplit selections at line boundaries -selections.toggleIndicesToggle selection indicesEnter (editorTextFocus && dance.mode == 'normal') -selections.trimLinesTrim linesAlt+X (editorTextFocus && dance.mode == 'normal') -selections.trimWhitespaceTrim whitespaceShift+- (editorTextFocus && dance.mode == 'normal') -selections.rotateselections.rotate.bothRotate selections clockwiseShift+Alt+0 (editorTextFocus && dance.mode == 'normal') -selections.rotate.contentsRotate selections clockwise (contents only) +selections.toggleIndicesToggle selection indicesEnter (editorTextFocus && dance.behavior == 'dance' && dance.mode == 'normal') +selections.trimLinesTrim linesAlt+X (editorTextFocus && dance.mode == 'normal')Alt+X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.trimWhitespaceTrim whitespaceShift+- (editorTextFocus && dance.mode == 'normal')Shift+- (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.rotateselections.rotate.bothRotate selections clockwiseShift+Alt+0 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.rotate.contentsRotate selections clockwise (contents only)Shift+Alt+0 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+Alt+0 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.rotate.selectionsRotate selections clockwise (selections only)Shift+0 (editorTextFocus && dance.mode == 'normal') -selections.rotate.both.reverseRotate selections counter-clockwiseShift+Alt+9 (editorTextFocus && dance.mode == 'normal') -selections.rotate.contents.reverseRotate selections counter-clockwise (contents only) -selections.rotate.selections.reverseRotate selections counter-clockwise (selections only)Shift+9 (editorTextFocus && dance.mode == 'normal') +selections.rotate.both.reverseRotate selections counter-clockwiseShift+Alt+9 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.rotate.contents.reverseRotate selections counter-clockwise (contents only)Shift+Alt+9 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+Alt+9 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.rotate.selections.reverseRotate selections counter-clockwise (selections only)Shift+9 (editorTextFocus && dance.mode == 'normal')Shift+9 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') viewview.lineReveals a position based on the main cursor @@ -268,18 +268,18 @@ Specify `all` to paste all contents next to each selection. | Title | Identifier | Keybinding | Commands | | ---------------------------------- | ------------------------ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | | Pick register and replace | `selectRegister-insert` | `c-r` (kakoune: normal), `c-r` (kakoune: insert) | `[".selectRegister", { +register }], [".edit.insert", { ... }]` | -| Paste before | `paste.before` | | `[".edit.insert", { handleNewLine: true, where: "start", ... }]` | -| Paste after | `paste.after` | | `[".edit.insert", { handleNewLine: true, where: "end" , ... }]` | -| Paste before and select | `paste.before.select` | `s-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "start", shift: "select", ... }]` | -| Paste after and select | `paste.after.select` | `p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , shift: "select", ... }]` | +| Paste before | `paste.before` | `s-p` (helix: select) | `[".edit.insert", { handleNewLine: true, where: "start", ... }]` | +| Paste after | `paste.after` | `p` (helix: select) | `[".edit.insert", { handleNewLine: true, where: "end" , ... }]` | +| Paste before and select | `paste.before.select` | `s-p` (core: normal) | `[".edit.insert", { handleNewLine: true, where: "start", shift: "select", ... }]` | +| Paste after and select | `paste.after.select` | `p` (core: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , shift: "select", ... }]` | | Paste all before | `pasteAll.before` | | `[".edit.insert", { handleNewLine: true, where: "start", all: true, ... }]` | | Paste all after | `pasteAll.after` | | `[".edit.insert", { handleNewLine: true, where: "end" , all: true, ... }]` | | Paste all before and select | `pasteAll.before.select` | `s-a-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "start", all: true, shift: "select", ... }]` | | Paste all after and select | `pasteAll.after.select` | `a-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , all: true, shift: "select", ... }]` | -| Delete | `delete` | `a-d` (kakoune: normal) | `[".edit.insert", { register: "_", ... }]` | +| Delete | `delete` | `a-d` (core: normal), `a-d` (helix: select) | `[".edit.insert", { register: "_", ... }]` | | Delete and switch to Insert | `delete-insert` | `a-c` (kakoune: normal) | `[".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | -| Copy and delete | `yank-delete` | `d` (kakoune: normal), `d` (helix: select) | `[".selections.saveText", { +register }], [".edit.insert", { register: "_", ... }]` | -| Copy, delete and switch to Insert | `yank-delete-insert` | `c` (kakoune: normal), `c` (helix: select) | `[".selections.saveText", { +register }], [".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | +| Copy and delete | `yank-delete` | `d` (core: normal), `d` (helix: select) | `[".selections.saveText", { +register }], [".edit.insert", { register: "_", ... }]` | +| Copy, delete and switch to Insert | `yank-delete-insert` | `c` (core: normal), `c` (helix: select) | `[".selections.saveText", { +register }], [".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | | Copy and replace | `yank-replace` | `s-r` (kakoune: normal) | `[".selections.saveText", { register: "tmp" }], [".edit.insert"], [".updateRegister", { copyFrom: "tmp", ... }]` | This command: @@ -304,7 +304,8 @@ Join lines. This command: - takes an argument `separator` of type `string`. -Default keybinding: `a-j` (kakoune: normal) +Default keybinding: `a-j` (core: normal) +`s-j` (helix: select) @@ -316,7 +317,8 @@ Join lines and select inserted separators. This command: - takes an argument `separator` of type `string`. -Default keybinding: `s-a-j` (kakoune: normal) +Default keybinding: `s-a-j` (core: normal) +`s-a-j` (helix: select) @@ -328,7 +330,8 @@ Indent selected lines. This command: - may be repeated with a given number of repetitions. -Default keybinding: `>` (kakoune: normal) +Default keybinding: `>` (core: normal) +`>` (helix: select) @@ -364,7 +367,8 @@ Deindent selected lines (including incomplete indent). This command: - may be repeated with a given number of repetitions. -Default keybinding: `<` (kakoune: normal) +Default keybinding: `<` (core: normal) +`<` (helix: select) @@ -374,7 +378,8 @@ Transform to lower case. -Default keybinding: `` ` `` (kakoune: normal) +Default keybinding: `` ` `` (core: normal) +`` ` `` (helix: select) @@ -385,6 +390,8 @@ Transform to upper case. Default keybinding: `` s-` `` (kakoune: normal) +`` a-` `` (helix: normal) +`` a-` `` (helix: select) @@ -395,6 +402,8 @@ Swap case. Default keybinding: `` a-` `` (kakoune: normal) +`` s-` `` (helix: normal) +`` s-` `` (helix: select) @@ -407,7 +416,7 @@ This command: - may be repeated with a given number of repetitions. - takes an input `input` of type `string`. -Default keybinding: `r` (kakoune: normal) +Default keybinding: `r` (core: normal) @@ -422,7 +431,7 @@ before the first character of each selection. This command: - takes an argument `fill` of type `string`. -Default keybinding: `&` (kakoune: normal) +Default keybinding: `&` (core: normal) @@ -451,9 +460,9 @@ keep the current selections. #### Additional keybindings -| Title | Identifier | Keybinding | Commands | -| ------------------------------------------ | ---------------------- | ----------------------- | --------------------------------------------------------------------------------- | -| Insert new line above and switch to insert | `newLine.above.insert` | `s-o` (kakoune: normal) | `[".edit.newLine.above", { shift: "select" }], [".modes.insert.before", { ... }]` | +| Title | Identifier | Keybinding | Commands | +| ------------------------------------------ | ---------------------- | ------------------------------------------- | --------------------------------------------------------------------------------- | +| Insert new line above and switch to insert | `newLine.above.insert` | `s-o` (core: normal), `s-o` (helix: select) | `[".edit.newLine.above", { shift: "select" }], [".modes.insert.before", { ... }]` | This command: - may be repeated with a given number of repetitions. @@ -473,9 +482,9 @@ keep the current selections. #### Additional keybindings -| Title | Identifier | Keybinding | Commands | -| ------------------------------------------ | ---------------------- | --------------------- | --------------------------------------------------------------------------------- | -| Insert new line below and switch to insert | `newLine.below.insert` | `o` (kakoune: normal) | `[".edit.newLine.below", { shift: "select" }], [".modes.insert.before", { ... }]` | +| Title | Identifier | Keybinding | Commands | +| ------------------------------------------ | ---------------------- | --------------------------------------- | --------------------------------------------------------------------------------- | +| Insert new line below and switch to insert | `newLine.below.insert` | `o` (core: normal), `o` (helix: select) | `[".edit.newLine.below", { shift: "select" }], [".modes.insert.before", { ... }]` | This command: - may be repeated with a given number of repetitions. @@ -497,7 +506,7 @@ Undo. This command: - does not require an active text editor. -Default keybinding: `u` (kakoune: normal) +Default keybinding: `u` (core: normal) `u` (helix: select) @@ -510,7 +519,7 @@ Redo. This command: - does not require an active text editor. -Default keybinding: `s-u` (kakoune: normal) +Default keybinding: `s-u` (core: normal) `s-u` (helix: select) @@ -544,10 +553,10 @@ Default keybinding: `s-a-u` (kakoune: normal) Repeat last change. -| Title | Identifier | Keybinding | Commands | -| ---------------------------- | ------------------ | ----------------------- | ----------------------------------------------------------------------------- | -| Repeat last selection change | `repeat.selection` | | `[".history.repeat", { filter: "dance\\.(seek\|select\|selections)", +count }]` | -| Repeat last seek | `repeat.seek` | `a-.` (kakoune: normal) | `[".history.repeat", { filter: "dance\\.seek", +count }]` | +| Title | Identifier | Keybinding | Commands | +| ---------------------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------------------------- | +| Repeat last selection change | `repeat.selection` | | `[".history.repeat", { filter: "dance\\.(seek\|select\|selections)", +count }]` | +| Repeat last seek | `repeat.seek` | `a-.` (core: normal), `a-.` (helix: select) | `[".history.repeat", { filter: "dance\\.seek", +count }]` | This command: - may be repeated with a given number of repetitions. @@ -563,8 +572,8 @@ Repeat last edit without a command. This command: - may be repeated with a given number of repetitions. -Default keybinding: `.` (kakoune: normal) -`NumPad_Decimal` (kakoune: normal) +Default keybinding: `.` (core: normal) +`NumPad_Decimal` (core: normal) @@ -776,7 +785,7 @@ current document. This command: - takes an input `register` of type `string | Register`. -Default keybinding: `"` (kakoune: normal) +Default keybinding: `"` (core: normal) @@ -883,20 +892,20 @@ Set Dance mode. #### Variants -| Title | Identifier | Keybinding | Command | -| ------------------ | ------------ | ---------------------------------------------------- | ----------------------------------------------------------- | -| Set mode to Normal | `set.normal` | `escape` (kakoune: insert), `escape` (helix: select) | `[".modes.set", { mode: "normal" }], ["hideSuggestWidget"]` | -| Set mode to Insert | `set.insert` | | `[".modes.set", { mode: "insert" }]` | -| Set mode to Select | `set.select` | | `[".modes.set", { mode: "select" }]` | +| Title | Identifier | Keybinding | Command | +| ------------------ | ------------ | ---------------------------------------------------------------------- | ----------------------------------------------------------- | +| Set mode to Normal | `set.normal` | `escape` (core: insert), `escape` (helix: select), `v` (helix: select) | `[".modes.set", { mode: "normal" }], ["hideSuggestWidget"]` | +| Set mode to Insert | `set.insert` | | `[".modes.set", { mode: "insert" }]` | +| Set mode to Select | `set.select` | `v` (helix: normal) | `[".modes.set", { mode: "select" }]` | Other variants are provided to switch to insert mode: -| Title | Identifier | Keybinding | Commands | -| -------------------- | ------------------ | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Insert before | `insert.before` | `i` (kakoune: normal) | `[".selections.faceBackward", { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | -| Insert after | `insert.after` | `a` (kakoune: normal) | `[".selections.faceForward" , { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | -| Insert at line start | `insert.lineStart` | `s-i` (kakoune: normal) | `[".select.lineStart", { shift: "jump", skipBlank: true }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | -| Insert at line end | `insert.lineEnd` | `s-a` (kakoune: normal) | `[".select.lineEnd" , { shift: "jump" }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | +| Title | Identifier | Keybinding | Commands | +| -------------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Insert before | `insert.before` | `i` (core: normal), `i` (helix: select) | `[".selections.faceBackward", { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | +| Insert after | `insert.after` | `a` (core: normal), `a` (helix: select) | `[".selections.faceForward" , { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | +| Insert at line start | `insert.lineStart` | `s-i` (core: normal), `s-i` (helix: select) | `[".select.lineStart", { shift: "jump", skipBlank: true }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | +| Insert at line end | `insert.lineEnd` | `s-a` (core: normal), `s-a` (helix: select) | `[".select.lineEnd" , { shift: "jump" }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | This command: @@ -931,11 +940,11 @@ Search for patterns and replace or add selections. Search. -| Title | Identifier | Keybinding | Command | -| ------------------------ | ----------------- | ----------------------- | ------------------------------------------------------ | -| Search (extend) | `extend` | `?` (kakoune: normal) | `[".search", { shift: "extend", ... }]` | -| Search backward | `backward` | `a-/` (kakoune: normal) | `[".search", { direction: -1 , ... }]` | -| Search backward (extend) | `backward.extend` | `a-?` (kakoune: normal) | `[".search", { direction: -1, shift: "extend", ... }]` | +| Title | Identifier | Keybinding | Command | +| ------------------------ | ----------------- | -------------------------------------------- | ------------------------------------------------------ | +| Search (extend) | `extend` | `?` (kakoune: normal), `/` (helix: select) | `[".search", { shift: "extend", ... }]` | +| Search backward | `backward` | `a-/` (kakoune: normal), `?` (helix: normal) | `[".search", { direction: -1 , ... }]` | +| Search backward (extend) | `backward.extend` | `a-?` (kakoune: normal), `?` (helix: select) | `[".search", { direction: -1, shift: "extend", ... }]` | This command: - accepts a register (by default, it uses `slash`). @@ -944,8 +953,8 @@ This command: - takes an argument `add` of type `boolean`. - takes an argument `interactive` of type `boolean`. -Default keybinding: `/` (kakoune: normal) -`NumPad_Divide` (kakoune: normal) +Default keybinding: `/` (core: normal) +`NumPad_Divide` (core: normal) @@ -954,16 +963,16 @@ Default keybinding: `/` (kakoune: normal) Search current selection. -| Title | Identifier | Keybinding | Command | -| -------------------------------- | ----------------- | ---------------------------------------------------------- | --------------------------------------------------- | -| Search current selection (smart) | `selection.smart` | `*` (kakoune: normal), `NumPad_Multiply` (kakoune: normal) | `[".search.selection", { smart: true, +register }]` | +| Title | Identifier | Keybinding | Command | +| -------------------------------- | ----------------- | ---------------------------------------------------- | --------------------------------------------------- | +| Search current selection (smart) | `selection.smart` | `*` (core: normal), `NumPad_Multiply` (core: normal) | `[".search.selection", { smart: true, +register }]` | This command: - accepts a register (by default, it uses `slash`). - takes an argument `smart` of type `boolean`. -Default keybinding: `a-*` (kakoune: normal) -`a-NumPad_Multiply` (kakoune: normal) +Default keybinding: `a-*` (core: normal) +`a-NumPad_Multiply` (core: normal) @@ -972,18 +981,18 @@ Default keybinding: `a-*` (kakoune: normal) Select next match. -| Title | Identifier | Keybinding | Command | -| --------------------- | -------------- | ------------------------- | ----------------------------------------------------- | -| Add next match | `next.add` | `s-n` (kakoune: normal) | `[".search.next", { add: true, ... }]` | -| Select previous match | `previous` | `a-n` (kakoune: normal) | `[".search.next", { direction: -1 , ... }]` | -| Add previous match | `previous.add` | `s-a-n` (kakoune: normal) | `[".search.next", { direction: -1, add: true, ... }]` | +| Title | Identifier | Keybinding | Command | +| --------------------- | -------------- | ------------------------------------------------ | ----------------------------------------------------- | +| Add next match | `next.add` | `s-n` (kakoune: normal), `n` (helix: select) | `[".search.next", { add: true, ... }]` | +| Select previous match | `previous` | `a-n` (kakoune: normal), `s-n` (helix: normal) | `[".search.next", { direction: -1 , ... }]` | +| Add previous match | `previous.add` | `s-a-n` (kakoune: normal), `s-n` (helix: select) | `[".search.next", { direction: -1, add: true, ... }]` | This command: - accepts a register (by default, it uses `slash`). - may be repeated with a given number of repetitions. - takes an argument `add` of type `boolean`. -Default keybinding: `n` (kakoune: normal) +Default keybinding: `n` (core: normal) ## [`seek`](../seek.ts) @@ -1001,11 +1010,11 @@ Select to character (excluded). | Title | Identifier | Keybinding | Command | | ---------------------------------------- | -------------------------- | ------------------------------------------------ | ------------------------------------------------------------------- | | Extend to character (excluded) | `extend` | `s-t` (kakoune: normal), `t` (helix: select) | `[".seek", { shift: "extend" , ... }]` | -| Select to character (excluded, backward) | `backward` | `a-t` (kakoune: normal) | `[".seek", { direction: -1, ... }]` | +| Select to character (excluded, backward) | `backward` | `a-t` (kakoune: normal), `s-t` (helix: normal) | `[".seek", { direction: -1, ... }]` | | Extend to character (excluded, backward) | `extend.backward` | `s-a-t` (kakoune: normal), `s-t` (helix: select) | `[".seek", { shift: "extend", direction: -1, ... }]` | -| Select to character (included) | `included` | `f` (kakoune: normal) | `[".seek", { include: true , ... }]` | +| Select to character (included) | `included` | `f` (core: normal) | `[".seek", { include: true , ... }]` | | Extend to character (included) | `included.extend` | `s-f` (kakoune: normal), `f` (helix: select) | `[".seek", { include: true, shift: "extend" , ... }]` | -| Select to character (included, backward) | `included.backward` | `a-f` (kakoune: normal) | `[".seek", { include: true, direction: -1, ... }]` | +| Select to character (included, backward) | `included.backward` | `a-f` (kakoune: normal), `s-f` (helix: normal) | `[".seek", { include: true, direction: -1, ... }]` | | Extend to character (included, backward) | `included.extend.backward` | `s-a-f` (kakoune: normal), `s-f` (helix: select) | `[".seek", { include: true, shift: "extend", direction: -1, ... }]` | This command: @@ -1013,7 +1022,7 @@ This command: - takes an argument `include` of type `boolean`. - takes an input `input` of type `string`. -Default keybinding: `t` (kakoune: normal) +Default keybinding: `t` (core: normal) @@ -1050,15 +1059,15 @@ Select the word and following whitespaces on the right of the end of each select | Title | Identifier | Keybinding | Command | | -------------------------------------------- | ------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------- | | Extend to next word start | `word.extend` | `s-w` (kakoune: normal), `w` (helix: select) | `[".seek.word", { shift: "extend" , ... }]` | -| Select to previous word start | `word.backward` | `b` (kakoune: normal) | `[".seek.word", { direction: -1, ... }]` | +| Select to previous word start | `word.backward` | `b` (core: normal) | `[".seek.word", { direction: -1, ... }]` | | Extend to previous word start | `word.extend.backward` | `s-b` (kakoune: normal), `b` (helix: select) | `[".seek.word", { shift: "extend", direction: -1, ... }]` | -| Select to next non-whitespace word start | `word.ws` | `a-w` (kakoune: normal) | `[".seek.word", { ws: true , ... }]` | +| Select to next non-whitespace word start | `word.ws` | `a-w` (kakoune: normal), `s-w` (helix: normal) | `[".seek.word", { ws: true , ... }]` | | Extend to next non-whitespace word start | `word.ws.extend` | `s-a-w` (kakoune: normal), `s-w` (helix: select) | `[".seek.word", { ws: true, shift: "extend" , ... }]` | -| Select to previous non-whitespace word start | `word.ws.backward` | `a-b` (kakoune: normal) | `[".seek.word", { ws: true, direction: -1, ... }]` | +| Select to previous non-whitespace word start | `word.ws.backward` | `a-b` (kakoune: normal), `s-b` (helix: normal) | `[".seek.word", { ws: true, direction: -1, ... }]` | | Extend to previous non-whitespace word start | `word.ws.extend.backward` | `s-a-b` (kakoune: normal), `s-b` (helix: select) | `[".seek.word", { ws: true, shift: "extend", direction: -1, ... }]` | -| Select to next word end | `wordEnd` | `e` (kakoune: normal) | `[".seek.word", { stopAtEnd: true , ... }]` | +| Select to next word end | `wordEnd` | `e` (core: normal) | `[".seek.word", { stopAtEnd: true , ... }]` | | Extend to next word end | `wordEnd.extend` | `s-e` (kakoune: normal), `e` (helix: select) | `[".seek.word", { stopAtEnd: true , shift: "extend" , ... }]` | -| Select to next non-whitespace word end | `wordEnd.ws` | `a-e` (kakoune: normal) | `[".seek.word", { stopAtEnd: true , ws: true , ... }]` | +| Select to next non-whitespace word end | `wordEnd.ws` | `a-e` (kakoune: normal), `s-e` (helix: normal) | `[".seek.word", { stopAtEnd: true , ws: true , ... }]` | | Extend to next non-whitespace word end | `wordEnd.ws.extend` | `s-a-e` (kakoune: normal), `s-e` (helix: select) | `[".seek.word", { stopAtEnd: true , ws: true, shift: "extend" , ... }]` | This command: @@ -1066,7 +1075,7 @@ This command: - takes an argument `stopAtEnd` of type `boolean`. - takes an argument `ws` of type `boolean`. -Default keybinding: `w` (kakoune: normal) +Default keybinding: `w` (core: normal) @@ -1159,28 +1168,32 @@ Default keybinding: `%` (kakoune: normal) -### [`select.vertically`](../select.ts#L31-L64) +### [`select.vertically`](../select.ts#L31-L68) Select vertically. #### Variants -| Title | Identifier | Keybinding | Command | +| Title | Identifier | Keybinding | Command | | ----------- | ------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | -| Jump down | `down.jump` | `j` (kakoune: normal) , `down` (kakoune: normal) | `[".select.vertically", { direction: 1, shift: "jump" , ... }]` | +| Jump down | `down.jump` | `j` (core: normal) , `down` (core: normal) | `[".select.vertically", { direction: 1, shift: "jump" , ... }]` | | Extend down | `down.extend` | `s-j` (kakoune: normal), `s-down` (kakoune: normal), `j` (helix: select), `down` (helix: select) | `[".select.vertically", { direction: 1, shift: "extend", ... }]` | -| Jump up | `up.jump` | `k` (kakoune: normal) , `up` (kakoune: normal) | `[".select.vertically", { direction: -1, shift: "jump" , ... }]` | +| Jump up | `up.jump` | `k` (core: normal) , `up` (core: normal) | `[".select.vertically", { direction: -1, shift: "jump" , ... }]` | | Extend up | `up.extend` | `s-k` (kakoune: normal), `s-up` (kakoune: normal) , `k` (helix: select), `up` (helix: select) | `[".select.vertically", { direction: -1, shift: "extend", ... }]` | The following keybindings are also defined: -| Keybinding | Command | -| ------------------------------------------------ | -------------------------------------------------------------------------- | -| `c-f` (kakoune: normal), `c-f` (kakoune: insert) | `[".select.vertically", { direction: 1, by: "page" , shift: "jump" }]` | -| `c-d` (kakoune: normal), `c-d` (kakoune: insert) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "jump" }]` | -| `c-b` (kakoune: normal), `c-b` (kakoune: insert) | `[".select.vertically", { direction: -1, by: "page" , shift: "jump" }]` | -| `c-u` (kakoune: normal), `c-u` (kakoune: insert) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "jump" }]` | +| Keybinding | Command | +| -------------------------------------------| ---------------------------------------------------------------------------- | +| `c-f` (core: normal), `c-f` (core: insert) | `[".select.vertically", { direction: 1, by: "page" , shift: "jump" }]` | +| `c-d` (core: normal), `c-d` (core: insert) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "jump" }]` | +| `c-b` (core: normal), `c-b` (core: insert) | `[".select.vertically", { direction: -1, by: "page" , shift: "jump" }]` | +| `c-u` (core: normal), `c-u` (core: insert) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "jump" }]` | +| `c-f` (helix: select) | `[".select.vertically", { direction: 1, by: "page" , shift: "extend" }]` | +| `c-d` (helix: select) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "extend" }]` | +| `c-b` (helix: select) | `[".select.vertically", { direction: -1, by: "page" , shift: "extend" }]` | +| `c-u` (helix: select) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "extend" }]` | This command: - may be repeated with a given number of repetitions. @@ -1189,7 +1202,7 @@ This command: -### [`select.horizontally`](../select.ts#L217-L239) +### [`select.horizontally`](../select.ts#L221-L243) Select horizontally. @@ -1198,9 +1211,9 @@ Select horizontally. | Title | Identifier | Keybinding | Command | | ------------ | -------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -| Jump right | `right.jump` | `l` (kakoune: normal) , `right` (kakoune: normal) | `[".select.horizontally", { direction: 1, shift: "jump" , ... }]` | +| Jump right | `right.jump` | `l` (core: normal) , `right` (core: normal) | `[".select.horizontally", { direction: 1, shift: "jump" , ... }]` | | Extend right | `right.extend` | `s-l` (kakoune: normal), `s-right` (kakoune: normal), `l` (helix: select), `right` (helix: select) | `[".select.horizontally", { direction: 1, shift: "extend", ... }]` | -| Jump left | `left.jump` | `h` (kakoune: normal) , `left` (kakoune: normal) | `[".select.horizontally", { direction: -1, shift: "jump" , ... }]` | +| Jump left | `left.jump` | `h` (core: normal) , `left` (core: normal) | `[".select.horizontally", { direction: -1, shift: "jump" , ... }]` | | Extend left | `left.extend` | `s-h` (kakoune: normal), `s-left` (kakoune: normal), `h` (helix: select), `left` (helix: select) | `[".select.horizontally", { direction: -1, shift: "extend", ... }]` | This command: @@ -1209,7 +1222,7 @@ This command: -### [`select.to`](../select.ts#L286-L304) +### [`select.to`](../select.ts#L290-L308) Select to. @@ -1220,7 +1233,7 @@ line. If no count is specified, this command will shift open the `goto` menu. | Title | Identifier | Keybinding | Command | | --------- | ----------- | -------------------------------------------- | ------------------------------------------ | -| Go to | `to.jump` | `g` (kakoune: normal) | `[".select.to", { shift: "jump" , ... }]` | +| Go to | `to.jump` | `g` (core: normal) | `[".select.to", { shift: "jump" , ... }]` | | Extend to | `to.extend` | `s-g` (kakoune: normal), `g` (helix: select) | `[".select.to", { shift: "extend", ... }]` | This command: @@ -1229,7 +1242,7 @@ This command: -### [`select.line.below`](../select.ts#L314-L317) +### [`select.line.below`](../select.ts#L318-L321) Select line below. @@ -1238,16 +1251,19 @@ This command: -### [`select.line.below.extend`](../select.ts#L342-L345) +### [`select.line.below.extend`](../select.ts#L346-L350) Extend to line below. This command: - may be repeated with a given number of repetitions. +Default keybinding: `x` (helix: normal) +`x` (helix: select) + -### [`select.line.above`](../select.ts#L372-L375) +### [`select.line.above`](../select.ts#L377-L380) Select line above. @@ -1256,7 +1272,7 @@ This command: -### [`select.line.above.extend`](../select.ts#L399-L402) +### [`select.line.above.extend`](../select.ts#L404-L407) Extend to line above. @@ -1265,32 +1281,32 @@ This command: -### [`select.lineStart`](../select.ts#L448-L470) +### [`select.lineStart`](../select.ts#L453-L475) Select to line start. #### Variants -| Title | Identifier | Keybinding | Command | -| -------------------- | ------------------ | ----------------------------------------------------- | ------------------------------------------------------------------ | -| Jump to line start | `lineStart.jump` | | `[".select.lineStart", { shift: "jump" , ... }]` | -| Extend to line start | `lineStart.extend` | `s-a-h` (kakoune: normal), `s-home` (kakoune: normal) | `[".select.lineStart", { shift: "extend", ... }]` | -| Jump to line start (skip blank) | `lineStart.skipBlank.jump` | | `[".select.lineStart", { skipBlank: true, shift: "jump" , ... }]` | -| Extend to line start (skip blank) | `lineStart.skipBlank.extend` | | `[".select.lineStart", { skipBlank: true, shift: "extend", ... }]` | -| Jump to first line | `firstLine.jump` | | `[".select.lineStart", { count: 0, shift: "jump" , ... }]` | -| Extend to first line | `firstLine.extend` | | `[".select.lineStart", { count: 0, shift: "extend", ... }]` | +| Title | Identifier | Keybinding | Command | +| -------------------- | ------------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| Jump to line start | `lineStart.jump` | | `[".select.lineStart", { shift: "jump" , ... }]` | +| Extend to line start | `lineStart.extend` | `s-a-h` (kakoune: normal), `s-home` (kakoune: normal), `home` (helix: select) | `[".select.lineStart", { shift: "extend", ... }]` | +| Jump to line start (skip blank) | `lineStart.skipBlank.jump` | | `[".select.lineStart", { skipBlank: true, shift: "jump" , ... }]` | +| Extend to line start (skip blank) | `lineStart.skipBlank.extend` | | `[".select.lineStart", { skipBlank: true, shift: "extend", ... }]` | +| Jump to first line | `firstLine.jump` | | `[".select.lineStart", { count: 0, shift: "jump" , ... }]` | +| Extend to first line | `firstLine.extend` | | `[".select.lineStart", { count: 0, shift: "extend", ... }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `skipBlank` of type `boolean`. Default keybinding: `a-h` (kakoune: normal) -`home` (kakoune: normal) +`home` (core: normal) -### [`select.lineEnd`](../select.ts#L495-L517) +### [`select.lineEnd`](../select.ts#L500-L522) Select to line end. @@ -1298,22 +1314,22 @@ Select to line end. #### Variants -| Title | Identifier | Keybinding | Command | -| ------------------------ | -------------------- | ---------------------------------------------------- | --------------------------------------------------------------- | -| Extend to line end | `lineEnd.extend` | `s-a-l` (kakoune: normal), `s-end` (kakoune: normal) | `[".select.lineEnd", { shift: "extend", ... }]` | -| Jump to last character | `documentEnd.jump` | | `[".select.lineEnd", { count: MAX_INT, shift: "jump" , ... }]` | -| Extend to last character | `documentEnd.extend` | | `[".select.lineEnd", { count: MAX_INT, shift: "extend", ... }]` | +| Title | Identifier | Keybinding | Command | +| ------------------------ | -------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------- | +| Extend to line end | `lineEnd.extend` | `s-a-l` (kakoune: normal), `s-end` (kakoune: normal), `end` (helix: select) | `[".select.lineEnd", { shift: "extend", ... }]` | +| Jump to last character | `documentEnd.jump` | | `[".select.lineEnd", { count: MAX_INT, shift: "jump" , ... }]` | +| Extend to last character | `documentEnd.extend` | | `[".select.lineEnd", { count: MAX_INT, shift: "extend", ... }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `lineBreak` of type `boolean`. Default keybinding: `a-l` (kakoune: normal) -`end` (kakoune: normal) +`end` (core: normal) -### [`select.lastLine`](../select.ts#L545-L555) +### [`select.lastLine`](../select.ts#L550-L560) Select to last line. @@ -1326,7 +1342,7 @@ Select to last line. -### [`select.firstVisibleLine`](../select.ts#L566-L576) +### [`select.firstVisibleLine`](../select.ts#L571-L581) Select to first visible line. @@ -1339,7 +1355,7 @@ Select to first visible line. -### [`select.middleVisibleLine`](../select.ts#L583-L593) +### [`select.middleVisibleLine`](../select.ts#L588-L598) Select to middle visible line. @@ -1352,7 +1368,7 @@ Select to middle visible line. -### [`select.lastVisibleLine`](../select.ts#L600-L610) +### [`select.lastVisibleLine`](../select.ts#L605-L615) Select to last visible line. @@ -1377,7 +1393,8 @@ Copy selections text. This command: - accepts a register (by default, it uses `dquote`). -Default keybinding: `y` (kakoune: normal) +Default keybinding: `y` (core: normal) +`y` (helix: select) @@ -1430,45 +1447,44 @@ Default keybinding: `a-z` (kakoune: normal) -### [`selections.pipe`](../selections.ts#L241-L263) +### [`selections.pipe`](../selections.ts#L241-L262) Pipe selections. Run the specified command or code with the contents of each selection, and save the result to a register. - See https://github.com/mawww/kakoune/blob/master/doc/pages/keys.asciidoc#changes-through-external-programs #### Additional commands -| Title | Identifier | Keybinding | Commands | -| ------------------- | -------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------- | -| Pipe and replace | `pipe.replace` | `\|` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", ... }]` | -| Pipe and append | `pipe.append` | `!` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "end" , shift: "select", ... }]` | -| Pipe and prepend | `pipe.prepend` | `a-!` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "start", shift: "select", ... }]` | +| Title | Identifier | Keybinding | Commands | +| ------------------- | -------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| Pipe and replace | `pipe.replace` | `\|` (core: normal), `\|` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", ... }]` | +| Pipe and append | `pipe.append` | `!` (core: normal), `!` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "end" , shift: "select", ... }]` | +| Pipe and prepend | `pipe.prepend` | `a-!` (core: normal), `a-!` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "start", shift: "select", ... }]` | This command: - accepts a register (by default, it uses `pipe`). - takes an input `expression` of type `string`. -Default keybinding: `a-|` (kakoune: normal) +Default keybinding: `a-|` (core: normal) +`a-|` (helix: select) -### [`selections.filter`](../selections.ts#L291-L313) +### [`selections.filter`](../selections.ts#L290-L311) Filter selections. - #### Variants -| Title | Identifier | Keybinding | Commands | -| -------------------------- | ----------------------- | --------------------------| ------------------------------------------------------------------------ | -| Keep matching selections | `filter.regexp` | `a-k` (kakoune: normal) | `[".selections.filter", { defaultExpression: "/" , ... }]` | -| Clear matching selections | `filter.regexp.inverse` | `s-a-k` (kakoune: normal) | `[".selections.filter", { defaultExpression: "/", inverse: true, ... }]` | -| Clear secondary selections | `clear.secondary` | `,` (kakoune: normal) | `[".selections.filter", { expression: "i === count" , ... }]` | -| Clear main selections | `clear.main` | `a-,` (kakoune: normal) | `[".selections.filter", { expression: "i !== count" , ... }]` | +| Title | Identifier | Keybinding | Commands | +| -------------------------- | ----------------------- | ----------------------------------------------- | ------------------------------------------------------------------------ | +| Keep matching selections | `filter.regexp` | `a-k` (core: normal), `a-k` (helix: select) | `[".selections.filter", { defaultExpression: "/" , ... }]` | +| Clear matching selections | `filter.regexp.inverse` | `s-a-k` (core: normal), `s-a-k` (helix: select) | `[".selections.filter", { defaultExpression: "/", inverse: true, ... }]` | +| Clear secondary selections | `clear.secondary` | `,` (core: normal), `,` (helix: select) | `[".selections.filter", { expression: "i === count" , ... }]` | +| Clear main selections | `clear.main` | `a-,` (core: normal), `a-,` (helix: select) | `[".selections.filter", { expression: "i !== count" , ... }]` | This command: - accepts an argument of type `{ expression?: string }`. @@ -1477,19 +1493,20 @@ This command: - takes an argument `interactive` of type `boolean`. - takes an argument `inverse` of type `boolean`. -Default keybinding: `$` (kakoune: normal) +Default keybinding: `$` (core: normal) +`$` (helix: select) -### [`selections.select`](../selections.ts#L346-L360) +### [`selections.select`](../selections.ts#L344-L358) Select within selections. #### Variants -| Title | Identifier | Keybinding | Command | -| -------------- | --------------- | --------------------- | ------------------------------------------------------------------------------------------------- | -| Leap or select | `select.orLeap` | `s` (kakoune: normal) | `[".ifEmpty", { then: [[".seek.leap", { ... }]], otherwise: [[".selections.select", { ... }]] }]` | +| Title | Identifier | Keybinding | Command | +| -------------- | --------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------- | +| Leap or select | `select.orLeap` | `s` (core: normal), `s` (helix: select) | `[".ifEmpty", { then: [[".seek.leap", { ... }]], otherwise: [[".selections.select", { ... }]] }]` | This command: - accepts an argument of type `{ re?: string | RegExp }`. @@ -1497,7 +1514,7 @@ This command: -### [`selections.split`](../selections.ts#L379-L390) +### [`selections.split`](../selections.ts#L377-L388) Split selections. @@ -1507,19 +1524,20 @@ This command: - takes an argument `excludeEmpty` of type `boolean`. - takes an argument `interactive` of type `boolean`. -Default keybinding: `s-s` (kakoune: normal) +Default keybinding: `s-s` (core: normal) +`s-s` (helix: select) -### [`selections.splitLines`](../selections.ts#L415-L431) +### [`selections.splitLines`](../selections.ts#L413-L429) Split selections at line boundaries. #### Variants -| Title | Identifier | Keybinding | Command | -| ----------------------- | ---------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------- | -| Leap or select backward | `splitLines.orLeap.backward` | `a-s` (kakoune: normal) | `[".ifEmpty", { then: [[".seek.leap", { direction: -1, ... }]], otherwise: [[".selections.splitLines", { ... }]] }]` | +| Title | Identifier | Keybinding | Command | +| ----------------------- | ---------------------------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| Leap or select backward | `splitLines.orLeap.backward` | `a-s` (core: normal), `a-s` (helix: select) | `[".ifEmpty", { then: [[".seek.leap", { direction: -1, ... }]], otherwise: [[".selections.splitLines", { ... }]] }]` | This command: - may be repeated with a given number of repetitions. @@ -1527,7 +1545,7 @@ This command: -### [`selections.expandToLines`](../selections.ts#L474-L481) +### [`selections.expandToLines`](../selections.ts#L472-L479) Expand to lines. @@ -1536,10 +1554,12 @@ Expand selections to contain full lines (including end-of-line characters). Default keybinding: `x` (kakoune: normal) +`s-x` (helix: normal) +`s-x` (helix: select) -### [`selections.trimLines`](../selections.ts#L508-L515) +### [`selections.trimLines`](../selections.ts#L506-L513) Trim lines. @@ -1547,11 +1567,12 @@ Trim selections to only contain full lines (from start to line break). -Default keybinding: `a-x` (kakoune: normal) +Default keybinding: `a-x` (core: normal) +`a-x` (helix: select) -### [`selections.trimWhitespace`](../selections.ts#L540-L547) +### [`selections.trimWhitespace`](../selections.ts#L538-L545) Trim whitespace. @@ -1559,11 +1580,12 @@ Trim whitespace at beginning and end of selections. -Default keybinding: `_` (kakoune: normal) +Default keybinding: `_` (core: normal) +`_` (helix: select) -### [`selections.reduce`](../selections.ts#L566-L585) +### [`selections.reduce`](../selections.ts#L564-L583) Reduce selections to their cursor. @@ -1579,11 +1601,12 @@ This command: - takes an argument `empty` of type `boolean`. - takes an argument `where` of type `"active" | "anchor" | "start" | "end" | "both"`. -Default keybinding: `;` (kakoune: normal) +Default keybinding: `;` (core: normal) +`;` (helix: select) -### [`selections.changeDirection`](../selections.ts#L647-L662) +### [`selections.changeDirection`](../selections.ts#L645-L660) Change direction of selections. @@ -1597,11 +1620,12 @@ Change direction of selections. | Backward selections | `faceBackward` | | `[".selections.changeDirection", { direction: -1 }]` | -Default keybinding: `a-;` (kakoune: normal) +Default keybinding: `a-;` (core: normal) +`a-;` (helix: select) -### [`selections.changeOrder`](../selections.ts#L687-L701) +### [`selections.changeOrder`](../selections.ts#L685-L699) Reverse selections. @@ -1615,7 +1639,7 @@ Reverse selections. -### [`selections.sort`](../selections.ts#L714-L726) +### [`selections.sort`](../selections.ts#L712-L724) Sort selections. @@ -1626,7 +1650,7 @@ This command: -### [`selections.copy`](../selections.ts#L799-L817) +### [`selections.copy`](../selections.ts#L797-L815) Copy selections below. @@ -1644,7 +1668,7 @@ Default keybinding: `s-c` (kakoune: normal) -### [`selections.merge`](../selections.ts#L851-L856) +### [`selections.merge`](../selections.ts#L849-L854) Merge contiguous selections. @@ -1654,13 +1678,13 @@ Default keybinding: `a-_` (kakoune: normal) -### [`selections.open`](../selections.ts#L860-L863) +### [`selections.open`](../selections.ts#L858-L861) Open selected file. -### [`selections.toggleIndices`](../selections.ts#L876-L893) +### [`selections.toggleIndices`](../selections.ts#L874-L891) Toggle selection indices. @@ -1703,38 +1727,42 @@ Default keybinding: `a-)` (kakoune: normal) -### [`selections.rotate.contents`](../selections.rotate.ts#L28-L37) +### [`selections.rotate.contents`](../selections.rotate.ts#L28-L39) Rotate selections clockwise (contents only). + The following command is also available: -| Title | Identifier | Command | -| --------------------------------------------------- | ------------------ | ---------------------------------------------------- | -| Rotate selections counter-clockwise (contents only) | `contents.reverse` | `[".selections.rotate.contents", { reverse: true }]` | +| Title | Identifier | Keybinding | Command | +| --------------------------------------------------- | ------------------ | -------------------------------------------- | ---------------------------------------------------- | +| Rotate selections counter-clockwise (contents only) | `contents.reverse` | `a-(` (helix: normal), `a-(` (helix: select) | `[".selections.rotate.contents", { reverse: true }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `reverse` of type `boolean`. +Default keybinding: `a-)` (helix: normal) +`a-)` (helix: select) + -### [`selections.rotate.selections`](../selections.rotate.ts#L45-L56) +### [`selections.rotate.selections`](../selections.rotate.ts#L47-L58) Rotate selections clockwise (selections only). The following keybinding is also available: -| Title | Identifier | Keybinding | Command | -| ----------------------------------------------------- | -------------------- | --------------------- | ------------------------------------------------------ | -| Rotate selections counter-clockwise (selections only) | `selections.reverse` | `(` (kakoune: normal) | `[".selections.rotate.selections", { reverse: true }]` | +| Title | Identifier | Keybinding | Command | +| ----------------------------------------------------- | -------------------- | --------------------------------------- | ------------------------------------------------------ | +| Rotate selections counter-clockwise (selections only) | `selections.reverse` | `(` (core: normal), `(` (helix: select) | `[".selections.rotate.selections", { reverse: true }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `reverse` of type `boolean`. -Default keybinding: `)` (kakoune: normal) +Default keybinding: `)` (core: normal) ## [`view`](../view.ts) @@ -1742,10 +1770,10 @@ Moving the editor view. #### Predefined keybindings -| Title | Keybinding | Command | -| ----------------------- | ----------------------- | ---------------------------------------------------- | -| Show view menu | `v` (kakoune: normal) | `[".openMenu", { menu: "view", ... }]` | -| Show view menu (locked) | `s-v` (kakoune: normal) | `[".openMenu", { menu: "view", locked: true, ... }]` | +| Title | Keybinding | Command | +| ----------------------- | --------------------------------------------------------------------- | ---------------------------------------------------- | +| Show view menu | `v` (kakoune: normal), `z` (helix: normal), `z` (helix: select) | `[".openMenu", { menu: "view", ... }]` | +| Show view menu (locked) | `s-v` (kakoune: normal), `s-z` (helix: normal), `s-z` (helix: select) | `[".openMenu", { menu: "view", locked: true, ... }]` | diff --git a/src/commands/layouts/qwerty.md b/src/commands/layouts/qwerty.md index 1c5830ea..563a19d4 100644 --- a/src/commands/layouts/qwerty.md +++ b/src/commands/layouts/qwerty.md @@ -12,47 +12,47 @@ devdev.copyLastErrorMessageCopies the last encountered error message dev.setSelectionBehaviorSet the selection behavior of the specified mode editedit.alignAlign selectionsShift+7 (editorTextFocus && dance.mode == 'normal') -edit.case.swapSwap caseAlt+` (editorTextFocus && dance.mode == 'normal') -edit.case.toLowerTransform to lower case` (editorTextFocus && dance.mode == 'normal') -edit.case.toUpperTransform to upper caseShift+` (editorTextFocus && dance.mode == 'normal') -edit.copyIndentationCopy indentationShift+Alt+7 (editorTextFocus && dance.mode == 'normal') -edit.deindentDeindent selected linesShift+Alt+, (editorTextFocus && dance.mode == 'normal') -edit.deindent.withIncompleteDeindent selected lines (including incomplete indent)Shift+, (editorTextFocus && dance.mode == 'normal') -edit.deleteDeleteAlt+D (editorTextFocus && dance.mode == 'normal') -edit.delete-insertDelete and switch to InsertAlt+C (editorTextFocus && dance.mode == 'normal') -edit.newLine.above.insertInsert new line above and switch to insertShift+O (editorTextFocus && dance.mode == 'normal') -edit.newLine.below.insertInsert new line below and switch to insertO (editorTextFocus && dance.mode == 'normal') -edit.paste.afterPaste after +edit.case.swapSwap caseAlt+` (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.case.toLowerTransform to lower case` (editorTextFocus && dance.mode == 'normal')` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.case.toUpperTransform to upper caseShift+` (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Alt+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Alt+` (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.copyIndentationCopy indentationShift+Alt+7 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.deindentDeindent selected linesShift+Alt+, (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.deindent.withIncompleteDeindent selected lines (including incomplete indent)Shift+, (editorTextFocus && dance.mode == 'normal')Shift+, (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.deleteDeleteAlt+D (editorTextFocus && dance.mode == 'normal')Alt+D (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.delete-insertDelete and switch to InsertAlt+C (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.newLine.above.insertInsert new line above and switch to insertShift+O (editorTextFocus && dance.mode == 'normal')Shift+O (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.newLine.below.insertInsert new line below and switch to insertO (editorTextFocus && dance.mode == 'normal')O (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.paste.afterPaste afterP (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') edit.paste.after.selectPaste after and selectP (editorTextFocus && dance.mode == 'normal') -edit.paste.beforePaste before +edit.paste.beforePaste beforeShift+P (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') edit.paste.before.selectPaste before and selectShift+P (editorTextFocus && dance.mode == 'normal') edit.pasteAll.afterPaste all after -edit.pasteAll.after.selectPaste all after and selectAlt+P (editorTextFocus && dance.mode == 'normal') +edit.pasteAll.after.selectPaste all after and selectAlt+P (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') edit.pasteAll.beforePaste all before -edit.pasteAll.before.selectPaste all before and selectShift+Alt+P (editorTextFocus && dance.mode == 'normal') -edit.selectRegister-insertPick register and replaceCtrl+R (editorTextFocus && dance.mode == 'normal')Ctrl+R (editorTextFocus && dance.mode == 'insert') -edit.yank-deleteCopy and deleteD (editorTextFocus && dance.mode == 'normal')D (editorTextFocus && dance.mode == 'select') -edit.yank-delete-insertCopy, delete and switch to InsertC (editorTextFocus && dance.mode == 'normal')C (editorTextFocus && dance.mode == 'select') -edit.yank-replaceCopy and replaceShift+R (editorTextFocus && dance.mode == 'normal') -edit.indentIndent selected linesShift+. (editorTextFocus && dance.mode == 'normal') -edit.indent.withEmptyIndent selected lines (including empty lines)Shift+Alt+. (editorTextFocus && dance.mode == 'normal') -edit.insertInsert contents of registerShift+Alt+R (editorTextFocus && dance.mode == 'normal') -edit.joinJoin linesAlt+J (editorTextFocus && dance.mode == 'normal') -edit.join.selectJoin lines and select inserted separatorsShift+Alt+J (editorTextFocus && dance.mode == 'normal') -edit.newLine.aboveInsert new line above each selectionShift+Alt+O (editorTextFocus && dance.mode == 'normal') -edit.newLine.belowInsert new line below each selectionAlt+O (editorTextFocus && dance.mode == 'normal') +edit.pasteAll.before.selectPaste all before and selectShift+Alt+P (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.selectRegister-insertPick register and replaceCtrl+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Ctrl+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') +edit.yank-deleteCopy and deleteD (editorTextFocus && dance.mode == 'normal')D (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.yank-delete-insertCopy, delete and switch to InsertC (editorTextFocus && dance.mode == 'normal')C (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.yank-replaceCopy and replaceShift+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.indentIndent selected linesShift+. (editorTextFocus && dance.mode == 'normal')Shift+. (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.indent.withEmptyIndent selected lines (including empty lines)Shift+Alt+. (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.insertInsert contents of registerShift+Alt+R (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.joinJoin linesAlt+J (editorTextFocus && dance.mode == 'normal')Shift+J (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.join.selectJoin lines and select inserted separatorsShift+Alt+J (editorTextFocus && dance.mode == 'normal')Shift+Alt+J (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.newLine.aboveInsert new line above each selectionShift+Alt+O (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +edit.newLine.belowInsert new line below each selectionAlt+O (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') edit.replaceCharactersReplace charactersR (editorTextFocus && dance.mode == 'normal') -historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal') +historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal')Alt+. (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') history.repeat.selectionRepeat last selection change -history.recording.playReplay recordingQ (editorTextFocus && dance.mode == 'normal') -history.recording.startStart recordingShift+Q (editorTextFocus && dance.mode == 'normal' && !dance.isRecording) -history.recording.stopStop recordingEscape (editorTextFocus && dance.mode == 'normal' && dance.isRecording)Shift+Q (editorTextFocus && dance.mode == 'normal' && dance.isRecording) -history.redoRedoShift+U (editorTextFocus && dance.mode == 'normal')Shift+U (editorTextFocus && dance.mode == 'select') -history.redo.selectionsRedo a change of selectionsShift+Alt+U (editorTextFocus && dance.mode == 'normal') +history.recording.playReplay recordingQ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +history.recording.startStart recordingShift+Q (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && !dance.isRecording) +history.recording.stopStop recordingEscape (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && dance.isRecording)Shift+Q (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && dance.isRecording) +history.redoRedoShift+U (editorTextFocus && dance.mode == 'normal')Shift+U (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +history.redo.selectionsRedo a change of selectionsShift+Alt+U (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') history.repeatRepeat last change history.repeat.editRepeat last edit without a command. (editorTextFocus && dance.mode == 'normal')NumPad_Decimal (editorTextFocus && dance.mode == 'normal') -history.undoUndoU (editorTextFocus && dance.mode == 'normal')U (editorTextFocus && dance.mode == 'select') -history.undo.selectionsUndo a change of selectionsAlt+U (editorTextFocus && dance.mode == 'normal') +history.undoUndoU (editorTextFocus && dance.mode == 'normal')U (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +history.undo.selectionsUndo a change of selectionsAlt+U (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') keybindingskeybindings.setupSet up Dance keybindings misccancelCancel Dance operationEscape (editorTextFocus && dance.mode == 'normal' && !dance.isRecording && !markersNavigationVisible)Escape (editorTextFocus && dance.mode == 'input') changeInputChange current input @@ -64,70 +64,70 @@ selections are empty selectRegisterSelect register for next commandShift+' (editorTextFocus && dance.mode == 'normal') updateCountUpdate Dance count updateRegisterUpdate the contents of a register -modesmodes.insert.afterInsert afterA (editorTextFocus && dance.mode == 'normal') -modes.insert.beforeInsert beforeI (editorTextFocus && dance.mode == 'normal') -modes.insert.lineEndInsert at line endShift+A (editorTextFocus && dance.mode == 'normal') -modes.insert.lineStartInsert at line startShift+I (editorTextFocus && dance.mode == 'normal') +modesmodes.insert.afterInsert afterA (editorTextFocus && dance.mode == 'normal')A (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.insert.beforeInsert beforeI (editorTextFocus && dance.mode == 'normal')I (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.insert.lineEndInsert at line endShift+A (editorTextFocus && dance.mode == 'normal')Shift+A (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.insert.lineStartInsert at line startShift+I (editorTextFocus && dance.mode == 'normal')Shift+I (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') modes.set.insertSet mode to Insert -modes.set.normalSet mode to NormalEscape (editorTextFocus && dance.mode == 'insert')Escape (editorTextFocus && dance.mode == 'select') -modes.set.selectSet mode to Select -modes.set.temporarily.insertTemporary Insert modeCtrl+V (editorTextFocus && dance.mode == 'normal') -modes.set.temporarily.normalTemporary Normal modeCtrl+V (editorTextFocus && dance.mode == 'insert') +modes.set.normalSet mode to NormalEscape (editorTextFocus && dance.mode == 'insert')Escape (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')V (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +modes.set.selectSet mode to SelectV (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +modes.set.temporarily.insertTemporary Insert modeCtrl+V (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +modes.set.temporarily.normalTemporary Normal modeCtrl+V (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') modes.setSet Dance mode modes.set.temporarilySet Dance mode temporarily searchsearch.nextSelect next matchN (editorTextFocus && dance.mode == 'normal') search.searchSearch/ (editorTextFocus && dance.mode == 'normal')NumPad_Divide (editorTextFocus && dance.mode == 'normal') -search.backwardSearch backwardAlt+/ (editorTextFocus && dance.mode == 'normal') -search.backward.extendSearch backward (extend)Shift+Alt+/ (editorTextFocus && dance.mode == 'normal') -search.extendSearch (extend)Shift+/ (editorTextFocus && dance.mode == 'normal') -search.next.addAdd next matchShift+N (editorTextFocus && dance.mode == 'normal') -search.previousSelect previous matchAlt+N (editorTextFocus && dance.mode == 'normal') -search.previous.addAdd previous matchShift+Alt+N (editorTextFocus && dance.mode == 'normal') +search.backwardSearch backwardAlt+/ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +search.backward.extendSearch backward (extend)Shift+Alt+/ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +search.extendSearch (extend)Shift+/ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')/ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +search.next.addAdd next matchShift+N (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')N (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +search.previousSelect previous matchAlt+N (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+N (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +search.previous.addAdd previous matchShift+Alt+N (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+N (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') search.selection.smartSearch current selection (smart)Shift+8 (editorTextFocus && dance.mode == 'normal')NumPad_Multiply (editorTextFocus && dance.mode == 'normal') search.selectionSearch current selectionShift+Alt+8 (editorTextFocus && dance.mode == 'normal')Alt+NumPad_Multiply (editorTextFocus && dance.mode == 'normal') -seekseek.enclosingSelect to next enclosing characterM (editorTextFocus && dance.mode == 'normal') +seekseek.enclosingSelect to next enclosing characterM (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') seek.leapLeap forward seek.objectSelect object seek.seekSelect to character (excluded)T (editorTextFocus && dance.mode == 'normal') -seek.askObjectSelect whole objectAlt+A (editorTextFocus && dance.mode == 'normal')Alt+A (editorTextFocus && dance.mode == 'insert') -seek.askObject.endSelect to whole object end] (editorTextFocus && dance.mode == 'normal') -seek.askObject.end.extendExtend to whole object endShift+] (editorTextFocus && dance.mode == 'normal') -seek.askObject.innerSelect inner objectAlt+I (editorTextFocus && dance.mode == 'normal')Alt+I (editorTextFocus && dance.mode == 'insert') -seek.askObject.inner.endSelect to inner object endAlt+] (editorTextFocus && dance.mode == 'normal') -seek.askObject.inner.end.extendExtend to inner object endShift+Alt+] (editorTextFocus && dance.mode == 'normal') -seek.askObject.inner.startSelect to inner object startAlt+[ (editorTextFocus && dance.mode == 'normal') -seek.askObject.inner.start.extendExtend to inner object startShift+Alt+[ (editorTextFocus && dance.mode == 'normal') -seek.askObject.startSelect to whole object start[ (editorTextFocus && dance.mode == 'normal') -seek.askObject.start.extendExtend to whole object startShift+[ (editorTextFocus && dance.mode == 'normal') -seek.backwardSelect to character (excluded, backward)Alt+T (editorTextFocus && dance.mode == 'normal') -seek.enclosing.backwardSelect to previous enclosing characterAlt+M (editorTextFocus && dance.mode == 'normal') -seek.enclosing.extendExtend to next enclosing characterShift+M (editorTextFocus && dance.mode == 'normal') -seek.enclosing.extend.backwardExtend to previous enclosing characterShift+Alt+M (editorTextFocus && dance.mode == 'normal') -seek.extendExtend to character (excluded)Shift+T (editorTextFocus && dance.mode == 'normal')T (editorTextFocus && dance.mode == 'select') -seek.extend.backwardExtend to character (excluded, backward)Shift+Alt+T (editorTextFocus && dance.mode == 'normal')Shift+T (editorTextFocus && dance.mode == 'select') +seek.askObjectSelect whole objectAlt+A (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Alt+A (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') +seek.askObject.endSelect to whole object end] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.end.extendExtend to whole object endShift+] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.innerSelect inner objectAlt+I (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Alt+I (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert') +seek.askObject.inner.endSelect to inner object endAlt+] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.inner.end.extendExtend to inner object endShift+Alt+] (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.inner.startSelect to inner object startAlt+[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.inner.start.extendExtend to inner object startShift+Alt+[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.startSelect to whole object start[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.askObject.start.extendExtend to whole object startShift+[ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.backwardSelect to character (excluded, backward)Alt+T (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+T (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.enclosing.backwardSelect to previous enclosing characterAlt+M (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.enclosing.extendExtend to next enclosing characterShift+M (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.enclosing.extend.backwardExtend to previous enclosing characterShift+Alt+M (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +seek.extendExtend to character (excluded)Shift+T (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')T (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.extend.backwardExtend to character (excluded, backward)Shift+Alt+T (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+T (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.includedSelect to character (included)F (editorTextFocus && dance.mode == 'normal') -seek.included.backwardSelect to character (included, backward)Alt+F (editorTextFocus && dance.mode == 'normal') -seek.included.extendExtend to character (included)Shift+F (editorTextFocus && dance.mode == 'normal')F (editorTextFocus && dance.mode == 'select') -seek.included.extend.backwardExtend to character (included, backward)Shift+Alt+F (editorTextFocus && dance.mode == 'normal')Shift+F (editorTextFocus && dance.mode == 'select') +seek.included.backwardSelect to character (included, backward)Alt+F (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+F (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.included.extendExtend to character (included)Shift+F (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')F (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.included.extend.backwardExtend to character (included, backward)Shift+Alt+F (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+F (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.leap.backwardLeap backward seek.syntax.child.experimentalSelect child syntax object seek.syntax.next.experimentalSelect next syntax object seek.syntax.parent.experimentalSelect parent syntax object seek.syntax.previous.experimentalSelect previous syntax object seek.word.backwardSelect to previous word startB (editorTextFocus && dance.mode == 'normal') -seek.word.extendExtend to next word startShift+W (editorTextFocus && dance.mode == 'normal')W (editorTextFocus && dance.mode == 'select') -seek.word.extend.backwardExtend to previous word startShift+B (editorTextFocus && dance.mode == 'normal')B (editorTextFocus && dance.mode == 'select') -seek.word.wsSelect to next non-whitespace word startAlt+W (editorTextFocus && dance.mode == 'normal') -seek.word.ws.backwardSelect to previous non-whitespace word startAlt+B (editorTextFocus && dance.mode == 'normal') -seek.word.ws.extendExtend to next non-whitespace word startShift+Alt+W (editorTextFocus && dance.mode == 'normal')Shift+W (editorTextFocus && dance.mode == 'select') -seek.word.ws.extend.backwardExtend to previous non-whitespace word startShift+Alt+B (editorTextFocus && dance.mode == 'normal')Shift+B (editorTextFocus && dance.mode == 'select') +seek.word.extendExtend to next word startShift+W (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')W (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.word.extend.backwardExtend to previous word startShift+B (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')B (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.word.wsSelect to next non-whitespace word startAlt+W (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+W (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.word.ws.backwardSelect to previous non-whitespace word startAlt+B (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+B (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.word.ws.extendExtend to next non-whitespace word startShift+Alt+W (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+W (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.word.ws.extend.backwardExtend to previous non-whitespace word startShift+Alt+B (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+B (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.wordEndSelect to next word endE (editorTextFocus && dance.mode == 'normal') -seek.wordEnd.extendExtend to next word endShift+E (editorTextFocus && dance.mode == 'normal')E (editorTextFocus && dance.mode == 'select') -seek.wordEnd.wsSelect to next non-whitespace word endAlt+E (editorTextFocus && dance.mode == 'normal') -seek.wordEnd.ws.extendExtend to next non-whitespace word endShift+Alt+E (editorTextFocus && dance.mode == 'normal')Shift+E (editorTextFocus && dance.mode == 'select') +seek.wordEnd.extendExtend to next word endShift+E (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')E (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +seek.wordEnd.wsSelect to next non-whitespace word endAlt+E (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+E (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal') +seek.wordEnd.ws.extendExtend to next non-whitespace word endShift+Alt+E (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+E (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') seek.syntax.experimentalSelect syntax object seek.wordSelect to next word startW (editorTextFocus && dance.mode == 'normal') -selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.mode == 'normal') +selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') select.firstVisibleLineSelect to first visible line select.horizontallySelect horizontally select.lastLineSelect to last line @@ -135,82 +135,82 @@ selections are empty select.line.aboveSelect line above select.line.above.extendExtend to line above select.line.belowSelect line below -select.line.below.extendExtend to line below -select.lineEndSelect to line endAlt+L (editorTextFocus && dance.mode == 'normal')End (editorTextFocus && dance.mode == 'normal') -select.lineStartSelect to line startAlt+H (editorTextFocus && dance.mode == 'normal')Home (editorTextFocus && dance.mode == 'normal') +select.line.below.extendExtend to line belowX (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.lineEndSelect to line endAlt+L (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')End (editorTextFocus && dance.mode == 'normal') +select.lineStartSelect to line startAlt+H (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Home (editorTextFocus && dance.mode == 'normal') select.middleVisibleLineSelect to middle visible line -select.documentEnd.extendExtend to last character -select.documentEnd.jumpJump to last character -select.down.extendExtend downShift+J (editorTextFocus && dance.mode == 'normal')Shift+Down (editorTextFocus && dance.mode == 'normal')J (editorTextFocus && dance.mode == 'select')Down (editorTextFocus && dance.mode == 'select') +select.documentEnd.extendExtend to last character +select.documentEnd.jumpJump to last character +select.down.extendExtend downShift+J (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Down (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')J (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Down (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') select.down.jumpJump downJ (editorTextFocus && dance.mode == 'normal')Down (editorTextFocus && dance.mode == 'normal') -select.firstLine.extendExtend to first line -select.firstLine.jumpJump to first line -select.firstVisibleLine.extendExtend to first visible line -select.firstVisibleLine.jumpJump to first visible line -select.lastLine.extendExtend to last line -select.lastLine.jumpJump to last line -select.lastVisibleLine.extendExtend to last visible line -select.lastVisibleLine.jumpJump to last visible line -select.left.extendExtend leftShift+H (editorTextFocus && dance.mode == 'normal')Shift+Left (editorTextFocus && dance.mode == 'normal')H (editorTextFocus && dance.mode == 'select')Left (editorTextFocus && dance.mode == 'select') -select.left.jumpJump leftH (editorTextFocus && dance.mode == 'normal')Left (editorTextFocus && dance.mode == 'normal') -select.lineEnd.extendExtend to line endShift+Alt+L (editorTextFocus && dance.mode == 'normal')Shift+End (editorTextFocus && dance.mode == 'normal') -select.lineStart.extendExtend to line startShift+Alt+H (editorTextFocus && dance.mode == 'normal')Shift+Home (editorTextFocus && dance.mode == 'normal') -select.lineStart.jumpJump to line start -select.lineStart.skipBlank.extendExtend to line start (skip blank) -select.lineStart.skipBlank.jumpJump to line start (skip blank) -select.middleVisibleLine.extendExtend to middle visible line -select.middleVisibleLine.jumpJump to middle visible line -select.right.extendExtend rightShift+L (editorTextFocus && dance.mode == 'normal')Shift+Right (editorTextFocus && dance.mode == 'normal')L (editorTextFocus && dance.mode == 'select')Right (editorTextFocus && dance.mode == 'select') -select.right.jumpJump rightL (editorTextFocus && dance.mode == 'normal')Right (editorTextFocus && dance.mode == 'normal') -select.to.extendExtend toShift+G (editorTextFocus && dance.mode == 'normal')G (editorTextFocus && dance.mode == 'select') -select.to.jumpGo toG (editorTextFocus && dance.mode == 'normal') -select.up.extendExtend upShift+K (editorTextFocus && dance.mode == 'normal')Shift+Up (editorTextFocus && dance.mode == 'normal')K (editorTextFocus && dance.mode == 'select')Up (editorTextFocus && dance.mode == 'select') +select.firstLine.extendExtend to first line +select.firstLine.jumpJump to first line +select.firstVisibleLine.extendExtend to first visible line +select.firstVisibleLine.jumpJump to first visible line +select.lastLine.extendExtend to last line +select.lastLine.jumpJump to last line +select.lastVisibleLine.extendExtend to last visible line +select.lastVisibleLine.jumpJump to last visible line +select.left.extendExtend leftShift+H (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Left (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')H (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Left (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.left.jumpJump leftH (editorTextFocus && dance.mode == 'normal')Left (editorTextFocus && dance.mode == 'normal') +select.lineEnd.extendExtend to line endShift+Alt+L (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+End (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')End (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.lineStart.extendExtend to line startShift+Alt+H (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Home (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Home (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.lineStart.jumpJump to line start +select.lineStart.skipBlank.extendExtend to line start (skip blank) +select.lineStart.skipBlank.jumpJump to line start (skip blank) +select.middleVisibleLine.extendExtend to middle visible line +select.middleVisibleLine.jumpJump to middle visible line +select.right.extendExtend rightShift+L (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Right (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')L (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Right (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.right.jumpJump rightL (editorTextFocus && dance.mode == 'normal')Right (editorTextFocus && dance.mode == 'normal') +select.to.extendExtend toShift+G (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')G (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +select.to.jumpGo toG (editorTextFocus && dance.mode == 'normal') +select.up.extendExtend upShift+K (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+Up (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')K (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select')Up (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') select.up.jumpJump upK (editorTextFocus && dance.mode == 'normal')Up (editorTextFocus && dance.mode == 'normal') select.toSelect to select.verticallySelect vertically -selectionsselections.changeDirectionChange direction of selectionsAlt+; (editorTextFocus && dance.mode == 'normal') +selectionsselections.changeDirectionChange direction of selectionsAlt+; (editorTextFocus && dance.mode == 'normal')Alt+; (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.changeOrderReverse selections -selections.copyCopy selections belowShift+C (editorTextFocus && dance.mode == 'normal') -selections.expandToLinesExpand to linesX (editorTextFocus && dance.mode == 'normal') -selections.filterFilter selectionsShift+4 (editorTextFocus && dance.mode == 'normal') -selections.mergeMerge contiguous selectionsShift+Alt+- (editorTextFocus && dance.mode == 'normal') +selections.copyCopy selections belowShift+C (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.expandToLinesExpand to linesX (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal')Shift+X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.filterFilter selectionsShift+4 (editorTextFocus && dance.mode == 'normal')Shift+4 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.mergeMerge contiguous selectionsShift+Alt+- (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') selections.openOpen selected file -selections.pipePipe selectionsShift+Alt+\ (editorTextFocus && dance.mode == 'normal') -selections.reduceReduce selections to their cursor; (editorTextFocus && dance.mode == 'normal') -selections.restoreRestore selectionsZ (editorTextFocus && dance.mode == 'normal') -selections.restore.withCurrentCombine register selections with current onesAlt+Z (editorTextFocus && dance.mode == 'normal') -selections.saveSave selectionsShift+Z (editorTextFocus && dance.mode == 'normal') -selections.saveTextCopy selections textY (editorTextFocus && dance.mode == 'normal') +selections.pipePipe selectionsShift+Alt+\ (editorTextFocus && dance.mode == 'normal')Shift+Alt+\ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.reduceReduce selections to their cursor; (editorTextFocus && dance.mode == 'normal'); (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.restoreRestore selectionsZ (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.restore.withCurrentCombine register selections with current onesAlt+Z (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.saveSave selectionsShift+Z (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.saveTextCopy selections textY (editorTextFocus && dance.mode == 'normal')Y (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.selectSelect within selections -selections.clear.mainClear main selectionsAlt+, (editorTextFocus && dance.mode == 'normal') -selections.clear.secondaryClear secondary selections, (editorTextFocus && dance.mode == 'normal') -selections.copy.aboveCopy selections aboveShift+Alt+C (editorTextFocus && dance.mode == 'normal') -selections.faceBackwardBackward selections -selections.faceForwardForward selectionsShift+Alt+; (editorTextFocus && dance.mode == 'normal') -selections.filter.regexpKeep matching selectionsAlt+K (editorTextFocus && dance.mode == 'normal') -selections.filter.regexp.inverseClear matching selectionsShift+Alt+K (editorTextFocus && dance.mode == 'normal') -selections.hideIndicesHide selection indices -selections.orderAscendingOrder selections ascending -selections.orderDescendingOrder selections descending -selections.pipe.appendPipe and appendShift+1 (editorTextFocus && dance.mode == 'normal') -selections.pipe.prependPipe and prependShift+Alt+1 (editorTextFocus && dance.mode == 'normal') -selections.pipe.replacePipe and replaceShift+\ (editorTextFocus && dance.mode == 'normal') -selections.reduce.edgesReduce selections to their endsShift+Alt+S (editorTextFocus && dance.mode == 'normal') -selections.select.orLeapLeap or selectS (editorTextFocus && dance.mode == 'normal') -selections.showIndicesShow selection indices -selections.splitLines.orLeap.backwardLeap or select backwardAlt+S (editorTextFocus && dance.mode == 'normal') +selections.clear.mainClear main selectionsAlt+, (editorTextFocus && dance.mode == 'normal')Alt+, (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.clear.secondaryClear secondary selections, (editorTextFocus && dance.mode == 'normal'), (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.copy.aboveCopy selections aboveShift+Alt+C (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.faceBackwardBackward selections +selections.faceForwardForward selectionsShift+Alt+; (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.filter.regexpKeep matching selectionsAlt+K (editorTextFocus && dance.mode == 'normal')Alt+K (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.filter.regexp.inverseClear matching selectionsShift+Alt+K (editorTextFocus && dance.mode == 'normal')Shift+Alt+K (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.hideIndicesHide selection indices +selections.orderAscendingOrder selections ascending +selections.orderDescendingOrder selections descending +selections.pipe.appendPipe and appendShift+1 (editorTextFocus && dance.mode == 'normal')Shift+1 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.pipe.prependPipe and prependShift+Alt+1 (editorTextFocus && dance.mode == 'normal')Shift+Alt+1 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.pipe.replacePipe and replaceShift+\ (editorTextFocus && dance.mode == 'normal')Shift+\ (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.reduce.edgesReduce selections to their endsShift+Alt+S (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.select.orLeapLeap or selectS (editorTextFocus && dance.mode == 'normal')S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.showIndicesShow selection indices +selections.splitLines.orLeap.backwardLeap or select backwardAlt+S (editorTextFocus && dance.mode == 'normal')Alt+S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.sortSort selections -selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal') +selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal')Shift+S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.splitLinesSplit selections at line boundaries -selections.toggleIndicesToggle selection indicesEnter (editorTextFocus && dance.mode == 'normal') -selections.trimLinesTrim linesAlt+X (editorTextFocus && dance.mode == 'normal') -selections.trimWhitespaceTrim whitespaceShift+- (editorTextFocus && dance.mode == 'normal') -selections.rotateselections.rotate.bothRotate selections clockwiseShift+Alt+0 (editorTextFocus && dance.mode == 'normal') -selections.rotate.contentsRotate selections clockwise (contents only) +selections.toggleIndicesToggle selection indicesEnter (editorTextFocus && dance.behavior == 'dance' && dance.mode == 'normal') +selections.trimLinesTrim linesAlt+X (editorTextFocus && dance.mode == 'normal')Alt+X (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.trimWhitespaceTrim whitespaceShift+- (editorTextFocus && dance.mode == 'normal')Shift+- (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.rotateselections.rotate.bothRotate selections clockwiseShift+Alt+0 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.rotate.contentsRotate selections clockwise (contents only)Shift+Alt+0 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+Alt+0 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') selections.rotate.selectionsRotate selections clockwise (selections only)Shift+0 (editorTextFocus && dance.mode == 'normal') -selections.rotate.both.reverseRotate selections counter-clockwiseShift+Alt+9 (editorTextFocus && dance.mode == 'normal') -selections.rotate.contents.reverseRotate selections counter-clockwise (contents only) -selections.rotate.selections.reverseRotate selections counter-clockwise (selections only)Shift+9 (editorTextFocus && dance.mode == 'normal') +selections.rotate.both.reverseRotate selections counter-clockwiseShift+Alt+9 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selections.rotate.contents.reverseRotate selections counter-clockwise (contents only)Shift+Alt+9 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'normal')Shift+Alt+9 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.rotate.selections.reverseRotate selections counter-clockwise (selections only)Shift+9 (editorTextFocus && dance.mode == 'normal')Shift+9 (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') viewview.lineReveals a position based on the main cursor @@ -268,18 +268,18 @@ Specify `all` to paste all contents next to each selection. | Title | Identifier | Keybinding | Commands | | ---------------------------------- | ------------------------ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | | Pick register and replace | `selectRegister-insert` | `c-r` (kakoune: normal), `c-r` (kakoune: insert) | `[".selectRegister", { +register }], [".edit.insert", { ... }]` | -| Paste before | `paste.before` | | `[".edit.insert", { handleNewLine: true, where: "start", ... }]` | -| Paste after | `paste.after` | | `[".edit.insert", { handleNewLine: true, where: "end" , ... }]` | -| Paste before and select | `paste.before.select` | `s-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "start", shift: "select", ... }]` | -| Paste after and select | `paste.after.select` | `p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , shift: "select", ... }]` | +| Paste before | `paste.before` | `s-p` (helix: select) | `[".edit.insert", { handleNewLine: true, where: "start", ... }]` | +| Paste after | `paste.after` | `p` (helix: select) | `[".edit.insert", { handleNewLine: true, where: "end" , ... }]` | +| Paste before and select | `paste.before.select` | `s-p` (core: normal) | `[".edit.insert", { handleNewLine: true, where: "start", shift: "select", ... }]` | +| Paste after and select | `paste.after.select` | `p` (core: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , shift: "select", ... }]` | | Paste all before | `pasteAll.before` | | `[".edit.insert", { handleNewLine: true, where: "start", all: true, ... }]` | | Paste all after | `pasteAll.after` | | `[".edit.insert", { handleNewLine: true, where: "end" , all: true, ... }]` | | Paste all before and select | `pasteAll.before.select` | `s-a-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "start", all: true, shift: "select", ... }]` | | Paste all after and select | `pasteAll.after.select` | `a-p` (kakoune: normal) | `[".edit.insert", { handleNewLine: true, where: "end" , all: true, shift: "select", ... }]` | -| Delete | `delete` | `a-d` (kakoune: normal) | `[".edit.insert", { register: "_", ... }]` | +| Delete | `delete` | `a-d` (core: normal), `a-d` (helix: select) | `[".edit.insert", { register: "_", ... }]` | | Delete and switch to Insert | `delete-insert` | `a-c` (kakoune: normal) | `[".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | -| Copy and delete | `yank-delete` | `d` (kakoune: normal), `d` (helix: select) | `[".selections.saveText", { +register }], [".edit.insert", { register: "_", ... }]` | -| Copy, delete and switch to Insert | `yank-delete-insert` | `c` (kakoune: normal), `c` (helix: select) | `[".selections.saveText", { +register }], [".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | +| Copy and delete | `yank-delete` | `d` (core: normal), `d` (helix: select) | `[".selections.saveText", { +register }], [".edit.insert", { register: "_", ... }]` | +| Copy, delete and switch to Insert | `yank-delete-insert` | `c` (core: normal), `c` (helix: select) | `[".selections.saveText", { +register }], [".modes.set", { mode: "insert", +mode }], [".edit.insert", { register: "_", ... }]` | | Copy and replace | `yank-replace` | `s-r` (kakoune: normal) | `[".selections.saveText", { register: "tmp" }], [".edit.insert"], [".updateRegister", { copyFrom: "tmp", ... }]` | This command: @@ -304,7 +304,8 @@ Join lines. This command: - takes an argument `separator` of type `string`. -Default keybinding: `a-j` (kakoune: normal) +Default keybinding: `a-j` (core: normal) +`s-j` (helix: select) @@ -316,7 +317,8 @@ Join lines and select inserted separators. This command: - takes an argument `separator` of type `string`. -Default keybinding: `s-a-j` (kakoune: normal) +Default keybinding: `s-a-j` (core: normal) +`s-a-j` (helix: select) @@ -328,7 +330,8 @@ Indent selected lines. This command: - may be repeated with a given number of repetitions. -Default keybinding: `>` (kakoune: normal) +Default keybinding: `>` (core: normal) +`>` (helix: select) @@ -364,7 +367,8 @@ Deindent selected lines (including incomplete indent). This command: - may be repeated with a given number of repetitions. -Default keybinding: `<` (kakoune: normal) +Default keybinding: `<` (core: normal) +`<` (helix: select) @@ -374,7 +378,8 @@ Transform to lower case. -Default keybinding: `` ` `` (kakoune: normal) +Default keybinding: `` ` `` (core: normal) +`` ` `` (helix: select) @@ -385,6 +390,8 @@ Transform to upper case. Default keybinding: `` s-` `` (kakoune: normal) +`` a-` `` (helix: normal) +`` a-` `` (helix: select) @@ -395,6 +402,8 @@ Swap case. Default keybinding: `` a-` `` (kakoune: normal) +`` s-` `` (helix: normal) +`` s-` `` (helix: select) @@ -407,7 +416,7 @@ This command: - may be repeated with a given number of repetitions. - takes an input `input` of type `string`. -Default keybinding: `r` (kakoune: normal) +Default keybinding: `r` (core: normal) @@ -422,7 +431,7 @@ before the first character of each selection. This command: - takes an argument `fill` of type `string`. -Default keybinding: `&` (kakoune: normal) +Default keybinding: `&` (core: normal) @@ -451,9 +460,9 @@ keep the current selections. #### Additional keybindings -| Title | Identifier | Keybinding | Commands | -| ------------------------------------------ | ---------------------- | ----------------------- | --------------------------------------------------------------------------------- | -| Insert new line above and switch to insert | `newLine.above.insert` | `s-o` (kakoune: normal) | `[".edit.newLine.above", { shift: "select" }], [".modes.insert.before", { ... }]` | +| Title | Identifier | Keybinding | Commands | +| ------------------------------------------ | ---------------------- | ------------------------------------------- | --------------------------------------------------------------------------------- | +| Insert new line above and switch to insert | `newLine.above.insert` | `s-o` (core: normal), `s-o` (helix: select) | `[".edit.newLine.above", { shift: "select" }], [".modes.insert.before", { ... }]` | This command: - may be repeated with a given number of repetitions. @@ -473,9 +482,9 @@ keep the current selections. #### Additional keybindings -| Title | Identifier | Keybinding | Commands | -| ------------------------------------------ | ---------------------- | --------------------- | --------------------------------------------------------------------------------- | -| Insert new line below and switch to insert | `newLine.below.insert` | `o` (kakoune: normal) | `[".edit.newLine.below", { shift: "select" }], [".modes.insert.before", { ... }]` | +| Title | Identifier | Keybinding | Commands | +| ------------------------------------------ | ---------------------- | --------------------------------------- | --------------------------------------------------------------------------------- | +| Insert new line below and switch to insert | `newLine.below.insert` | `o` (core: normal), `o` (helix: select) | `[".edit.newLine.below", { shift: "select" }], [".modes.insert.before", { ... }]` | This command: - may be repeated with a given number of repetitions. @@ -497,7 +506,7 @@ Undo. This command: - does not require an active text editor. -Default keybinding: `u` (kakoune: normal) +Default keybinding: `u` (core: normal) `u` (helix: select) @@ -510,7 +519,7 @@ Redo. This command: - does not require an active text editor. -Default keybinding: `s-u` (kakoune: normal) +Default keybinding: `s-u` (core: normal) `s-u` (helix: select) @@ -544,10 +553,10 @@ Default keybinding: `s-a-u` (kakoune: normal) Repeat last change. -| Title | Identifier | Keybinding | Commands | -| ---------------------------- | ------------------ | ----------------------- | ----------------------------------------------------------------------------- | -| Repeat last selection change | `repeat.selection` | | `[".history.repeat", { filter: "dance\\.(seek\|select\|selections)", +count }]` | -| Repeat last seek | `repeat.seek` | `a-.` (kakoune: normal) | `[".history.repeat", { filter: "dance\\.seek", +count }]` | +| Title | Identifier | Keybinding | Commands | +| ---------------------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------------------------- | +| Repeat last selection change | `repeat.selection` | | `[".history.repeat", { filter: "dance\\.(seek\|select\|selections)", +count }]` | +| Repeat last seek | `repeat.seek` | `a-.` (core: normal), `a-.` (helix: select) | `[".history.repeat", { filter: "dance\\.seek", +count }]` | This command: - may be repeated with a given number of repetitions. @@ -563,8 +572,8 @@ Repeat last edit without a command. This command: - may be repeated with a given number of repetitions. -Default keybinding: `.` (kakoune: normal) -`NumPad_Decimal` (kakoune: normal) +Default keybinding: `.` (core: normal) +`NumPad_Decimal` (core: normal) @@ -776,7 +785,7 @@ current document. This command: - takes an input `register` of type `string | Register`. -Default keybinding: `"` (kakoune: normal) +Default keybinding: `"` (core: normal) @@ -883,20 +892,20 @@ Set Dance mode. #### Variants -| Title | Identifier | Keybinding | Command | -| ------------------ | ------------ | ---------------------------------------------------- | ----------------------------------------------------------- | -| Set mode to Normal | `set.normal` | `escape` (kakoune: insert), `escape` (helix: select) | `[".modes.set", { mode: "normal" }], ["hideSuggestWidget"]` | -| Set mode to Insert | `set.insert` | | `[".modes.set", { mode: "insert" }]` | -| Set mode to Select | `set.select` | | `[".modes.set", { mode: "select" }]` | +| Title | Identifier | Keybinding | Command | +| ------------------ | ------------ | ---------------------------------------------------------------------- | ----------------------------------------------------------- | +| Set mode to Normal | `set.normal` | `escape` (core: insert), `escape` (helix: select), `v` (helix: select) | `[".modes.set", { mode: "normal" }], ["hideSuggestWidget"]` | +| Set mode to Insert | `set.insert` | | `[".modes.set", { mode: "insert" }]` | +| Set mode to Select | `set.select` | `v` (helix: normal) | `[".modes.set", { mode: "select" }]` | Other variants are provided to switch to insert mode: -| Title | Identifier | Keybinding | Commands | -| -------------------- | ------------------ | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Insert before | `insert.before` | `i` (kakoune: normal) | `[".selections.faceBackward", { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | -| Insert after | `insert.after` | `a` (kakoune: normal) | `[".selections.faceForward" , { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | -| Insert at line start | `insert.lineStart` | `s-i` (kakoune: normal) | `[".select.lineStart", { shift: "jump", skipBlank: true }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | -| Insert at line end | `insert.lineEnd` | `s-a` (kakoune: normal) | `[".select.lineEnd" , { shift: "jump" }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | +| Title | Identifier | Keybinding | Commands | +| -------------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Insert before | `insert.before` | `i` (core: normal), `i` (helix: select) | `[".selections.faceBackward", { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | +| Insert after | `insert.after` | `a` (core: normal), `a` (helix: select) | `[".selections.faceForward" , { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | +| Insert at line start | `insert.lineStart` | `s-i` (core: normal), `s-i` (helix: select) | `[".select.lineStart", { shift: "jump", skipBlank: true }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | +| Insert at line end | `insert.lineEnd` | `s-a` (core: normal), `s-a` (helix: select) | `[".select.lineEnd" , { shift: "jump" }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | This command: @@ -931,11 +940,11 @@ Search for patterns and replace or add selections. Search. -| Title | Identifier | Keybinding | Command | -| ------------------------ | ----------------- | ----------------------- | ------------------------------------------------------ | -| Search (extend) | `extend` | `?` (kakoune: normal) | `[".search", { shift: "extend", ... }]` | -| Search backward | `backward` | `a-/` (kakoune: normal) | `[".search", { direction: -1 , ... }]` | -| Search backward (extend) | `backward.extend` | `a-?` (kakoune: normal) | `[".search", { direction: -1, shift: "extend", ... }]` | +| Title | Identifier | Keybinding | Command | +| ------------------------ | ----------------- | -------------------------------------------- | ------------------------------------------------------ | +| Search (extend) | `extend` | `?` (kakoune: normal), `/` (helix: select) | `[".search", { shift: "extend", ... }]` | +| Search backward | `backward` | `a-/` (kakoune: normal), `?` (helix: normal) | `[".search", { direction: -1 , ... }]` | +| Search backward (extend) | `backward.extend` | `a-?` (kakoune: normal), `?` (helix: select) | `[".search", { direction: -1, shift: "extend", ... }]` | This command: - accepts a register (by default, it uses `slash`). @@ -944,8 +953,8 @@ This command: - takes an argument `add` of type `boolean`. - takes an argument `interactive` of type `boolean`. -Default keybinding: `/` (kakoune: normal) -`NumPad_Divide` (kakoune: normal) +Default keybinding: `/` (core: normal) +`NumPad_Divide` (core: normal) @@ -954,16 +963,16 @@ Default keybinding: `/` (kakoune: normal) Search current selection. -| Title | Identifier | Keybinding | Command | -| -------------------------------- | ----------------- | ---------------------------------------------------------- | --------------------------------------------------- | -| Search current selection (smart) | `selection.smart` | `*` (kakoune: normal), `NumPad_Multiply` (kakoune: normal) | `[".search.selection", { smart: true, +register }]` | +| Title | Identifier | Keybinding | Command | +| -------------------------------- | ----------------- | ---------------------------------------------------- | --------------------------------------------------- | +| Search current selection (smart) | `selection.smart` | `*` (core: normal), `NumPad_Multiply` (core: normal) | `[".search.selection", { smart: true, +register }]` | This command: - accepts a register (by default, it uses `slash`). - takes an argument `smart` of type `boolean`. -Default keybinding: `a-*` (kakoune: normal) -`a-NumPad_Multiply` (kakoune: normal) +Default keybinding: `a-*` (core: normal) +`a-NumPad_Multiply` (core: normal) @@ -972,18 +981,18 @@ Default keybinding: `a-*` (kakoune: normal) Select next match. -| Title | Identifier | Keybinding | Command | -| --------------------- | -------------- | ------------------------- | ----------------------------------------------------- | -| Add next match | `next.add` | `s-n` (kakoune: normal) | `[".search.next", { add: true, ... }]` | -| Select previous match | `previous` | `a-n` (kakoune: normal) | `[".search.next", { direction: -1 , ... }]` | -| Add previous match | `previous.add` | `s-a-n` (kakoune: normal) | `[".search.next", { direction: -1, add: true, ... }]` | +| Title | Identifier | Keybinding | Command | +| --------------------- | -------------- | ------------------------------------------------ | ----------------------------------------------------- | +| Add next match | `next.add` | `s-n` (kakoune: normal), `n` (helix: select) | `[".search.next", { add: true, ... }]` | +| Select previous match | `previous` | `a-n` (kakoune: normal), `s-n` (helix: normal) | `[".search.next", { direction: -1 , ... }]` | +| Add previous match | `previous.add` | `s-a-n` (kakoune: normal), `s-n` (helix: select) | `[".search.next", { direction: -1, add: true, ... }]` | This command: - accepts a register (by default, it uses `slash`). - may be repeated with a given number of repetitions. - takes an argument `add` of type `boolean`. -Default keybinding: `n` (kakoune: normal) +Default keybinding: `n` (core: normal) ## [`seek`](../seek.ts) @@ -1001,11 +1010,11 @@ Select to character (excluded). | Title | Identifier | Keybinding | Command | | ---------------------------------------- | -------------------------- | ------------------------------------------------ | ------------------------------------------------------------------- | | Extend to character (excluded) | `extend` | `s-t` (kakoune: normal), `t` (helix: select) | `[".seek", { shift: "extend" , ... }]` | -| Select to character (excluded, backward) | `backward` | `a-t` (kakoune: normal) | `[".seek", { direction: -1, ... }]` | +| Select to character (excluded, backward) | `backward` | `a-t` (kakoune: normal), `s-t` (helix: normal) | `[".seek", { direction: -1, ... }]` | | Extend to character (excluded, backward) | `extend.backward` | `s-a-t` (kakoune: normal), `s-t` (helix: select) | `[".seek", { shift: "extend", direction: -1, ... }]` | -| Select to character (included) | `included` | `f` (kakoune: normal) | `[".seek", { include: true , ... }]` | +| Select to character (included) | `included` | `f` (core: normal) | `[".seek", { include: true , ... }]` | | Extend to character (included) | `included.extend` | `s-f` (kakoune: normal), `f` (helix: select) | `[".seek", { include: true, shift: "extend" , ... }]` | -| Select to character (included, backward) | `included.backward` | `a-f` (kakoune: normal) | `[".seek", { include: true, direction: -1, ... }]` | +| Select to character (included, backward) | `included.backward` | `a-f` (kakoune: normal), `s-f` (helix: normal) | `[".seek", { include: true, direction: -1, ... }]` | | Extend to character (included, backward) | `included.extend.backward` | `s-a-f` (kakoune: normal), `s-f` (helix: select) | `[".seek", { include: true, shift: "extend", direction: -1, ... }]` | This command: @@ -1013,7 +1022,7 @@ This command: - takes an argument `include` of type `boolean`. - takes an input `input` of type `string`. -Default keybinding: `t` (kakoune: normal) +Default keybinding: `t` (core: normal) @@ -1050,15 +1059,15 @@ Select the word and following whitespaces on the right of the end of each select | Title | Identifier | Keybinding | Command | | -------------------------------------------- | ------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------- | | Extend to next word start | `word.extend` | `s-w` (kakoune: normal), `w` (helix: select) | `[".seek.word", { shift: "extend" , ... }]` | -| Select to previous word start | `word.backward` | `b` (kakoune: normal) | `[".seek.word", { direction: -1, ... }]` | +| Select to previous word start | `word.backward` | `b` (core: normal) | `[".seek.word", { direction: -1, ... }]` | | Extend to previous word start | `word.extend.backward` | `s-b` (kakoune: normal), `b` (helix: select) | `[".seek.word", { shift: "extend", direction: -1, ... }]` | -| Select to next non-whitespace word start | `word.ws` | `a-w` (kakoune: normal) | `[".seek.word", { ws: true , ... }]` | +| Select to next non-whitespace word start | `word.ws` | `a-w` (kakoune: normal), `s-w` (helix: normal) | `[".seek.word", { ws: true , ... }]` | | Extend to next non-whitespace word start | `word.ws.extend` | `s-a-w` (kakoune: normal), `s-w` (helix: select) | `[".seek.word", { ws: true, shift: "extend" , ... }]` | -| Select to previous non-whitespace word start | `word.ws.backward` | `a-b` (kakoune: normal) | `[".seek.word", { ws: true, direction: -1, ... }]` | +| Select to previous non-whitespace word start | `word.ws.backward` | `a-b` (kakoune: normal), `s-b` (helix: normal) | `[".seek.word", { ws: true, direction: -1, ... }]` | | Extend to previous non-whitespace word start | `word.ws.extend.backward` | `s-a-b` (kakoune: normal), `s-b` (helix: select) | `[".seek.word", { ws: true, shift: "extend", direction: -1, ... }]` | -| Select to next word end | `wordEnd` | `e` (kakoune: normal) | `[".seek.word", { stopAtEnd: true , ... }]` | +| Select to next word end | `wordEnd` | `e` (core: normal) | `[".seek.word", { stopAtEnd: true , ... }]` | | Extend to next word end | `wordEnd.extend` | `s-e` (kakoune: normal), `e` (helix: select) | `[".seek.word", { stopAtEnd: true , shift: "extend" , ... }]` | -| Select to next non-whitespace word end | `wordEnd.ws` | `a-e` (kakoune: normal) | `[".seek.word", { stopAtEnd: true , ws: true , ... }]` | +| Select to next non-whitespace word end | `wordEnd.ws` | `a-e` (kakoune: normal), `s-e` (helix: normal) | `[".seek.word", { stopAtEnd: true , ws: true , ... }]` | | Extend to next non-whitespace word end | `wordEnd.ws.extend` | `s-a-e` (kakoune: normal), `s-e` (helix: select) | `[".seek.word", { stopAtEnd: true , ws: true, shift: "extend" , ... }]` | This command: @@ -1066,7 +1075,7 @@ This command: - takes an argument `stopAtEnd` of type `boolean`. - takes an argument `ws` of type `boolean`. -Default keybinding: `w` (kakoune: normal) +Default keybinding: `w` (core: normal) @@ -1159,28 +1168,32 @@ Default keybinding: `%` (kakoune: normal) -### [`select.vertically`](../select.ts#L31-L64) +### [`select.vertically`](../select.ts#L31-L68) Select vertically. #### Variants -| Title | Identifier | Keybinding | Command | +| Title | Identifier | Keybinding | Command | | ----------- | ------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | -| Jump down | `down.jump` | `j` (kakoune: normal) , `down` (kakoune: normal) | `[".select.vertically", { direction: 1, shift: "jump" , ... }]` | +| Jump down | `down.jump` | `j` (core: normal) , `down` (core: normal) | `[".select.vertically", { direction: 1, shift: "jump" , ... }]` | | Extend down | `down.extend` | `s-j` (kakoune: normal), `s-down` (kakoune: normal), `j` (helix: select), `down` (helix: select) | `[".select.vertically", { direction: 1, shift: "extend", ... }]` | -| Jump up | `up.jump` | `k` (kakoune: normal) , `up` (kakoune: normal) | `[".select.vertically", { direction: -1, shift: "jump" , ... }]` | +| Jump up | `up.jump` | `k` (core: normal) , `up` (core: normal) | `[".select.vertically", { direction: -1, shift: "jump" , ... }]` | | Extend up | `up.extend` | `s-k` (kakoune: normal), `s-up` (kakoune: normal) , `k` (helix: select), `up` (helix: select) | `[".select.vertically", { direction: -1, shift: "extend", ... }]` | The following keybindings are also defined: -| Keybinding | Command | -| ------------------------------------------------ | -------------------------------------------------------------------------- | -| `c-f` (kakoune: normal), `c-f` (kakoune: insert) | `[".select.vertically", { direction: 1, by: "page" , shift: "jump" }]` | -| `c-d` (kakoune: normal), `c-d` (kakoune: insert) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "jump" }]` | -| `c-b` (kakoune: normal), `c-b` (kakoune: insert) | `[".select.vertically", { direction: -1, by: "page" , shift: "jump" }]` | -| `c-u` (kakoune: normal), `c-u` (kakoune: insert) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "jump" }]` | +| Keybinding | Command | +| -------------------------------------------| ---------------------------------------------------------------------------- | +| `c-f` (core: normal), `c-f` (core: insert) | `[".select.vertically", { direction: 1, by: "page" , shift: "jump" }]` | +| `c-d` (core: normal), `c-d` (core: insert) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "jump" }]` | +| `c-b` (core: normal), `c-b` (core: insert) | `[".select.vertically", { direction: -1, by: "page" , shift: "jump" }]` | +| `c-u` (core: normal), `c-u` (core: insert) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "jump" }]` | +| `c-f` (helix: select) | `[".select.vertically", { direction: 1, by: "page" , shift: "extend" }]` | +| `c-d` (helix: select) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "extend" }]` | +| `c-b` (helix: select) | `[".select.vertically", { direction: -1, by: "page" , shift: "extend" }]` | +| `c-u` (helix: select) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "extend" }]` | This command: - may be repeated with a given number of repetitions. @@ -1189,7 +1202,7 @@ This command: -### [`select.horizontally`](../select.ts#L217-L239) +### [`select.horizontally`](../select.ts#L221-L243) Select horizontally. @@ -1198,9 +1211,9 @@ Select horizontally. | Title | Identifier | Keybinding | Command | | ------------ | -------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -| Jump right | `right.jump` | `l` (kakoune: normal) , `right` (kakoune: normal) | `[".select.horizontally", { direction: 1, shift: "jump" , ... }]` | +| Jump right | `right.jump` | `l` (core: normal) , `right` (core: normal) | `[".select.horizontally", { direction: 1, shift: "jump" , ... }]` | | Extend right | `right.extend` | `s-l` (kakoune: normal), `s-right` (kakoune: normal), `l` (helix: select), `right` (helix: select) | `[".select.horizontally", { direction: 1, shift: "extend", ... }]` | -| Jump left | `left.jump` | `h` (kakoune: normal) , `left` (kakoune: normal) | `[".select.horizontally", { direction: -1, shift: "jump" , ... }]` | +| Jump left | `left.jump` | `h` (core: normal) , `left` (core: normal) | `[".select.horizontally", { direction: -1, shift: "jump" , ... }]` | | Extend left | `left.extend` | `s-h` (kakoune: normal), `s-left` (kakoune: normal), `h` (helix: select), `left` (helix: select) | `[".select.horizontally", { direction: -1, shift: "extend", ... }]` | This command: @@ -1209,7 +1222,7 @@ This command: -### [`select.to`](../select.ts#L286-L304) +### [`select.to`](../select.ts#L290-L308) Select to. @@ -1220,7 +1233,7 @@ line. If no count is specified, this command will shift open the `goto` menu. | Title | Identifier | Keybinding | Command | | --------- | ----------- | -------------------------------------------- | ------------------------------------------ | -| Go to | `to.jump` | `g` (kakoune: normal) | `[".select.to", { shift: "jump" , ... }]` | +| Go to | `to.jump` | `g` (core: normal) | `[".select.to", { shift: "jump" , ... }]` | | Extend to | `to.extend` | `s-g` (kakoune: normal), `g` (helix: select) | `[".select.to", { shift: "extend", ... }]` | This command: @@ -1229,7 +1242,7 @@ This command: -### [`select.line.below`](../select.ts#L314-L317) +### [`select.line.below`](../select.ts#L318-L321) Select line below. @@ -1238,16 +1251,19 @@ This command: -### [`select.line.below.extend`](../select.ts#L342-L345) +### [`select.line.below.extend`](../select.ts#L346-L350) Extend to line below. This command: - may be repeated with a given number of repetitions. +Default keybinding: `x` (helix: normal) +`x` (helix: select) + -### [`select.line.above`](../select.ts#L372-L375) +### [`select.line.above`](../select.ts#L377-L380) Select line above. @@ -1256,7 +1272,7 @@ This command: -### [`select.line.above.extend`](../select.ts#L399-L402) +### [`select.line.above.extend`](../select.ts#L404-L407) Extend to line above. @@ -1265,32 +1281,32 @@ This command: -### [`select.lineStart`](../select.ts#L448-L470) +### [`select.lineStart`](../select.ts#L453-L475) Select to line start. #### Variants -| Title | Identifier | Keybinding | Command | -| -------------------- | ------------------ | ----------------------------------------------------- | ------------------------------------------------------------------ | -| Jump to line start | `lineStart.jump` | | `[".select.lineStart", { shift: "jump" , ... }]` | -| Extend to line start | `lineStart.extend` | `s-a-h` (kakoune: normal), `s-home` (kakoune: normal) | `[".select.lineStart", { shift: "extend", ... }]` | -| Jump to line start (skip blank) | `lineStart.skipBlank.jump` | | `[".select.lineStart", { skipBlank: true, shift: "jump" , ... }]` | -| Extend to line start (skip blank) | `lineStart.skipBlank.extend` | | `[".select.lineStart", { skipBlank: true, shift: "extend", ... }]` | -| Jump to first line | `firstLine.jump` | | `[".select.lineStart", { count: 0, shift: "jump" , ... }]` | -| Extend to first line | `firstLine.extend` | | `[".select.lineStart", { count: 0, shift: "extend", ... }]` | +| Title | Identifier | Keybinding | Command | +| -------------------- | ------------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| Jump to line start | `lineStart.jump` | | `[".select.lineStart", { shift: "jump" , ... }]` | +| Extend to line start | `lineStart.extend` | `s-a-h` (kakoune: normal), `s-home` (kakoune: normal), `home` (helix: select) | `[".select.lineStart", { shift: "extend", ... }]` | +| Jump to line start (skip blank) | `lineStart.skipBlank.jump` | | `[".select.lineStart", { skipBlank: true, shift: "jump" , ... }]` | +| Extend to line start (skip blank) | `lineStart.skipBlank.extend` | | `[".select.lineStart", { skipBlank: true, shift: "extend", ... }]` | +| Jump to first line | `firstLine.jump` | | `[".select.lineStart", { count: 0, shift: "jump" , ... }]` | +| Extend to first line | `firstLine.extend` | | `[".select.lineStart", { count: 0, shift: "extend", ... }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `skipBlank` of type `boolean`. Default keybinding: `a-h` (kakoune: normal) -`home` (kakoune: normal) +`home` (core: normal) -### [`select.lineEnd`](../select.ts#L495-L517) +### [`select.lineEnd`](../select.ts#L500-L522) Select to line end. @@ -1298,22 +1314,22 @@ Select to line end. #### Variants -| Title | Identifier | Keybinding | Command | -| ------------------------ | -------------------- | ---------------------------------------------------- | --------------------------------------------------------------- | -| Extend to line end | `lineEnd.extend` | `s-a-l` (kakoune: normal), `s-end` (kakoune: normal) | `[".select.lineEnd", { shift: "extend", ... }]` | -| Jump to last character | `documentEnd.jump` | | `[".select.lineEnd", { count: MAX_INT, shift: "jump" , ... }]` | -| Extend to last character | `documentEnd.extend` | | `[".select.lineEnd", { count: MAX_INT, shift: "extend", ... }]` | +| Title | Identifier | Keybinding | Command | +| ------------------------ | -------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------- | +| Extend to line end | `lineEnd.extend` | `s-a-l` (kakoune: normal), `s-end` (kakoune: normal), `end` (helix: select) | `[".select.lineEnd", { shift: "extend", ... }]` | +| Jump to last character | `documentEnd.jump` | | `[".select.lineEnd", { count: MAX_INT, shift: "jump" , ... }]` | +| Extend to last character | `documentEnd.extend` | | `[".select.lineEnd", { count: MAX_INT, shift: "extend", ... }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `lineBreak` of type `boolean`. Default keybinding: `a-l` (kakoune: normal) -`end` (kakoune: normal) +`end` (core: normal) -### [`select.lastLine`](../select.ts#L545-L555) +### [`select.lastLine`](../select.ts#L550-L560) Select to last line. @@ -1326,7 +1342,7 @@ Select to last line. -### [`select.firstVisibleLine`](../select.ts#L566-L576) +### [`select.firstVisibleLine`](../select.ts#L571-L581) Select to first visible line. @@ -1339,7 +1355,7 @@ Select to first visible line. -### [`select.middleVisibleLine`](../select.ts#L583-L593) +### [`select.middleVisibleLine`](../select.ts#L588-L598) Select to middle visible line. @@ -1352,7 +1368,7 @@ Select to middle visible line. -### [`select.lastVisibleLine`](../select.ts#L600-L610) +### [`select.lastVisibleLine`](../select.ts#L605-L615) Select to last visible line. @@ -1377,7 +1393,8 @@ Copy selections text. This command: - accepts a register (by default, it uses `dquote`). -Default keybinding: `y` (kakoune: normal) +Default keybinding: `y` (core: normal) +`y` (helix: select) @@ -1430,45 +1447,44 @@ Default keybinding: `a-z` (kakoune: normal) -### [`selections.pipe`](../selections.ts#L241-L263) +### [`selections.pipe`](../selections.ts#L241-L262) Pipe selections. Run the specified command or code with the contents of each selection, and save the result to a register. - See https://github.com/mawww/kakoune/blob/master/doc/pages/keys.asciidoc#changes-through-external-programs #### Additional commands -| Title | Identifier | Keybinding | Commands | -| ------------------- | -------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------- | -| Pipe and replace | `pipe.replace` | `\|` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", ... }]` | -| Pipe and append | `pipe.append` | `!` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "end" , shift: "select", ... }]` | -| Pipe and prepend | `pipe.prepend` | `a-!` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "start", shift: "select", ... }]` | +| Title | Identifier | Keybinding | Commands | +| ------------------- | -------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| Pipe and replace | `pipe.replace` | `\|` (core: normal), `\|` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", ... }]` | +| Pipe and append | `pipe.append` | `!` (core: normal), `!` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "end" , shift: "select", ... }]` | +| Pipe and prepend | `pipe.prepend` | `a-!` (core: normal), `a-!` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "\|", where: "start", shift: "select", ... }]` | This command: - accepts a register (by default, it uses `pipe`). - takes an input `expression` of type `string`. -Default keybinding: `a-|` (kakoune: normal) +Default keybinding: `a-|` (core: normal) +`a-|` (helix: select) -### [`selections.filter`](../selections.ts#L291-L313) +### [`selections.filter`](../selections.ts#L290-L311) Filter selections. - #### Variants -| Title | Identifier | Keybinding | Commands | -| -------------------------- | ----------------------- | --------------------------| ------------------------------------------------------------------------ | -| Keep matching selections | `filter.regexp` | `a-k` (kakoune: normal) | `[".selections.filter", { defaultExpression: "/" , ... }]` | -| Clear matching selections | `filter.regexp.inverse` | `s-a-k` (kakoune: normal) | `[".selections.filter", { defaultExpression: "/", inverse: true, ... }]` | -| Clear secondary selections | `clear.secondary` | `,` (kakoune: normal) | `[".selections.filter", { expression: "i === count" , ... }]` | -| Clear main selections | `clear.main` | `a-,` (kakoune: normal) | `[".selections.filter", { expression: "i !== count" , ... }]` | +| Title | Identifier | Keybinding | Commands | +| -------------------------- | ----------------------- | ----------------------------------------------- | ------------------------------------------------------------------------ | +| Keep matching selections | `filter.regexp` | `a-k` (core: normal), `a-k` (helix: select) | `[".selections.filter", { defaultExpression: "/" , ... }]` | +| Clear matching selections | `filter.regexp.inverse` | `s-a-k` (core: normal), `s-a-k` (helix: select) | `[".selections.filter", { defaultExpression: "/", inverse: true, ... }]` | +| Clear secondary selections | `clear.secondary` | `,` (core: normal), `,` (helix: select) | `[".selections.filter", { expression: "i === count" , ... }]` | +| Clear main selections | `clear.main` | `a-,` (core: normal), `a-,` (helix: select) | `[".selections.filter", { expression: "i !== count" , ... }]` | This command: - accepts an argument of type `{ expression?: string }`. @@ -1477,19 +1493,20 @@ This command: - takes an argument `interactive` of type `boolean`. - takes an argument `inverse` of type `boolean`. -Default keybinding: `$` (kakoune: normal) +Default keybinding: `$` (core: normal) +`$` (helix: select) -### [`selections.select`](../selections.ts#L346-L360) +### [`selections.select`](../selections.ts#L344-L358) Select within selections. #### Variants -| Title | Identifier | Keybinding | Command | -| -------------- | --------------- | --------------------- | ------------------------------------------------------------------------------------------------- | -| Leap or select | `select.orLeap` | `s` (kakoune: normal) | `[".ifEmpty", { then: [[".seek.leap", { ... }]], otherwise: [[".selections.select", { ... }]] }]` | +| Title | Identifier | Keybinding | Command | +| -------------- | --------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------- | +| Leap or select | `select.orLeap` | `s` (core: normal), `s` (helix: select) | `[".ifEmpty", { then: [[".seek.leap", { ... }]], otherwise: [[".selections.select", { ... }]] }]` | This command: - accepts an argument of type `{ re?: string | RegExp }`. @@ -1497,7 +1514,7 @@ This command: -### [`selections.split`](../selections.ts#L379-L390) +### [`selections.split`](../selections.ts#L377-L388) Split selections. @@ -1507,19 +1524,20 @@ This command: - takes an argument `excludeEmpty` of type `boolean`. - takes an argument `interactive` of type `boolean`. -Default keybinding: `s-s` (kakoune: normal) +Default keybinding: `s-s` (core: normal) +`s-s` (helix: select) -### [`selections.splitLines`](../selections.ts#L415-L431) +### [`selections.splitLines`](../selections.ts#L413-L429) Split selections at line boundaries. #### Variants -| Title | Identifier | Keybinding | Command | -| ----------------------- | ---------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------- | -| Leap or select backward | `splitLines.orLeap.backward` | `a-s` (kakoune: normal) | `[".ifEmpty", { then: [[".seek.leap", { direction: -1, ... }]], otherwise: [[".selections.splitLines", { ... }]] }]` | +| Title | Identifier | Keybinding | Command | +| ----------------------- | ---------------------------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| Leap or select backward | `splitLines.orLeap.backward` | `a-s` (core: normal), `a-s` (helix: select) | `[".ifEmpty", { then: [[".seek.leap", { direction: -1, ... }]], otherwise: [[".selections.splitLines", { ... }]] }]` | This command: - may be repeated with a given number of repetitions. @@ -1527,7 +1545,7 @@ This command: -### [`selections.expandToLines`](../selections.ts#L474-L481) +### [`selections.expandToLines`](../selections.ts#L472-L479) Expand to lines. @@ -1536,10 +1554,12 @@ Expand selections to contain full lines (including end-of-line characters). Default keybinding: `x` (kakoune: normal) +`s-x` (helix: normal) +`s-x` (helix: select) -### [`selections.trimLines`](../selections.ts#L508-L515) +### [`selections.trimLines`](../selections.ts#L506-L513) Trim lines. @@ -1547,11 +1567,12 @@ Trim selections to only contain full lines (from start to line break). -Default keybinding: `a-x` (kakoune: normal) +Default keybinding: `a-x` (core: normal) +`a-x` (helix: select) -### [`selections.trimWhitespace`](../selections.ts#L540-L547) +### [`selections.trimWhitespace`](../selections.ts#L538-L545) Trim whitespace. @@ -1559,11 +1580,12 @@ Trim whitespace at beginning and end of selections. -Default keybinding: `_` (kakoune: normal) +Default keybinding: `_` (core: normal) +`_` (helix: select) -### [`selections.reduce`](../selections.ts#L566-L585) +### [`selections.reduce`](../selections.ts#L564-L583) Reduce selections to their cursor. @@ -1579,11 +1601,12 @@ This command: - takes an argument `empty` of type `boolean`. - takes an argument `where` of type `"active" | "anchor" | "start" | "end" | "both"`. -Default keybinding: `;` (kakoune: normal) +Default keybinding: `;` (core: normal) +`;` (helix: select) -### [`selections.changeDirection`](../selections.ts#L647-L662) +### [`selections.changeDirection`](../selections.ts#L645-L660) Change direction of selections. @@ -1597,11 +1620,12 @@ Change direction of selections. | Backward selections | `faceBackward` | | `[".selections.changeDirection", { direction: -1 }]` | -Default keybinding: `a-;` (kakoune: normal) +Default keybinding: `a-;` (core: normal) +`a-;` (helix: select) -### [`selections.changeOrder`](../selections.ts#L687-L701) +### [`selections.changeOrder`](../selections.ts#L685-L699) Reverse selections. @@ -1615,7 +1639,7 @@ Reverse selections. -### [`selections.sort`](../selections.ts#L714-L726) +### [`selections.sort`](../selections.ts#L712-L724) Sort selections. @@ -1626,7 +1650,7 @@ This command: -### [`selections.copy`](../selections.ts#L799-L817) +### [`selections.copy`](../selections.ts#L797-L815) Copy selections below. @@ -1644,7 +1668,7 @@ Default keybinding: `s-c` (kakoune: normal) -### [`selections.merge`](../selections.ts#L851-L856) +### [`selections.merge`](../selections.ts#L849-L854) Merge contiguous selections. @@ -1654,13 +1678,13 @@ Default keybinding: `a-_` (kakoune: normal) -### [`selections.open`](../selections.ts#L860-L863) +### [`selections.open`](../selections.ts#L858-L861) Open selected file. -### [`selections.toggleIndices`](../selections.ts#L876-L893) +### [`selections.toggleIndices`](../selections.ts#L874-L891) Toggle selection indices. @@ -1703,38 +1727,42 @@ Default keybinding: `a-)` (kakoune: normal) -### [`selections.rotate.contents`](../selections.rotate.ts#L28-L37) +### [`selections.rotate.contents`](../selections.rotate.ts#L28-L39) Rotate selections clockwise (contents only). + The following command is also available: -| Title | Identifier | Command | -| --------------------------------------------------- | ------------------ | ---------------------------------------------------- | -| Rotate selections counter-clockwise (contents only) | `contents.reverse` | `[".selections.rotate.contents", { reverse: true }]` | +| Title | Identifier | Keybinding | Command | +| --------------------------------------------------- | ------------------ | -------------------------------------------- | ---------------------------------------------------- | +| Rotate selections counter-clockwise (contents only) | `contents.reverse` | `a-(` (helix: normal), `a-(` (helix: select) | `[".selections.rotate.contents", { reverse: true }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `reverse` of type `boolean`. +Default keybinding: `a-)` (helix: normal) +`a-)` (helix: select) + -### [`selections.rotate.selections`](../selections.rotate.ts#L45-L56) +### [`selections.rotate.selections`](../selections.rotate.ts#L47-L58) Rotate selections clockwise (selections only). The following keybinding is also available: -| Title | Identifier | Keybinding | Command | -| ----------------------------------------------------- | -------------------- | --------------------- | ------------------------------------------------------ | -| Rotate selections counter-clockwise (selections only) | `selections.reverse` | `(` (kakoune: normal) | `[".selections.rotate.selections", { reverse: true }]` | +| Title | Identifier | Keybinding | Command | +| ----------------------------------------------------- | -------------------- | --------------------------------------- | ------------------------------------------------------ | +| Rotate selections counter-clockwise (selections only) | `selections.reverse` | `(` (core: normal), `(` (helix: select) | `[".selections.rotate.selections", { reverse: true }]` | This command: - may be repeated with a given number of repetitions. - takes an argument `reverse` of type `boolean`. -Default keybinding: `)` (kakoune: normal) +Default keybinding: `)` (core: normal) ## [`view`](../view.ts) @@ -1742,10 +1770,10 @@ Moving the editor view. #### Predefined keybindings -| Title | Keybinding | Command | -| ----------------------- | ----------------------- | ---------------------------------------------------- | -| Show view menu | `v` (kakoune: normal) | `[".openMenu", { menu: "view", ... }]` | -| Show view menu (locked) | `s-v` (kakoune: normal) | `[".openMenu", { menu: "view", locked: true, ... }]` | +| Title | Keybinding | Command | +| ----------------------- | --------------------------------------------------------------------- | ---------------------------------------------------- | +| Show view menu | `v` (kakoune: normal), `z` (helix: normal), `z` (helix: select) | `[".openMenu", { menu: "view", ... }]` | +| Show view menu (locked) | `s-v` (kakoune: normal), `s-z` (helix: normal), `s-z` (helix: select) | `[".openMenu", { menu: "view", locked: true, ... }]` | diff --git a/src/commands/misc.ts b/src/commands/misc.ts index 1df842e2..f8d9143a 100644 --- a/src/commands/misc.ts +++ b/src/commands/misc.ts @@ -190,7 +190,7 @@ export async function run( * press is awaited again and the returned register will be specific to the * current document. * - * @keys `"` (kakoune: normal) + * @keys `"` (core: normal) * @noreplay */ export async function selectRegister( diff --git a/src/commands/modes.ts b/src/commands/modes.ts index 8ee17d7a..2cd42c99 100644 --- a/src/commands/modes.ts +++ b/src/commands/modes.ts @@ -11,20 +11,20 @@ declare module "./modes"; * * #### Variants * - * | Title | Identifier | Keybinding | Command | - * | ------------------ | ------------ | ---------------------------------------------------- | ----------------------------------------------------------- | - * | Set mode to Normal | `set.normal` | `escape` (kakoune: insert), `escape` (helix: select) | `[".modes.set", { mode: "normal" }], ["hideSuggestWidget"]` | - * | Set mode to Insert | `set.insert` | | `[".modes.set", { mode: "insert" }]` | - * | Set mode to Select | `set.select` | | `[".modes.set", { mode: "select" }]` | + * | Title | Identifier | Keybinding | Command | + * | ------------------ | ------------ | ---------------------------------------------------------------------- | ----------------------------------------------------------- | + * | Set mode to Normal | `set.normal` | `escape` (core: insert), `escape` (helix: select), `v` (helix: select) | `[".modes.set", { mode: "normal" }], ["hideSuggestWidget"]` | + * | Set mode to Insert | `set.insert` | | `[".modes.set", { mode: "insert" }]` | + * | Set mode to Select | `set.select` | `v` (helix: normal) | `[".modes.set", { mode: "select" }]` | * * Other variants are provided to switch to insert mode: * - * | Title | Identifier | Keybinding | Commands | - * | -------------------- | ------------------ | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - * | Insert before | `insert.before` | `i` (kakoune: normal) | `[".selections.faceBackward", { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | - * | Insert after | `insert.after` | `a` (kakoune: normal) | `[".selections.faceForward" , { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | - * | Insert at line start | `insert.lineStart` | `s-i` (kakoune: normal) | `[".select.lineStart", { shift: "jump", skipBlank: true }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | - * | Insert at line end | `insert.lineEnd` | `s-a` (kakoune: normal) | `[".select.lineEnd" , { shift: "jump" }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | + * | Title | Identifier | Keybinding | Commands | + * | -------------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + * | Insert before | `insert.before` | `i` (core: normal), `i` (helix: select) | `[".selections.faceBackward", { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | + * | Insert after | `insert.after` | `a` (core: normal), `a` (helix: select) | `[".selections.faceForward" , { record: false }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | + * | Insert at line start | `insert.lineStart` | `s-i` (core: normal), `s-i` (helix: select) | `[".select.lineStart", { shift: "jump", skipBlank: true }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "start", record: false, empty: true, ... }]` | + * | Insert at line end | `insert.lineEnd` | `s-a` (core: normal), `s-a` (helix: select) | `[".select.lineEnd" , { shift: "jump" }], [".modes.set", { mode: "insert", +mode }], [".selections.reduce", { where: "end" , record: false, empty: true, ... }]` | * * @noreplay */ diff --git a/src/commands/search.ts b/src/commands/search.ts index 7b251735..0aa7174c 100644 --- a/src/commands/search.ts +++ b/src/commands/search.ts @@ -14,13 +14,13 @@ declare module "./search"; /** * Search. * - * @keys `/` (kakoune: normal), `NumPad_Divide` (kakoune: normal) + * @keys `/` (core: normal), `NumPad_Divide` (core: normal) * - * | Title | Identifier | Keybinding | Command | - * | ------------------------ | ----------------- | ----------------------- | ------------------------------------------------------ | - * | Search (extend) | `extend` | `?` (kakoune: normal) | `[".search", { shift: "extend", ... }]` | - * | Search backward | `backward` | `a-/` (kakoune: normal) | `[".search", { direction: -1 , ... }]` | - * | Search backward (extend) | `backward.extend` | `a-?` (kakoune: normal) | `[".search", { direction: -1, shift: "extend", ... }]` | + * | Title | Identifier | Keybinding | Command | + * | ------------------------ | ----------------- | -------------------------------------------- | ------------------------------------------------------ | + * | Search (extend) | `extend` | `?` (kakoune: normal), `/` (helix: select) | `[".search", { shift: "extend", ... }]` | + * | Search backward | `backward` | `a-/` (kakoune: normal), `?` (helix: normal) | `[".search", { direction: -1 , ... }]` | + * | Search backward (extend) | `backward.extend` | `a-?` (kakoune: normal), `?` (helix: select) | `[".search", { direction: -1, shift: "extend", ... }]` | */ export async function search( _: Context, @@ -83,11 +83,11 @@ export async function search( /** * Search current selection. * - * @keys `a-*` (kakoune: normal), `a-NumPad_Multiply` (kakoune: normal) + * @keys `a-*` (core: normal), `a-NumPad_Multiply` (core: normal) * - * | Title | Identifier | Keybinding | Command | - * | -------------------------------- | ----------------- | ---------------------------------------------------------- | --------------------------------------------------- | - * | Search current selection (smart) | `selection.smart` | `*` (kakoune: normal), `NumPad_Multiply` (kakoune: normal) | `[".search.selection", { smart: true, +register }]` | + * | Title | Identifier | Keybinding | Command | + * | -------------------------------- | ----------------- | ---------------------------------------------------- | --------------------------------------------------- | + * | Search current selection (smart) | `selection.smart` | `*` (core: normal), `NumPad_Multiply` (core: normal) | `[".search.selection", { smart: true, +register }]` | */ export function selection( document: vscode.TextDocument, @@ -151,13 +151,13 @@ export function selection( /** * Select next match. * - * @keys `n` (kakoune: normal) + * @keys `n` (core: normal) * - * | Title | Identifier | Keybinding | Command | - * | --------------------- | -------------- | ------------------------- | ----------------------------------------------------- | - * | Add next match | `next.add` | `s-n` (kakoune: normal) | `[".search.next", { add: true, ... }]` | - * | Select previous match | `previous` | `a-n` (kakoune: normal) | `[".search.next", { direction: -1 , ... }]` | - * | Add previous match | `previous.add` | `s-a-n` (kakoune: normal) | `[".search.next", { direction: -1, add: true, ... }]` | + * | Title | Identifier | Keybinding | Command | + * | --------------------- | -------------- | ------------------------------------------------ | ----------------------------------------------------- | + * | Add next match | `next.add` | `s-n` (kakoune: normal), `n` (helix: select) | `[".search.next", { add: true, ... }]` | + * | Select previous match | `previous` | `a-n` (kakoune: normal), `s-n` (helix: normal) | `[".search.next", { direction: -1 , ... }]` | + * | Add previous match | `previous.add` | `s-a-n` (kakoune: normal), `s-n` (helix: select) | `[".search.next", { direction: -1, add: true, ... }]` | */ export async function next( _: Context, diff --git a/src/commands/seek.ts b/src/commands/seek.ts index 0fe8e64f..9c99dd62 100644 --- a/src/commands/seek.ts +++ b/src/commands/seek.ts @@ -16,18 +16,18 @@ declare module "./seek"; /** * Select to character (excluded). * - * @keys `t` (kakoune: normal) + * @keys `t` (core: normal) * * #### Variants * * | Title | Identifier | Keybinding | Command | * | ---------------------------------------- | -------------------------- | ------------------------------------------------ | ------------------------------------------------------------------- | * | Extend to character (excluded) | `extend` | `s-t` (kakoune: normal), `t` (helix: select) | `[".seek", { shift: "extend" , ... }]` | - * | Select to character (excluded, backward) | `backward` | `a-t` (kakoune: normal) | `[".seek", { direction: -1, ... }]` | + * | Select to character (excluded, backward) | `backward` | `a-t` (kakoune: normal), `s-t` (helix: normal) | `[".seek", { direction: -1, ... }]` | * | Extend to character (excluded, backward) | `extend.backward` | `s-a-t` (kakoune: normal), `s-t` (helix: select) | `[".seek", { shift: "extend", direction: -1, ... }]` | - * | Select to character (included) | `included` | `f` (kakoune: normal) | `[".seek", { include: true , ... }]` | + * | Select to character (included) | `included` | `f` (core: normal) | `[".seek", { include: true , ... }]` | * | Extend to character (included) | `included.extend` | `s-f` (kakoune: normal), `f` (helix: select) | `[".seek", { include: true, shift: "extend" , ... }]` | - * | Select to character (included, backward) | `included.backward` | `a-f` (kakoune: normal) | `[".seek", { include: true, direction: -1, ... }]` | + * | Select to character (included, backward) | `included.backward` | `a-f` (kakoune: normal), `s-f` (helix: normal) | `[".seek", { include: true, direction: -1, ... }]` | * | Extend to character (included, backward) | `included.extend.backward` | `s-a-f` (kakoune: normal), `s-f` (helix: select) | `[".seek", { include: true, shift: "extend", direction: -1, ... }]` | */ export async function seek( @@ -176,22 +176,22 @@ export function enclosing( * * Select the word and following whitespaces on the right of the end of each selection. * - * @keys `w` (kakoune: normal) + * @keys `w` (core: normal) * * #### Variants * * | Title | Identifier | Keybinding | Command | * | -------------------------------------------- | ------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------- | * | Extend to next word start | `word.extend` | `s-w` (kakoune: normal), `w` (helix: select) | `[".seek.word", { shift: "extend" , ... }]` | - * | Select to previous word start | `word.backward` | `b` (kakoune: normal) | `[".seek.word", { direction: -1, ... }]` | + * | Select to previous word start | `word.backward` | `b` (core: normal) | `[".seek.word", { direction: -1, ... }]` | * | Extend to previous word start | `word.extend.backward` | `s-b` (kakoune: normal), `b` (helix: select) | `[".seek.word", { shift: "extend", direction: -1, ... }]` | - * | Select to next non-whitespace word start | `word.ws` | `a-w` (kakoune: normal) | `[".seek.word", { ws: true , ... }]` | + * | Select to next non-whitespace word start | `word.ws` | `a-w` (kakoune: normal), `s-w` (helix: normal) | `[".seek.word", { ws: true , ... }]` | * | Extend to next non-whitespace word start | `word.ws.extend` | `s-a-w` (kakoune: normal), `s-w` (helix: select) | `[".seek.word", { ws: true, shift: "extend" , ... }]` | - * | Select to previous non-whitespace word start | `word.ws.backward` | `a-b` (kakoune: normal) | `[".seek.word", { ws: true, direction: -1, ... }]` | + * | Select to previous non-whitespace word start | `word.ws.backward` | `a-b` (kakoune: normal), `s-b` (helix: normal) | `[".seek.word", { ws: true, direction: -1, ... }]` | * | Extend to previous non-whitespace word start | `word.ws.extend.backward` | `s-a-b` (kakoune: normal), `s-b` (helix: select) | `[".seek.word", { ws: true, shift: "extend", direction: -1, ... }]` | - * | Select to next word end | `wordEnd` | `e` (kakoune: normal) | `[".seek.word", { stopAtEnd: true , ... }]` | + * | Select to next word end | `wordEnd` | `e` (core: normal) | `[".seek.word", { stopAtEnd: true , ... }]` | * | Extend to next word end | `wordEnd.extend` | `s-e` (kakoune: normal), `e` (helix: select) | `[".seek.word", { stopAtEnd: true , shift: "extend" , ... }]` | - * | Select to next non-whitespace word end | `wordEnd.ws` | `a-e` (kakoune: normal) | `[".seek.word", { stopAtEnd: true , ws: true , ... }]` | + * | Select to next non-whitespace word end | `wordEnd.ws` | `a-e` (kakoune: normal), `s-e` (helix: normal) | `[".seek.word", { stopAtEnd: true , ws: true , ... }]` | * | Extend to next non-whitespace word end | `wordEnd.ws.extend` | `s-a-e` (kakoune: normal), `s-e` (helix: select) | `[".seek.word", { stopAtEnd: true , ws: true, shift: "extend" , ... }]` | */ export function word( diff --git a/src/commands/select.ts b/src/commands/select.ts index 70537102..8888c65a 100644 --- a/src/commands/select.ts +++ b/src/commands/select.ts @@ -36,21 +36,25 @@ const preferredColumnsToken = * * #### Variants * - * | Title | Identifier | Keybinding | Command | + * | Title | Identifier | Keybinding | Command | * | ----------- | ------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | - * | Jump down | `down.jump` | `j` (kakoune: normal) , `down` (kakoune: normal) | `[".select.vertically", { direction: 1, shift: "jump" , ... }]` | + * | Jump down | `down.jump` | `j` (core: normal) , `down` (core: normal) | `[".select.vertically", { direction: 1, shift: "jump" , ... }]` | * | Extend down | `down.extend` | `s-j` (kakoune: normal), `s-down` (kakoune: normal), `j` (helix: select), `down` (helix: select) | `[".select.vertically", { direction: 1, shift: "extend", ... }]` | - * | Jump up | `up.jump` | `k` (kakoune: normal) , `up` (kakoune: normal) | `[".select.vertically", { direction: -1, shift: "jump" , ... }]` | + * | Jump up | `up.jump` | `k` (core: normal) , `up` (core: normal) | `[".select.vertically", { direction: -1, shift: "jump" , ... }]` | * | Extend up | `up.extend` | `s-k` (kakoune: normal), `s-up` (kakoune: normal) , `k` (helix: select), `up` (helix: select) | `[".select.vertically", { direction: -1, shift: "extend", ... }]` | * * The following keybindings are also defined: * - * | Keybinding | Command | - * | ------------------------------------------------ | -------------------------------------------------------------------------- | - * | `c-f` (kakoune: normal), `c-f` (kakoune: insert) | `[".select.vertically", { direction: 1, by: "page" , shift: "jump" }]` | - * | `c-d` (kakoune: normal), `c-d` (kakoune: insert) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "jump" }]` | - * | `c-b` (kakoune: normal), `c-b` (kakoune: insert) | `[".select.vertically", { direction: -1, by: "page" , shift: "jump" }]` | - * | `c-u` (kakoune: normal), `c-u` (kakoune: insert) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "jump" }]` | + * | Keybinding | Command | + * | -------------------------------------------| ---------------------------------------------------------------------------- | + * | `c-f` (core: normal), `c-f` (core: insert) | `[".select.vertically", { direction: 1, by: "page" , shift: "jump" }]` | + * | `c-d` (core: normal), `c-d` (core: insert) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "jump" }]` | + * | `c-b` (core: normal), `c-b` (core: insert) | `[".select.vertically", { direction: -1, by: "page" , shift: "jump" }]` | + * | `c-u` (core: normal), `c-u` (core: insert) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "jump" }]` | + * | `c-f` (helix: select) | `[".select.vertically", { direction: 1, by: "page" , shift: "extend" }]` | + * | `c-d` (helix: select) | `[".select.vertically", { direction: 1, by: "halfPage", shift: "extend" }]` | + * | `c-b` (helix: select) | `[".select.vertically", { direction: -1, by: "page" , shift: "extend" }]` | + * | `c-u` (helix: select) | `[".select.vertically", { direction: -1, by: "halfPage", shift: "extend" }]` | */ export function vertically( _: Context, @@ -224,9 +228,9 @@ export function vertically( * * | Title | Identifier | Keybinding | Command | * | ------------ | -------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | - * | Jump right | `right.jump` | `l` (kakoune: normal) , `right` (kakoune: normal) | `[".select.horizontally", { direction: 1, shift: "jump" , ... }]` | + * | Jump right | `right.jump` | `l` (core: normal) , `right` (core: normal) | `[".select.horizontally", { direction: 1, shift: "jump" , ... }]` | * | Extend right | `right.extend` | `s-l` (kakoune: normal), `s-right` (kakoune: normal), `l` (helix: select), `right` (helix: select) | `[".select.horizontally", { direction: 1, shift: "extend", ... }]` | - * | Jump left | `left.jump` | `h` (kakoune: normal) , `left` (kakoune: normal) | `[".select.horizontally", { direction: -1, shift: "jump" , ... }]` | + * | Jump left | `left.jump` | `h` (core: normal) , `left` (core: normal) | `[".select.horizontally", { direction: -1, shift: "jump" , ... }]` | * | Extend left | `left.extend` | `s-h` (kakoune: normal), `s-left` (kakoune: normal), `h` (helix: select), `left` (helix: select) | `[".select.horizontally", { direction: -1, shift: "extend", ... }]` | */ export function horizontally( @@ -293,7 +297,7 @@ export function horizontally( * * | Title | Identifier | Keybinding | Command | * | --------- | ----------- | -------------------------------------------- | ------------------------------------------ | - * | Go to | `to.jump` | `g` (kakoune: normal) | `[".select.to", { shift: "jump" , ... }]` | + * | Go to | `to.jump` | `g` (core: normal) | `[".select.to", { shift: "jump" , ... }]` | * | Extend to | `to.extend` | `s-g` (kakoune: normal), `g` (helix: select) | `[".select.to", { shift: "extend", ... }]` | */ export function to( @@ -341,6 +345,7 @@ export function line_below(_: Context, count: number) { /** * Extend to line below. + * @keys `x` (helix: normal), `x` (helix: select) */ export function line_below_extend(_: Context, count: number) { if (count === 0 || count === 1) { @@ -448,18 +453,18 @@ export function line_above_extend(_: Context, count: number) { /** * Select to line start. * - * @keys `a-h` (kakoune: normal), `home` (kakoune: normal) + * @keys `a-h` (kakoune: normal), `home` (core: normal) * * #### Variants * - * | Title | Identifier | Keybinding | Command | - * | -------------------- | ------------------ | ----------------------------------------------------- | ------------------------------------------------------------------ | - * | Jump to line start | `lineStart.jump` | | `[".select.lineStart", { shift: "jump" , ... }]` | - * | Extend to line start | `lineStart.extend` | `s-a-h` (kakoune: normal), `s-home` (kakoune: normal) | `[".select.lineStart", { shift: "extend", ... }]` | - * | Jump to line start (skip blank) | `lineStart.skipBlank.jump` | | `[".select.lineStart", { skipBlank: true, shift: "jump" , ... }]` | - * | Extend to line start (skip blank) | `lineStart.skipBlank.extend` | | `[".select.lineStart", { skipBlank: true, shift: "extend", ... }]` | - * | Jump to first line | `firstLine.jump` | | `[".select.lineStart", { count: 0, shift: "jump" , ... }]` | - * | Extend to first line | `firstLine.extend` | | `[".select.lineStart", { count: 0, shift: "extend", ... }]` | + * | Title | Identifier | Keybinding | Command | + * | -------------------- | ------------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------ | + * | Jump to line start | `lineStart.jump` | | `[".select.lineStart", { shift: "jump" , ... }]` | + * | Extend to line start | `lineStart.extend` | `s-a-h` (kakoune: normal), `s-home` (kakoune: normal), `home` (helix: select) | `[".select.lineStart", { shift: "extend", ... }]` | + * | Jump to line start (skip blank) | `lineStart.skipBlank.jump` | | `[".select.lineStart", { skipBlank: true, shift: "jump" , ... }]` | + * | Extend to line start (skip blank) | `lineStart.skipBlank.extend` | | `[".select.lineStart", { skipBlank: true, shift: "extend", ... }]` | + * | Jump to first line | `firstLine.jump` | | `[".select.lineStart", { count: 0, shift: "jump" , ... }]` | + * | Extend to first line | `firstLine.extend` | | `[".select.lineStart", { count: 0, shift: "extend", ... }]` | */ export function lineStart( _: Context, @@ -498,15 +503,15 @@ export function lineStart( * @param lineBreak If `true`, selects the line break in character selection * mode. * - * @keys `a-l` (kakoune: normal), `end` (kakoune: normal) + * @keys `a-l` (kakoune: normal), `end` (core: normal) * * #### Variants * - * | Title | Identifier | Keybinding | Command | - * | ------------------------ | -------------------- | ---------------------------------------------------- | --------------------------------------------------------------- | - * | Extend to line end | `lineEnd.extend` | `s-a-l` (kakoune: normal), `s-end` (kakoune: normal) | `[".select.lineEnd", { shift: "extend", ... }]` | - * | Jump to last character | `documentEnd.jump` | | `[".select.lineEnd", { count: MAX_INT, shift: "jump" , ... }]` | - * | Extend to last character | `documentEnd.extend` | | `[".select.lineEnd", { count: MAX_INT, shift: "extend", ... }]` | + * | Title | Identifier | Keybinding | Command | + * | ------------------------ | -------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------- | + * | Extend to line end | `lineEnd.extend` | `s-a-l` (kakoune: normal), `s-end` (kakoune: normal), `end` (helix: select) | `[".select.lineEnd", { shift: "extend", ... }]` | + * | Jump to last character | `documentEnd.jump` | | `[".select.lineEnd", { count: MAX_INT, shift: "jump" , ... }]` | + * | Extend to last character | `documentEnd.extend` | | `[".select.lineEnd", { count: MAX_INT, shift: "extend", ... }]` | */ export function lineEnd( _: Context, diff --git a/src/commands/selections.rotate.ts b/src/commands/selections.rotate.ts index e6daf188..36b40267 100644 --- a/src/commands/selections.rotate.ts +++ b/src/commands/selections.rotate.ts @@ -28,11 +28,13 @@ export function both(_: Context, repetitions: number, reverse: Argument /** * Rotate selections clockwise (contents only). * + * @keys `a-)` (helix: normal), `a-)` (helix: select) + * * The following command is also available: * - * | Title | Identifier | Command | - * | --------------------------------------------------- | ------------------ | ---------------------------------------------------- | - * | Rotate selections counter-clockwise (contents only) | `contents.reverse` | `[".selections.rotate.contents", { reverse: true }]` | + * | Title | Identifier | Keybinding | Command | + * | --------------------------------------------------- | ------------------ | -------------------------------------------- | ---------------------------------------------------- | + * | Rotate selections counter-clockwise (contents only) | `contents.reverse` | `a-(` (helix: normal), `a-(` (helix: select) | `[".selections.rotate.contents", { reverse: true }]` | */ export function contents(_: Context, repetitions: number, reverse: Argument = false) { if (reverse) { @@ -45,13 +47,13 @@ export function contents(_: Context, repetitions: number, reverse: Argument = false) { if (reverse) { diff --git a/src/commands/selections.ts b/src/commands/selections.ts index b5994b12..9f51b78f 100644 --- a/src/commands/selections.ts +++ b/src/commands/selections.ts @@ -21,7 +21,7 @@ declare module "./selections"; /** * Copy selections text. * - * @keys `y` (kakoune: normal) + * @keys `y` (core: normal), `y` (helix: select) */ export function saveText( document: vscode.TextDocument, @@ -244,17 +244,16 @@ const pipeHistory: string[] = []; * Run the specified command or code with the contents of each selection, and * save the result to a register. * - * @keys `a-|` (kakoune: normal) - * + * @keys `a-|` (core: normal), `a-|` (helix: select) * See https://github.com/mawww/kakoune/blob/master/doc/pages/keys.asciidoc#changes-through-external-programs * * #### Additional commands * - * | Title | Identifier | Keybinding | Commands | - * | ------------------- | -------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------- | - * | Pipe and replace | `pipe.replace` | `|` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", ... }]` | - * | Pipe and append | `pipe.append` | `!` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", where: "end" , shift: "select", ... }]` | - * | Pipe and prepend | `pipe.prepend` | `a-!` (kakoune: normal) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", where: "start", shift: "select", ... }]` | + * | Title | Identifier | Keybinding | Commands | + * | ------------------- | -------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | + * | Pipe and replace | `pipe.replace` | `|` (core: normal), `|` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", ... }]` | + * | Pipe and append | `pipe.append` | `!` (core: normal), `!` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", where: "end" , shift: "select", ... }]` | + * | Pipe and prepend | `pipe.prepend` | `a-!` (core: normal), `a-!` (helix: select) | `[".selections.pipe", { +expression,register }], [".edit.insert", { register: "|", where: "start", shift: "select", ... }]` | */ export async function pipe( _: Context, @@ -291,16 +290,15 @@ const filterHistory: string[] = []; /** * Filter selections. * - * @keys `$` (kakoune: normal) - * + * @keys `$` (core: normal), `$` (helix: select) * #### Variants * - * | Title | Identifier | Keybinding | Commands | - * | -------------------------- | ----------------------- | --------------------------| ------------------------------------------------------------------------ | - * | Keep matching selections | `filter.regexp` | `a-k` (kakoune: normal) | `[".selections.filter", { defaultExpression: "/" , ... }]` | - * | Clear matching selections | `filter.regexp.inverse` | `s-a-k` (kakoune: normal) | `[".selections.filter", { defaultExpression: "/", inverse: true, ... }]` | - * | Clear secondary selections | `clear.secondary` | `,` (kakoune: normal) | `[".selections.filter", { expression: "i === count" , ... }]` | - * | Clear main selections | `clear.main` | `a-,` (kakoune: normal) | `[".selections.filter", { expression: "i !== count" , ... }]` | + * | Title | Identifier | Keybinding | Commands | + * | -------------------------- | ----------------------- | ----------------------------------------------- | ------------------------------------------------------------------------ | + * | Keep matching selections | `filter.regexp` | `a-k` (core: normal), `a-k` (helix: select) | `[".selections.filter", { defaultExpression: "/" , ... }]` | + * | Clear matching selections | `filter.regexp.inverse` | `s-a-k` (core: normal), `s-a-k` (helix: select) | `[".selections.filter", { defaultExpression: "/", inverse: true, ... }]` | + * | Clear secondary selections | `clear.secondary` | `,` (core: normal), `,` (helix: select) | `[".selections.filter", { expression: "i === count" , ... }]` | + * | Clear main selections | `clear.main` | `a-,` (core: normal), `a-,` (helix: select) | `[".selections.filter", { expression: "i !== count" , ... }]` | */ export function filter( _: Context, @@ -348,9 +346,9 @@ export function filter( * * #### Variants * - * | Title | Identifier | Keybinding | Command | - * | -------------- | --------------- | --------------------- | ------------------------------------------------------------------------------------------------- | - * | Leap or select | `select.orLeap` | `s` (kakoune: normal) | `[".ifEmpty", { then: [[".seek.leap", { ... }]], otherwise: [[".selections.select", { ... }]] }]` | + * | Title | Identifier | Keybinding | Command | + * | -------------- | --------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------- | + * | Leap or select | `select.orLeap` | `s` (core: normal), `s` (helix: select) | `[".ifEmpty", { then: [[".seek.leap", { ... }]], otherwise: [[".selections.select", { ... }]] }]` | */ export function select( _: Context, @@ -379,7 +377,7 @@ export function select( /** * Split selections. * - * @keys `s-s` (kakoune: normal) + * @keys `s-s` (core: normal), `s-s` (helix: select) */ export function split( _: Context, @@ -417,9 +415,9 @@ export function split( * * #### Variants * - * | Title | Identifier | Keybinding | Command | - * | ----------------------- | ---------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------- | - * | Leap or select backward | `splitLines.orLeap.backward` | `a-s` (kakoune: normal) | `[".ifEmpty", { then: [[".seek.leap", { direction: -1, ... }]], otherwise: [[".selections.splitLines", { ... }]] }]` | + * | Title | Identifier | Keybinding | Command | + * | ----------------------- | ---------------------------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | + * | Leap or select backward | `splitLines.orLeap.backward` | `a-s` (core: normal), `a-s` (helix: select) | `[".ifEmpty", { then: [[".seek.leap", { direction: -1, ... }]], otherwise: [[".selections.splitLines", { ... }]] }]` | */ export function splitLines( _: Context, @@ -476,7 +474,7 @@ export function splitLines( * * Expand selections to contain full lines (including end-of-line characters). * - * @keys `x` (kakoune: normal) + * @keys `x` (kakoune: normal), `s-x` (helix: normal), `s-x` (helix: select) */ export function expandToLines(_: Context) { return Selections.updateByIndex((_i, selection, document) => { @@ -510,7 +508,7 @@ export function expandToLines(_: Context) { * * Trim selections to only contain full lines (from start to line break). * - * @keys `a-x` (kakoune: normal) + * @keys `a-x` (core: normal), `a-x` (helix: select) */ export function trimLines(_: Context) { return Selections.updateByIndex((_, selection) => { @@ -542,7 +540,7 @@ export function trimLines(_: Context) { * * Trim whitespace at beginning and end of selections. * - * @keys `_` (kakoune: normal) + * @keys `_` (core: normal), `_` (helix: select) */ export function trimWhitespace(_: Context) { const blank = getCharacters(CharSet.Blank, _.document), @@ -569,7 +567,7 @@ export function trimWhitespace(_: Context) { * @param where Which edge each selection should be reduced to; defaults to * "active". * - * @keys `;` (kakoune: normal) + * @keys `;` (core: normal), `;` (helix: select) * * #### Variant * @@ -650,7 +648,7 @@ export function reduce( * @param direction If unspecified, flips each direction. Otherwise, ensures * that all selections face the given direction. * - * @keys `a-;` (kakoune: normal) + * @keys `a-;` (core: normal), `a-;` (helix: select) * * #### Variants * diff --git a/src/commands/view.ts b/src/commands/view.ts index 26b23200..2bccc51b 100644 --- a/src/commands/view.ts +++ b/src/commands/view.ts @@ -8,10 +8,10 @@ import { Context, Selections } from "../api"; * * #### Predefined keybindings * - * | Title | Keybinding | Command | - * | ----------------------- | ----------------------- | ---------------------------------------------------- | - * | Show view menu | `v` (kakoune: normal) | `[".openMenu", { menu: "view", ... }]` | - * | Show view menu (locked) | `s-v` (kakoune: normal) | `[".openMenu", { menu: "view", locked: true, ... }]` | + * | Title | Keybinding | Command | + * | ----------------------- | --------------------------------------------------------------------- | ---------------------------------------------------- | + * | Show view menu | `v` (kakoune: normal), `z` (helix: normal), `z` (helix: select) | `[".openMenu", { menu: "view", ... }]` | + * | Show view menu (locked) | `s-v` (kakoune: normal), `s-z` (helix: normal), `s-z` (helix: select) | `[".openMenu", { menu: "view", locked: true, ... }]` | */ declare module "./view"; diff --git a/src/state/extension.ts b/src/state/extension.ts index 6085d262..821c374d 100644 --- a/src/state/extension.ts +++ b/src/state/extension.ts @@ -35,6 +35,11 @@ export class Extension implements vscode.Disposable { return this._gotoMenus as ReadonlyMap; } + private _behavior = ""; + public get behavior() { + return this._behavior; + } + // State. // ========================================================================== @@ -168,6 +173,15 @@ export class Extension implements vscode.Disposable { true, ); + this.observePreference( + ".behavior", + (value, _validator, _inspect) => { + this._behavior = value; + vscode.commands.executeCommand("setContext", "dance.behavior", this._behavior); + }, + true, + ); + this._subscriptions.push( // Update configuration automatically. vscode.workspace.onDidChangeConfiguration((e) => {