diff --git a/.gitattributes b/.gitattributes index 7f37cd4..62cf7ae 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,5 +3,6 @@ /src/commands/load-all.ts linguist-generated /src/commands/README.md linguist-generated /package.json linguist-generated +/extensions/helix/package.json linguist-generated /test/suite/api.test.ts linguist-generated /test/suite/commands/*.test.ts linguist-generated diff --git a/.vscode/launch.json b/.vscode/launch.json index 59779fb..850be65 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,6 +9,18 @@ "args": ["--extensionDevelopmentPath=${workspaceFolder}"], "outFiles": ["${workspaceFolder}/out/**/*.js"], }, + { + "name": "Launch extension with helix keybinds", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "${workspaceFolder}/.vscode-test", + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionDevelopmentPath=${workspaceFolder}/extensions/helix/", + ], + "outFiles": ["${workspaceFolder}/out/**/*.js"], + }, { "name": "Run all tests", "type": "extensionHost", diff --git a/extensions/helix/LICENSE b/extensions/helix/LICENSE new file mode 100644 index 0000000..3155ccf --- /dev/null +++ b/extensions/helix/LICENSE @@ -0,0 +1,5 @@ +Copyright 2020-2021 Grégoire Geis + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/extensions/helix/dance.png b/extensions/helix/dance.png new file mode 100644 index 0000000..7ca6bb3 Binary files /dev/null and b/extensions/helix/dance.png differ diff --git a/extensions/helix/package.build.ts b/extensions/helix/package.build.ts new file mode 100644 index 0000000..6f81215 --- /dev/null +++ b/extensions/helix/package.build.ts @@ -0,0 +1,216 @@ +// Save to package.json +// ============================================================================ + +import { Builder, generateIgnoredKeybinds } from "../../meta"; +import * as fs from "fs/promises"; +import { SelectionBehavior } from "../../src/api"; + +const version = "0.1.0", + preRelease = 1, + preReleaseVersion = version.replace(/\d+$/, "$&" + preRelease.toString().padStart(3, "0")); + +export const pkg = (modules: Builder.ParsedModule[]) => ({ + + // Common package.json properties. + // ========================================================================== + + name: "dance-helix-keybinds", + description: "Helix keybindings for dance", + version, + license: "ISC", + + author: { + name: "Grégoire Geis", + email: "opensource@gregoirege.is", + }, + + repository: { + type: "git", + url: "https://github.com/71/dance.git", + }, + + engines: { + vscode: "^1.63.0", + }, + + displayName: "Dance", + publisher: "gregoire", + categories: ["Keymaps", "Other"], + readme: "README.md", + icon: "dance.png", + + scripts: { + "package": "vsce package --allow-star-activation", + "publish": "vsce publish --allow-star-activation", + "package:pre": `vsce package --allow-star-activation --pre-release --no-git-tag-version --no-update-package-json ${preReleaseVersion}`, + "publish:pre": `vsce publish --allow-star-activation --pre-release --no-git-tag-version --no-update-package-json ${preReleaseVersion}`, + }, + + contributes: { + configurationDefaults: { + "dance.defaultMode": "helix/normal", + "dance.modes": { + "": { + hiddenSelectionsIndicatorsDecoration: { + after: { + color: "$list.warningForeground", + }, + backgroundColor: "$inputValidation.warningBackground", + borderColor: "$inputValidation.warningBorder", + borderStyle: "solid", + borderWidth: "1px", + isWholeLine: true, + }, + }, + "input": { + cursorStyle: "underline-thin", + }, + "helix/insert": { + onLeaveMode: [ + [".selections.save", { + register: " insert", + }], + ], + }, + "helix/select": { + cursorStyle: "block", + selectionBehavior: "character", + }, + "helix/normal": { + cursorStyle: "block", + selectionBehavior: "character", + decorations: { + applyTo: "main", + backgroundColor: "$editor.hoverHighlightBackground", + isWholeLine: true, + }, + onEnterMode: [ + [".selections.restore", { register: " ^", try: true }], + ], + onLeaveMode: [ + [".selections.save", { + register: " ^", + style: { + borderColor: "$editor.selectionBackground", + borderStyle: "solid", + borderWidth: "2px", + borderRadius: "1px", + }, + until: [ + ["mode-did-change", { include: "normal" }], + ["selections-did-change"], + ], + }], + ], + }, + }, + + "dance.menus": { + match: { + title: "Match", + items: { + // Should be jump in normal mode, extend in select mode, but jump for seek.enclosing is not implemented + "m": { command: "dance.seek.enclosing", text: "Goto matching bracket" }, + "a": { command: "dance.openMenu", args: [{ menu: "object", title: "Match around" }], text: "Select around object" }, + "i": { command: "dance.openMenu", args: [{ menu: "object", title: "Match inside", pass: [{ inner: true }] }], text: "Select inside object" }, + }, + }, + + object: { + title: "Select object...", + items: ((command = "dance.seek.object") => ({ + "()": { command, args: [{ input: "\\((?#inner)\\)" }], text: "parenthesis block" }, + "{}": { command, args: [{ input: "\\{(?#inner)\\}" }], text: "braces block" }, + "[]": { command, args: [{ input: "\\[(?#inner)\\]" }], text: "brackets block" }, + "<>": { command, args: [{ input: "<(?#inner)>" }], text: "angle block" }, + '"': { command, args: [{ input: "(?#noescape)\"(?#inner)(?#noescape)\"" }], text: "double quote string" }, + "'": { command, args: [{ input: "(?#noescape)'(?#inner)(?#noescape)'" }], text: "single quote string" }, + "`": { command, args: [{ input: "(?#noescape)`(?#inner)(?#noescape)`" }], text: "grave quote string" }, + "w": { command, args: [{ input: "[\\p{L}_\\d]+(?[^\\S\\n]+)" }], text: "word" }, + "W": { command, args: [{ input: "[\\S]+(?[^\\S\\n]+)" }], text: "WORD" }, + "p": { command, args: [{ input: "(?#predefined=paragraph)" }], text: "paragraph" }, + "a": { command, args: [{ input: "(?#predefined=argument)" }], text: "argument" }, + "!": { command, text: "custom object desc" }, + }))(), + }, + + view: { + "title": "View", + "items": { + "cz": { text: "Align view center", command: "dance.view.line", args: [{ "at": "center" }] }, + "t": { text: "Align view top", command: "dance.view.line", args: [{ "at": "top" }] }, + "b": { text: "Align view bottom", command: "dance.view.line", args: [{ "at": "bottom" }] }, + "k": { text: "Scroll view up", command: "editorScroll", args: [{ "by": "line", "revealCursor": true, "to": "up" }] }, + "j": { text: "Scroll view down", command: "editorScroll", args: [{ "by": "line", "revealCursor": true, "to": "down" }] }, + "/": { text: "Search for regex pattern", command: "dance.search" }, + "?": { text: "Reverse search for regex pattern", command: "dance.search.backward" }, + "n": { text: "Select next search match", command: "dance.search.next" }, + "N": { text: "Select previous search match", command: "dance.search.previous" }, + }, + }, + + goto: { + title: "Goto", + items: { + "g": { text: "to line number else file start", command: "dance.select.lineStart" }, + "e": { text: "to last line", command: "dance.select.lineEnd", args: [{ count: 2 ** 31 - 1 }] }, + "f": { text: "to file/URLs in selections", command: "dance.selections.open" }, + "h": { text: "to line start", command: "dance.select.lineStart" }, + "l": { text: "to line end", command: "dance.select.lineEnd" }, + "i": { text: "to first non-blank in line", command: "dance.select.lineStart", args: [{ skipBlank: true }] }, + "d": { text: "to definition", command: "editor.action.revealDefinition" }, + "r": { text: "to references", command: "editor.action.goToReferences" }, + "j": { text: "to last line", command: "dance.select.lastLine" }, + "t": { text: "to window top", command: "dance.select.firstVisibleLine" }, + "c": { text: "to window center", command: "dance.select.middleVisibleLine" }, + "b": { text: "to window bottom", command: "dance.select.lastVisibleLine" }, + "a": { text: "to last buffer", command: "workbench.action.openPreviousRecentlyUsedEditorInGroup" }, + "A": { text: "to last buffer...", command: "workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup" }, + "n": { text: "to next buffer", command: "workbench.action.nextEditor" }, + "p": { text: "to previous buffer", command: "workbench.action.previousEditor" }, + ".": { text: "to last buffer modification position", command: "dance.selections.restore", args: [{ register: " insert" }], + }, + }, + }, + }, + }, + + keybindings: (() => { + const ignoredKeybindings = [], + keybindings = modules + .flatMap((module) => module.keybindings) + .filter((keybinding) => ["core", "helix", undefined].includes(keybinding.category)) + .map((k) => ({ ...k })); + for (const mode of ["normal", "select", "insert"]) { + for (const keybind of keybindings) { + keybind.when = keybind.when.replace(`dance.mode == '${mode}'`, `dance.mode == 'helix/${mode}'`); + } + } + + for (const mode of ["normal", "select"]) { + const whenMode = `dance.mode == 'helix/${mode}'`; + ignoredKeybindings.push(...generateIgnoredKeybinds( + keybindings.filter(key => key.when.includes(whenMode)), + whenMode, + )); + + } + + return [ + ...keybindings, + ...ignoredKeybindings, + ]; + })(), + + + }, +}); + + +export async function build(builder: Builder) { + await fs.writeFile( + `${__dirname}/package.json`, + JSON.stringify(pkg(await builder.getCommandModules()), undefined, 2) + "\n", + "utf-8", + ); +} diff --git a/extensions/helix/package.json b/extensions/helix/package.json new file mode 100644 index 0000000..6928e83 --- /dev/null +++ b/extensions/helix/package.json @@ -0,0 +1,2270 @@ +{ + "name": "dance-helix-keybinds", + "description": "Helix keybindings for dance", + "version": "0.1.0", + "license": "ISC", + "author": { + "name": "Grégoire Geis", + "email": "opensource@gregoirege.is" + }, + "repository": { + "type": "git", + "url": "https://github.com/71/dance.git" + }, + "engines": { + "vscode": "^1.63.0" + }, + "displayName": "Dance", + "publisher": "gregoire", + "categories": [ + "Keymaps", + "Other" + ], + "readme": "README.md", + "icon": "dance.png", + "scripts": { + "package": "vsce package --allow-star-activation", + "publish": "vsce publish --allow-star-activation", + "package:pre": "vsce package --allow-star-activation --pre-release --no-git-tag-version --no-update-package-json 0.1.0001", + "publish:pre": "vsce publish --allow-star-activation --pre-release --no-git-tag-version --no-update-package-json 0.1.0001" + }, + "contributes": { + "configurationDefaults": { + "dance.defaultMode": "helix/normal", + "dance.modes": { + "": { + "hiddenSelectionsIndicatorsDecoration": { + "after": { + "color": "$list.warningForeground" + }, + "backgroundColor": "$inputValidation.warningBackground", + "borderColor": "$inputValidation.warningBorder", + "borderStyle": "solid", + "borderWidth": "1px", + "isWholeLine": true + } + }, + "input": { + "cursorStyle": "underline-thin" + }, + "helix/insert": { + "onLeaveMode": [ + [ + ".selections.save", + { + "register": " insert" + } + ] + ] + }, + "helix/select": { + "cursorStyle": "block", + "selectionBehavior": "character" + }, + "helix/normal": { + "cursorStyle": "block", + "selectionBehavior": "character", + "decorations": { + "applyTo": "main", + "backgroundColor": "$editor.hoverHighlightBackground", + "isWholeLine": true + }, + "onEnterMode": [ + [ + ".selections.restore", + { + "register": " ^", + "try": true + } + ] + ], + "onLeaveMode": [ + [ + ".selections.save", + { + "register": " ^", + "style": { + "borderColor": "$editor.selectionBackground", + "borderStyle": "solid", + "borderWidth": "2px", + "borderRadius": "1px" + }, + "until": [ + [ + "mode-did-change", + { + "include": "normal" + } + ], + [ + "selections-did-change" + ] + ] + } + ] + ] + } + }, + "dance.menus": { + "match": { + "title": "Match", + "items": { + "m": { + "command": "dance.seek.enclosing", + "text": "Goto matching bracket" + }, + "a": { + "command": "dance.openMenu", + "args": [ + { + "menu": "object", + "title": "Match around" + } + ], + "text": "Select around object" + }, + "i": { + "command": "dance.openMenu", + "args": [ + { + "menu": "object", + "title": "Match inside", + "pass": [ + { + "inner": true + } + ] + } + ], + "text": "Select inside object" + } + } + }, + "object": { + "title": "Select object...", + "items": { + "()": { + "command": "dance.seek.object", + "args": [ + { + "input": "\\((?#inner)\\)" + } + ], + "text": "parenthesis block" + }, + "{}": { + "command": "dance.seek.object", + "args": [ + { + "input": "\\{(?#inner)\\}" + } + ], + "text": "braces block" + }, + "[]": { + "command": "dance.seek.object", + "args": [ + { + "input": "\\[(?#inner)\\]" + } + ], + "text": "brackets block" + }, + "<>": { + "command": "dance.seek.object", + "args": [ + { + "input": "<(?#inner)>" + } + ], + "text": "angle block" + }, + "\"": { + "command": "dance.seek.object", + "args": [ + { + "input": "(?#noescape)\"(?#inner)(?#noescape)\"" + } + ], + "text": "double quote string" + }, + "'": { + "command": "dance.seek.object", + "args": [ + { + "input": "(?#noescape)'(?#inner)(?#noescape)'" + } + ], + "text": "single quote string" + }, + "`": { + "command": "dance.seek.object", + "args": [ + { + "input": "(?#noescape)`(?#inner)(?#noescape)`" + } + ], + "text": "grave quote string" + }, + "w": { + "command": "dance.seek.object", + "args": [ + { + "input": "[\\p{L}_\\d]+(?[^\\S\\n]+)" + } + ], + "text": "word" + }, + "W": { + "command": "dance.seek.object", + "args": [ + { + "input": "[\\S]+(?[^\\S\\n]+)" + } + ], + "text": "WORD" + }, + "p": { + "command": "dance.seek.object", + "args": [ + { + "input": "(?#predefined=paragraph)" + } + ], + "text": "paragraph" + }, + "a": { + "command": "dance.seek.object", + "args": [ + { + "input": "(?#predefined=argument)" + } + ], + "text": "argument" + }, + "!": { + "command": "dance.seek.object", + "text": "custom object desc" + } + } + }, + "view": { + "title": "View", + "items": { + "cz": { + "text": "Align view center", + "command": "dance.view.line", + "args": [ + { + "at": "center" + } + ] + }, + "t": { + "text": "Align view top", + "command": "dance.view.line", + "args": [ + { + "at": "top" + } + ] + }, + "b": { + "text": "Align view bottom", + "command": "dance.view.line", + "args": [ + { + "at": "bottom" + } + ] + }, + "k": { + "text": "Scroll view up", + "command": "editorScroll", + "args": [ + { + "by": "line", + "revealCursor": true, + "to": "up" + } + ] + }, + "j": { + "text": "Scroll view down", + "command": "editorScroll", + "args": [ + { + "by": "line", + "revealCursor": true, + "to": "down" + } + ] + }, + "/": { + "text": "Search for regex pattern", + "command": "dance.search" + }, + "?": { + "text": "Reverse search for regex pattern", + "command": "dance.search.backward" + }, + "n": { + "text": "Select next search match", + "command": "dance.search.next" + }, + "N": { + "text": "Select previous search match", + "command": "dance.search.previous" + } + } + }, + "goto": { + "title": "Goto", + "items": { + "g": { + "text": "to line number else file start", + "command": "dance.select.lineStart" + }, + "e": { + "text": "to last line", + "command": "dance.select.lineEnd", + "args": [ + { + "count": 2147483647 + } + ] + }, + "f": { + "text": "to file/URLs in selections", + "command": "dance.selections.open" + }, + "h": { + "text": "to line start", + "command": "dance.select.lineStart" + }, + "l": { + "text": "to line end", + "command": "dance.select.lineEnd" + }, + "i": { + "text": "to first non-blank in line", + "command": "dance.select.lineStart", + "args": [ + { + "skipBlank": true + } + ] + }, + "d": { + "text": "to definition", + "command": "editor.action.revealDefinition" + }, + "r": { + "text": "to references", + "command": "editor.action.goToReferences" + }, + "j": { + "text": "to last line", + "command": "dance.select.lastLine" + }, + "t": { + "text": "to window top", + "command": "dance.select.firstVisibleLine" + }, + "c": { + "text": "to window center", + "command": "dance.select.middleVisibleLine" + }, + "b": { + "text": "to window bottom", + "command": "dance.select.lastVisibleLine" + }, + "a": { + "text": "to last buffer", + "command": "workbench.action.openPreviousRecentlyUsedEditorInGroup" + }, + "A": { + "text": "to last buffer...", + "command": "workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup" + }, + "n": { + "text": "to next buffer", + "command": "workbench.action.nextEditor" + }, + "p": { + "text": "to previous buffer", + "command": "workbench.action.previousEditor" + }, + ".": { + "text": "to last buffer modification position", + "command": "dance.selections.restore", + "args": [ + { + "register": " insert" + } + ] + } + } + } + } + }, + "keybindings": [ + { + "category": "core", + "key": "Shift+7", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Align selections", + "command": "dance.edit.align" + }, + { + "category": "helix", + "key": "Shift+`", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Swap case", + "command": "dance.edit.case.swap" + }, + { + "category": "helix", + "key": "Shift+`", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Swap case", + "command": "dance.edit.case.swap" + }, + { + "category": "core", + "key": "`", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Transform to lower case", + "command": "dance.edit.case.toLower" + }, + { + "category": "helix", + "key": "`", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Transform to lower case", + "command": "dance.edit.case.toLower" + }, + { + "category": "helix", + "key": "Alt+`", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Transform to upper case", + "command": "dance.edit.case.toUpper" + }, + { + "category": "helix", + "key": "Alt+`", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Transform to upper case", + "command": "dance.edit.case.toUpper" + }, + { + "category": "core", + "key": "Shift+,", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Deindent selected lines (including incomplete indent)", + "command": "dance.edit.deindent.withIncomplete" + }, + { + "category": "helix", + "key": "Shift+,", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Deindent selected lines (including incomplete indent)", + "command": "dance.edit.deindent.withIncomplete" + }, + { + "category": "core", + "key": "Alt+D", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Delete", + "command": "dance.edit.delete" + }, + { + "category": "helix", + "key": "Alt+D", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Delete", + "command": "dance.edit.delete" + }, + { + "category": "core", + "key": "Shift+.", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Indent selected lines", + "command": "dance.edit.indent" + }, + { + "category": "helix", + "key": "Shift+.", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Indent selected lines", + "command": "dance.edit.indent" + }, + { + "category": "helix", + "key": "Shift+J", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Join lines", + "command": "dance.edit.join" + }, + { + "category": "helix", + "key": "Shift+J", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Join lines", + "command": "dance.edit.join" + }, + { + "category": "core", + "key": "Shift+Alt+J", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Join lines and select inserted separators", + "command": "dance.edit.join.select" + }, + { + "category": "helix", + "key": "Shift+Alt+J", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Join lines and select inserted separators", + "command": "dance.edit.join.select" + }, + { + "category": "core", + "key": "Shift+O", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Insert new line above and switch to insert", + "command": "dance.edit.newLine.above.insert" + }, + { + "category": "helix", + "key": "Shift+O", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Insert new line above and switch to insert", + "command": "dance.edit.newLine.above.insert" + }, + { + "category": "core", + "key": "O", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Insert new line below and switch to insert", + "command": "dance.edit.newLine.below.insert" + }, + { + "category": "helix", + "key": "O", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Insert new line below and switch to insert", + "command": "dance.edit.newLine.below.insert" + }, + { + "category": "helix", + "key": "P", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Paste after", + "command": "dance.edit.paste.after" + }, + { + "category": "core", + "key": "P", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Paste after and select", + "command": "dance.edit.paste.after.select" + }, + { + "category": "helix", + "key": "Shift+P", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Paste before", + "command": "dance.edit.paste.before" + }, + { + "category": "core", + "key": "Shift+P", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Paste before and select", + "command": "dance.edit.paste.before.select" + }, + { + "category": "core", + "key": "R", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Replace characters", + "command": "dance.edit.replaceCharacters" + }, + { + "category": "core", + "key": "D", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Copy and delete", + "command": "dance.edit.yank-delete" + }, + { + "category": "helix", + "key": "D", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Copy and delete", + "command": "dance.edit.yank-delete" + }, + { + "category": "core", + "key": "C", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Copy, delete and switch to Insert", + "command": "dance.edit.yank-delete-insert" + }, + { + "category": "helix", + "key": "C", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Copy, delete and switch to Insert", + "command": "dance.edit.yank-delete-insert" + }, + { + "category": "core", + "key": "Shift+U", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Redo", + "command": "dance.history.redo" + }, + { + "category": "helix", + "key": "Shift+U", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Redo", + "command": "dance.history.redo" + }, + { + "category": "core", + "key": ".", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Repeat last edit without a command", + "command": "dance.history.repeat.edit" + }, + { + "category": "core", + "key": "NumPad_Decimal", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Repeat last edit without a command", + "command": "dance.history.repeat.edit" + }, + { + "category": "core", + "key": "Alt+.", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Repeat last seek", + "command": "dance.history.repeat.seek" + }, + { + "category": "helix", + "key": "Alt+.", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Repeat last seek", + "command": "dance.history.repeat.seek" + }, + { + "category": "core", + "key": "U", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Undo", + "command": "dance.history.undo" + }, + { + "category": "helix", + "key": "U", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Undo", + "command": "dance.history.undo" + }, + { + "category": "core", + "key": "Escape", + "when": "editorTextFocus && dance.mode == 'helix/normal' && !dance.isRecording && !markersNavigationVisible", + "title": "Cancel Dance operation", + "command": "dance.cancel" + }, + { + "category": "core", + "key": "Escape", + "when": "editorTextFocus && dance.mode == 'input'", + "title": "Cancel Dance operation", + "command": "dance.cancel" + }, + { + "category": "core", + "key": "Up", + "when": "inputFocus && dance.inPrompt", + "command": "dance.changeInput", + "args": { + "action": "previous" + } + }, + { + "category": "core", + "key": "Down", + "when": "inputFocus && dance.inPrompt", + "command": "dance.changeInput", + "args": { + "action": "next" + } + }, + { + "category": "core", + "key": "Shift+'", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select register for next command", + "command": "dance.selectRegister" + }, + { + "category": "core", + "key": "0", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 0 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 0 + } + }, + { + "category": "core", + "key": "NumPad0", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 0 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 0 + } + }, + { + "category": "core", + "key": "1", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 1 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 1 + } + }, + { + "category": "core", + "key": "NumPad1", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 1 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 1 + } + }, + { + "category": "core", + "key": "2", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 2 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 2 + } + }, + { + "category": "core", + "key": "NumPad2", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 2 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 2 + } + }, + { + "category": "core", + "key": "3", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 3 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 3 + } + }, + { + "category": "core", + "key": "NumPad3", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 3 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 3 + } + }, + { + "category": "core", + "key": "4", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 4 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 4 + } + }, + { + "category": "core", + "key": "NumPad4", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 4 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 4 + } + }, + { + "category": "core", + "key": "5", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 5 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 5 + } + }, + { + "category": "core", + "key": "NumPad5", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 5 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 5 + } + }, + { + "category": "core", + "key": "6", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 6 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 6 + } + }, + { + "category": "core", + "key": "NumPad6", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 6 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 6 + } + }, + { + "category": "core", + "key": "7", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 7 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 7 + } + }, + { + "category": "core", + "key": "NumPad7", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 7 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 7 + } + }, + { + "category": "core", + "key": "8", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 8 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 8 + } + }, + { + "category": "core", + "key": "NumPad8", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 8 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 8 + } + }, + { + "category": "core", + "key": "9", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 9 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 9 + } + }, + { + "category": "core", + "key": "NumPad9", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Add the digit 9 to the counter", + "command": "dance.updateCount", + "args": { + "addDigits": 9 + } + }, + { + "category": "core", + "key": "Shift+;", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "command": "workbench.action.showCommands", + "args": { + "$exclude": [] + } + }, + { + "category": "core", + "key": "A", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Insert after", + "command": "dance.modes.insert.after" + }, + { + "category": "helix", + "key": "A", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Insert after", + "command": "dance.modes.insert.after" + }, + { + "category": "core", + "key": "I", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Insert before", + "command": "dance.modes.insert.before" + }, + { + "category": "helix", + "key": "I", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Insert before", + "command": "dance.modes.insert.before" + }, + { + "category": "core", + "key": "Shift+A", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Insert at line end", + "command": "dance.modes.insert.lineEnd" + }, + { + "category": "helix", + "key": "Shift+A", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Insert at line end", + "command": "dance.modes.insert.lineEnd" + }, + { + "category": "core", + "key": "Shift+I", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Insert at line start", + "command": "dance.modes.insert.lineStart" + }, + { + "category": "helix", + "key": "Shift+I", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Insert at line start", + "command": "dance.modes.insert.lineStart" + }, + { + "category": "core", + "key": "Escape", + "when": "editorTextFocus && dance.mode == 'helix/insert'", + "title": "Set mode to Normal", + "command": "dance.modes.set.normal" + }, + { + "category": "helix", + "key": "Escape", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Set mode to Normal", + "command": "dance.modes.set.normal" + }, + { + "category": "helix", + "key": "V", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Set mode to Normal", + "command": "dance.modes.set.normal" + }, + { + "category": "helix", + "key": "V", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Set mode to Select", + "command": "dance.modes.set.select" + }, + { + "category": "core", + "key": "/", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Search", + "command": "dance.search" + }, + { + "category": "core", + "key": "NumPad_Divide", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Search", + "command": "dance.search" + }, + { + "category": "helix", + "key": "Shift+/", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Search backward", + "command": "dance.search.backward" + }, + { + "category": "helix", + "key": "Shift+/", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Search backward (extend)", + "command": "dance.search.backward.extend" + }, + { + "category": "helix", + "key": "/", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Search (extend)", + "command": "dance.search.extend" + }, + { + "category": "core", + "key": "N", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select next match", + "command": "dance.search.next" + }, + { + "category": "helix", + "key": "N", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Add next match", + "command": "dance.search.next.add" + }, + { + "category": "helix", + "key": "Shift+N", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select previous match", + "command": "dance.search.previous" + }, + { + "category": "helix", + "key": "Shift+N", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Add previous match", + "command": "dance.search.previous.add" + }, + { + "category": "core", + "key": "Shift+Alt+8", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Search current selection", + "command": "dance.search.selection" + }, + { + "category": "core", + "key": "Alt+NumPad_Multiply", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Search current selection", + "command": "dance.search.selection" + }, + { + "category": "core", + "key": "Shift+8", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Search current selection (smart)", + "command": "dance.search.selection.smart" + }, + { + "category": "core", + "key": "NumPad_Multiply", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Search current selection (smart)", + "command": "dance.search.selection.smart" + }, + { + "category": "helix", + "key": "M", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Open match menu", + "command": "dance.openMenu", + "args": { + "menu": "match" + } + }, + { + "category": "helix", + "key": "M", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Open match menu with extend", + "command": "dance.openMenu", + "args": { + "menu": "match", + "pass": [ + { + "shift": "extend" + } + ] + } + }, + { + "category": "core", + "key": "T", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to character (excluded)", + "command": "dance.seek" + }, + { + "category": "helix", + "key": "Shift+T", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to character (excluded, backward)", + "command": "dance.seek.backward" + }, + { + "category": "helix", + "key": "T", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to character (excluded)", + "command": "dance.seek.extend" + }, + { + "category": "helix", + "key": "Shift+T", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to character (excluded, backward)", + "command": "dance.seek.extend.backward" + }, + { + "category": "core", + "key": "F", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to character (included)", + "command": "dance.seek.included" + }, + { + "category": "helix", + "key": "Shift+F", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to character (included, backward)", + "command": "dance.seek.included.backward" + }, + { + "category": "helix", + "key": "F", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to character (included)", + "command": "dance.seek.included.extend" + }, + { + "category": "helix", + "key": "Shift+F", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to character (included, backward)", + "command": "dance.seek.included.extend.backward" + }, + { + "category": "core", + "key": "W", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to next word start", + "command": "dance.seek.word" + }, + { + "category": "core", + "key": "B", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to previous word start", + "command": "dance.seek.word.backward" + }, + { + "category": "helix", + "key": "W", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to next word start", + "command": "dance.seek.word.extend" + }, + { + "category": "helix", + "key": "B", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to previous word start", + "command": "dance.seek.word.extend.backward" + }, + { + "category": "helix", + "key": "Shift+W", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to next non-whitespace word start", + "command": "dance.seek.word.ws" + }, + { + "category": "helix", + "key": "Shift+B", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to previous non-whitespace word start", + "command": "dance.seek.word.ws.backward" + }, + { + "category": "helix", + "key": "Shift+W", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to next non-whitespace word start", + "command": "dance.seek.word.ws.extend" + }, + { + "category": "helix", + "key": "Shift+B", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to previous non-whitespace word start", + "command": "dance.seek.word.ws.extend.backward" + }, + { + "category": "core", + "key": "E", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to next word end", + "command": "dance.seek.wordEnd" + }, + { + "category": "helix", + "key": "E", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to next word end", + "command": "dance.seek.wordEnd.extend" + }, + { + "category": "helix", + "key": "Shift+E", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to next non-whitespace word end", + "command": "dance.seek.wordEnd.ws" + }, + { + "category": "helix", + "key": "Shift+E", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to next non-whitespace word end", + "command": "dance.seek.wordEnd.ws.extend" + }, + { + "category": "helix", + "key": "J", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend down", + "command": "dance.select.down.extend" + }, + { + "category": "helix", + "key": "Down", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend down", + "command": "dance.select.down.extend" + }, + { + "category": "core", + "key": "J", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Jump down", + "command": "dance.select.down.jump" + }, + { + "category": "core", + "key": "Down", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Jump down", + "command": "dance.select.down.jump" + }, + { + "category": "helix", + "key": "H", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend left", + "command": "dance.select.left.extend" + }, + { + "category": "helix", + "key": "Left", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend left", + "command": "dance.select.left.extend" + }, + { + "category": "core", + "key": "H", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Jump left", + "command": "dance.select.left.jump" + }, + { + "category": "core", + "key": "Left", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Jump left", + "command": "dance.select.left.jump" + }, + { + "category": "helix", + "key": "X", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Extend to line below", + "command": "dance.select.line.below.extend" + }, + { + "category": "helix", + "key": "X", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to line below", + "command": "dance.select.line.below.extend" + }, + { + "category": "core", + "key": "End", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to line end", + "command": "dance.select.lineEnd" + }, + { + "category": "helix", + "key": "End", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to line end", + "command": "dance.select.lineEnd.extend" + }, + { + "category": "core", + "key": "Home", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Select to line start", + "command": "dance.select.lineStart" + }, + { + "category": "helix", + "key": "Home", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to line start", + "command": "dance.select.lineStart.extend" + }, + { + "category": "helix", + "key": "L", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend right", + "command": "dance.select.right.extend" + }, + { + "category": "helix", + "key": "Right", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend right", + "command": "dance.select.right.extend" + }, + { + "category": "core", + "key": "L", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Jump right", + "command": "dance.select.right.jump" + }, + { + "category": "core", + "key": "Right", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Jump right", + "command": "dance.select.right.jump" + }, + { + "category": "helix", + "key": "G", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend to", + "command": "dance.select.to.extend" + }, + { + "category": "core", + "key": "G", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Go to", + "command": "dance.select.to.jump" + }, + { + "category": "helix", + "key": "K", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend up", + "command": "dance.select.up.extend" + }, + { + "category": "helix", + "key": "Up", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Extend up", + "command": "dance.select.up.extend" + }, + { + "category": "core", + "key": "K", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Jump up", + "command": "dance.select.up.jump" + }, + { + "category": "core", + "key": "Up", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Jump up", + "command": "dance.select.up.jump" + }, + { + "category": "core", + "key": "Ctrl+F", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "command": "dance.select.vertically", + "args": { + "direction": 1, + "by": "page", + "shift": "jump" + } + }, + { + "category": "core", + "key": "Ctrl+F", + "when": "editorTextFocus && dance.mode == 'helix/insert'", + "command": "dance.select.vertically", + "args": { + "direction": 1, + "by": "page", + "shift": "jump" + } + }, + { + "category": "core", + "key": "Ctrl+D", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "command": "dance.select.vertically", + "args": { + "direction": 1, + "by": "halfPage", + "shift": "jump" + } + }, + { + "category": "core", + "key": "Ctrl+D", + "when": "editorTextFocus && dance.mode == 'helix/insert'", + "command": "dance.select.vertically", + "args": { + "direction": 1, + "by": "halfPage", + "shift": "jump" + } + }, + { + "category": "core", + "key": "Ctrl+B", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "command": "dance.select.vertically", + "args": { + "direction": -1, + "by": "page", + "shift": "jump" + } + }, + { + "category": "core", + "key": "Ctrl+B", + "when": "editorTextFocus && dance.mode == 'helix/insert'", + "command": "dance.select.vertically", + "args": { + "direction": -1, + "by": "page", + "shift": "jump" + } + }, + { + "category": "core", + "key": "Ctrl+U", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "command": "dance.select.vertically", + "args": { + "direction": -1, + "by": "halfPage", + "shift": "jump" + } + }, + { + "category": "core", + "key": "Ctrl+U", + "when": "editorTextFocus && dance.mode == 'helix/insert'", + "command": "dance.select.vertically", + "args": { + "direction": -1, + "by": "halfPage", + "shift": "jump" + } + }, + { + "category": "helix", + "key": "Ctrl+F", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "command": "dance.select.vertically", + "args": { + "direction": 1, + "by": "page", + "shift": "extend" + } + }, + { + "category": "helix", + "key": "Ctrl+D", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "command": "dance.select.vertically", + "args": { + "direction": 1, + "by": "halfPage", + "shift": "extend" + } + }, + { + "category": "helix", + "key": "Ctrl+B", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "command": "dance.select.vertically", + "args": { + "direction": -1, + "by": "page", + "shift": "extend" + } + }, + { + "category": "helix", + "key": "Ctrl+U", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "command": "dance.select.vertically", + "args": { + "direction": -1, + "by": "halfPage", + "shift": "extend" + } + }, + { + "category": "core", + "key": "Alt+;", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Change direction of selections", + "command": "dance.selections.changeDirection" + }, + { + "category": "helix", + "key": "Alt+;", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Change direction of selections", + "command": "dance.selections.changeDirection" + }, + { + "category": "core", + "key": "Alt+,", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Clear main selections", + "command": "dance.selections.clear.main" + }, + { + "category": "helix", + "key": "Alt+,", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Clear main selections", + "command": "dance.selections.clear.main" + }, + { + "category": "core", + "key": ",", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Clear secondary selections", + "command": "dance.selections.clear.secondary" + }, + { + "category": "helix", + "key": ",", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Clear secondary selections", + "command": "dance.selections.clear.secondary" + }, + { + "category": "helix", + "key": "Shift+X", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Expand to lines", + "command": "dance.selections.expandToLines" + }, + { + "category": "helix", + "key": "Shift+X", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Expand to lines", + "command": "dance.selections.expandToLines" + }, + { + "category": "core", + "key": "Shift+4", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Filter selections", + "command": "dance.selections.filter" + }, + { + "category": "helix", + "key": "Shift+4", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Filter selections", + "command": "dance.selections.filter" + }, + { + "category": "core", + "key": "Alt+K", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Keep matching selections", + "command": "dance.selections.filter.regexp" + }, + { + "category": "helix", + "key": "Alt+K", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Keep matching selections", + "command": "dance.selections.filter.regexp" + }, + { + "category": "core", + "key": "Shift+Alt+K", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Clear matching selections", + "command": "dance.selections.filter.regexp.inverse" + }, + { + "category": "helix", + "key": "Shift+Alt+K", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Clear matching selections", + "command": "dance.selections.filter.regexp.inverse" + }, + { + "category": "core", + "key": "Shift+Alt+\\", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Pipe selections", + "command": "dance.selections.pipe" + }, + { + "category": "helix", + "key": "Shift+Alt+\\", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Pipe selections", + "command": "dance.selections.pipe" + }, + { + "category": "core", + "key": "Shift+1", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Pipe and append", + "command": "dance.selections.pipe.append" + }, + { + "category": "helix", + "key": "Shift+1", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Pipe and append", + "command": "dance.selections.pipe.append" + }, + { + "category": "core", + "key": "Shift+Alt+1", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Pipe and prepend", + "command": "dance.selections.pipe.prepend" + }, + { + "category": "helix", + "key": "Shift+Alt+1", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Pipe and prepend", + "command": "dance.selections.pipe.prepend" + }, + { + "category": "core", + "key": "Shift+\\", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Pipe and replace", + "command": "dance.selections.pipe.replace" + }, + { + "category": "helix", + "key": "Shift+\\", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Pipe and replace", + "command": "dance.selections.pipe.replace" + }, + { + "category": "core", + "key": ";", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Reduce selections to their cursor", + "command": "dance.selections.reduce" + }, + { + "category": "helix", + "key": ";", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Reduce selections to their cursor", + "command": "dance.selections.reduce" + }, + { + "category": "core", + "key": "Y", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Copy selections text", + "command": "dance.selections.saveText" + }, + { + "category": "helix", + "key": "Y", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Copy selections text", + "command": "dance.selections.saveText" + }, + { + "category": "core", + "key": "S", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Leap or select", + "command": "dance.selections.select.orLeap" + }, + { + "category": "helix", + "key": "S", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Leap or select", + "command": "dance.selections.select.orLeap" + }, + { + "category": "core", + "key": "Shift+S", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Split selections", + "command": "dance.selections.split" + }, + { + "category": "helix", + "key": "Shift+S", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Split selections", + "command": "dance.selections.split" + }, + { + "category": "core", + "key": "Alt+S", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Leap or select backward", + "command": "dance.selections.splitLines.orLeap.backward" + }, + { + "category": "helix", + "key": "Alt+S", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Leap or select backward", + "command": "dance.selections.splitLines.orLeap.backward" + }, + { + "category": "core", + "key": "Alt+X", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Trim lines", + "command": "dance.selections.trimLines" + }, + { + "category": "helix", + "key": "Alt+X", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Trim lines", + "command": "dance.selections.trimLines" + }, + { + "category": "core", + "key": "Shift+-", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Trim whitespace", + "command": "dance.selections.trimWhitespace" + }, + { + "category": "helix", + "key": "Shift+-", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Trim whitespace", + "command": "dance.selections.trimWhitespace" + }, + { + "category": "helix", + "key": "Shift+Alt+0", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Rotate selections clockwise (contents only)", + "command": "dance.selections.rotate.contents" + }, + { + "category": "helix", + "key": "Shift+Alt+0", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Rotate selections clockwise (contents only)", + "command": "dance.selections.rotate.contents" + }, + { + "category": "helix", + "key": "Shift+Alt+9", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Rotate selections counter-clockwise (contents only)", + "command": "dance.selections.rotate.contents.reverse" + }, + { + "category": "helix", + "key": "Shift+Alt+9", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Rotate selections counter-clockwise (contents only)", + "command": "dance.selections.rotate.contents.reverse" + }, + { + "category": "core", + "key": "Shift+0", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Rotate selections clockwise (selections only)", + "command": "dance.selections.rotate.selections" + }, + { + "category": "core", + "key": "Shift+9", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Rotate selections counter-clockwise (selections only)", + "command": "dance.selections.rotate.selections.reverse" + }, + { + "category": "helix", + "key": "Shift+9", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Rotate selections counter-clockwise (selections only)", + "command": "dance.selections.rotate.selections.reverse" + }, + { + "category": "helix", + "key": "Z", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Show view menu", + "command": "dance.openMenu", + "args": { + "menu": "view", + "$exclude": [] + } + }, + { + "category": "helix", + "key": "Z", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Show view menu", + "command": "dance.openMenu", + "args": { + "menu": "view", + "$exclude": [] + } + }, + { + "category": "helix", + "key": "Shift+Z", + "when": "editorTextFocus && dance.mode == 'helix/normal'", + "title": "Show view menu (locked)", + "command": "dance.openMenu", + "args": { + "menu": "view", + "locked": true, + "$exclude": [] + } + }, + { + "category": "helix", + "key": "Shift+Z", + "when": "editorTextFocus && dance.mode == 'helix/select'", + "title": "Show view menu (locked)", + "command": "dance.openMenu", + "args": { + "menu": "view", + "locked": true, + "$exclude": [] + } + }, + { + "key": "Q", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+C", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+D", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+G", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+H", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+K", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+L", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+M", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+Q", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+R", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+V", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+Y", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+2", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+3", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+5", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+6", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "'", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "-", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "=", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Tab", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Space", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "NumPad_Add", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "NumPad_Subtract", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+=", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+Tab", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+Space", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+NumPad_Add", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Shift+NumPad_Subtract", + "command": "dance.ignore", + "when": "dance.mode == 'helix/normal'" + }, + { + "key": "Q", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "R", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "0", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "1", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "2", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "3", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "4", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "5", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "6", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "7", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "8", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "9", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+C", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+D", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+G", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+H", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+K", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+L", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+M", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+Q", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+R", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+V", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+Y", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+0", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+2", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+3", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+5", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+6", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+7", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+8", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "'", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "-", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "=", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Tab", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Space", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "NumPad_Add", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "NumPad_Subtract", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+'", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+=", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+Tab", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+Space", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+NumPad_Add", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + }, + { + "key": "Shift+NumPad_Subtract", + "command": "dance.ignore", + "when": "dance.mode == 'helix/select'" + } + ] + } +} diff --git a/meta.ts b/meta.ts index c6db388..f6378d4 100644 --- a/meta.ts +++ b/meta.ts @@ -460,6 +460,15 @@ export declare namespace Builder { line: number; } + export interface Keybinding { + readonly title?: string; + readonly key: string; + readonly when: string; + readonly command: string; + readonly category?: string; + readonly args?: any; + } + export interface ParsedModule { readonly path: string; readonly name: string; @@ -476,13 +485,7 @@ export declare namespace Builder { readonly enablement?: string; }[]; - readonly keybindings: { - readonly title?: string; - readonly key: string; - readonly when: string; - readonly command: string; - readonly args?: any; - }[]; + readonly keybindings: Keybinding[]; } } @@ -518,10 +521,6 @@ 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) { @@ -603,11 +602,10 @@ function getCommands(module: Omit) { /** * Returns all defined keybindings in the given module. */ -function getKeybindings(module: Omit) { +function getKeybindings(module: Omit): Builder.Keybinding[] { return [ ...module.functions.flatMap((f) => parseKeys(f.properties["keys"] ?? "").map((key) => ({ - key: key.key, - when: key.when, + ...key, title: f.summary, command: `dance.${f.qualifiedName}`, }))), @@ -619,8 +617,7 @@ function getKeybindings(module: Omit) { if (qualifiedIdentifier !== undefined) { return parsedKeys.map((key) => ({ - key: key.key, - when: key.when, + ...key, title, command: `dance.${qualifiedIdentifier}`, })); @@ -637,8 +634,7 @@ function getKeybindings(module: Omit) { } return parsedKeys.map((key) => ({ - key: key.key, - when: key.when, + ...key, title, command, args: parsedCommands[0][1], @@ -646,8 +642,7 @@ function getKeybindings(module: Omit) { } return parsedKeys.map((key) => ({ - key: key.key, - when: key.when, + ...key, title, command: "dance.run", args: { @@ -658,6 +653,36 @@ function getKeybindings(module: Omit) { ].sort((a, b) => a.command.localeCompare(b.command)); } +export function generateIgnoredKeybinds( + currentKeybindings: Builder.Keybinding[], + when: string, +): Builder.Keybinding[] { + const alphanum = [..."ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"], + symbols = [...",'-=", "Tab", "Space", "NumPad_Add", "NumPad_Subtract"], + keysToAssign = new Set([ + ...alphanum, + ...alphanum.map((x) => `Shift+${x}`), + ...symbols, + ...symbols.map((x) => `Shift+${x}`), + ]), + ignoredKeybindings: Builder.Keybinding[] = []; + + const unassignedKeys = new Set(keysToAssign); + for (const keybinding of currentKeybindings) { + unassignedKeys.delete(keybinding.key); + } + + for (const unassignedKey of unassignedKeys) { + ignoredKeybindings.push({ + key: unassignedKey, + command: "dance.ignore", + when, + }); + } + + return ignoredKeybindings; +} + /** * Given a multiline string, returns the same string with all lines starting * with an indentation `>= by` reduced by `by` spaces. diff --git a/package.build.ts b/package.build.ts index 7648936..f0da06b 100644 --- a/package.build.ts +++ b/package.build.ts @@ -1,4 +1,4 @@ -import type { Builder } from "./meta"; +import { type Builder, generateIgnoredKeybinds } from "./meta"; import { availableClipboardRegisters } from "./src/utils/constants"; // Shared values @@ -22,7 +22,7 @@ const builtinModesAreDeprecatedMessage = "Built-in modes are deprecated. Use `#dance.modes#` instead."; const modeNamePattern = { - pattern: /^[a-zA-Z]\w*$/.source, + pattern: /^[a-zA-Z]\w*\/?\w*$/.source, patternErrorMessage: "", }; @@ -129,6 +129,7 @@ export const pkg = (modules: Builder.ParsedModule[]) => ({ "publish": "vsce publish --allow-star-activation", "package:pre": `vsce package --allow-star-activation --pre-release --no-git-tag-version --no-update-package-json ${version.replace(/\d+$/, "$&" + preRelease.toString().padStart(3, "0"))}`, "publish:pre": `vsce publish --allow-star-activation --pre-release --no-git-tag-version --no-update-package-json ${version.replace(/\d+$/, "$&" + preRelease.toString().padStart(3, "0"))}`, + "package-helix": `cd extensions/helix && npm run package`, }, devDependencies: { @@ -206,12 +207,6 @@ 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", @@ -591,13 +586,13 @@ export const pkg = (modules: Builder.ParsedModule[]) => ({ }, }, } as Record}>, + { items: Record }>, }, "dance.systemClipboardRegister": { enum: ["dquote", null, ...availableClipboardRegisters], enumItemLabels: ['"', "None"], - enumDescriptions:["The default yank register", "Disables using the system clipboard"], + enumDescriptions: ["The default yank register", "Disables using the system clipboard"], default: "dquote", description: "Controls which register maps to the system clipboard.", }, @@ -761,42 +756,16 @@ export const pkg = (modules: Builder.ParsedModule[]) => ({ // TODO: unassign default keybindings, and force the user to explicitly set // them up. keybindings: (() => { - const keybindings = modules.flatMap((module) => module.keybindings), - alphanum = [..."ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"], - symbols = [...",'-=", "Tab", "Space", "NumPad_Add", "NumPad_Subtract"], - keysToAssign = new Set([ - ...alphanum, - ...alphanum.map((x) => `Shift+${x}`), - ...symbols, - ...symbols.map((x) => `Shift+${x}`), - ]); - - 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); - } - } - - for (const unassignedKey of unassignedKeys) { - keybindings.push({ - key: unassignedKey, - command: "dance.ignore", - when: `dance.mode == '${mode}' && dance.behavior == '${category}'`, - }); - } - } - - return keybindings; + const keybindings = modules + .flatMap((module) => module.keybindings) + .filter((keybinding) => ["core", "kakoune", undefined].includes(keybinding.category)); + + return [ + ...keybindings, + ...generateIgnoredKeybinds(keybindings,`dance.mode == 'normal'`), + ]; })(), + }, }); diff --git a/package.json b/package.json index c6debb2..4b88c4c 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "package": "vsce package --allow-star-activation", "publish": "vsce publish --allow-star-activation", "package:pre": "vsce package --allow-star-activation --pre-release --no-git-tag-version --no-update-package-json 0.5.15001", - "publish:pre": "vsce publish --allow-star-activation --pre-release --no-git-tag-version --no-update-package-json 0.5.15001" + "publish:pre": "vsce publish --allow-star-activation --pre-release --no-git-tag-version --no-update-package-json 0.5.15001", + "package-helix": "cd extensions/helix && npm run package" }, "devDependencies": { "@types/glob": "^7.2.0", @@ -93,28 +94,16 @@ "scope": "language-overridable", "default": "normal", "description": "Controls which mode is set by default when an editor is opened.", - "pattern": "^[a-zA-Z]\\w*$", + "pattern": "^[a-zA-Z]\\w*\\/?\\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", "additionalProperties": { "type": "object", "propertyNames": { - "pattern": "^[a-zA-Z]\\w*$", + "pattern": "^[a-zA-Z]\\w*\\/?\\w*$", "patternErrorMessage": "" }, "properties": { @@ -124,7 +113,7 @@ "null" ], "description": "Controls how default configuration options are obtained for this mode. Specify a string to inherit from the mode with the given name, and null to inherit from the VS Code configuration.", - "pattern": "^[a-zA-Z]\\w*$", + "pattern": "^[a-zA-Z]\\w*\\/?\\w*$", "patternErrorMessage": "" }, "cursorStyle": { @@ -2788,366 +2777,294 @@ }, "keybindings": [ { + "category": "core", "key": "Shift+7", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Align selections", "command": "dance.edit.align" }, { + "category": "kakoune", "key": "Alt+`", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Swap case", "command": "dance.edit.case.swap" }, { + "category": "core", "key": "`", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "kakoune", "key": "Shift+`", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Transform to upper case", "command": "dance.edit.case.toUpper" }, { + "category": "kakoune", "key": "Shift+Alt+7", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Copy indentation", "command": "dance.edit.copyIndentation" }, { + "category": "kakoune", "key": "Shift+Alt+,", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Deindent selected lines", "command": "dance.edit.deindent" }, { + "category": "core", "key": "Shift+,", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "core", "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" - }, - { + "category": "kakoune", "key": "Alt+C", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Delete and switch to Insert", "command": "dance.edit.delete-insert" }, { + "category": "core", "key": "Shift+.", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "kakoune", "key": "Shift+Alt+.", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Indent selected lines (including empty lines)", "command": "dance.edit.indent.withEmpty" }, { + "category": "kakoune", "key": "Shift+Alt+R", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Insert contents of register", "command": "dance.edit.insert" }, { + "category": "kakoune", "key": "Alt+J", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "core", "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" - }, - { + "category": "kakoune", "key": "Shift+Alt+O", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Insert new line above each selection", "command": "dance.edit.newLine.above" }, { + "category": "core", "key": "Shift+O", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "kakoune", "key": "Alt+O", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Insert new line below each selection", "command": "dance.edit.newLine.below" }, { + "category": "core", "key": "O", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "core", "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" - }, - { + "category": "core", "key": "Shift+P", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Paste before and select", "command": "dance.edit.paste.before.select" }, { + "category": "kakoune", "key": "Alt+P", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Paste all after and select", "command": "dance.edit.pasteAll.after.select" }, { + "category": "kakoune", "key": "Shift+Alt+P", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Paste all before and select", "command": "dance.edit.pasteAll.before.select" }, { + "category": "core", "key": "R", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Replace characters", "command": "dance.edit.replaceCharacters" }, { + "category": "kakoune", "key": "Ctrl+R", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Pick register and replace", "command": "dance.edit.selectRegister-insert" }, { + "category": "kakoune", "key": "Ctrl+R", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert'", + "when": "editorTextFocus && dance.mode == 'insert'", "title": "Pick register and replace", "command": "dance.edit.selectRegister-insert" }, { + "category": "core", "key": "D", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Copy and delete", "command": "dance.edit.yank-delete" }, { - "key": "D", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", - "title": "Copy and delete", - "command": "dance.edit.yank-delete" - }, - { + "category": "core", "key": "C", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Copy, delete and switch to Insert", "command": "dance.edit.yank-delete-insert" }, { - "key": "C", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", - "title": "Copy, delete and switch to Insert", - "command": "dance.edit.yank-delete-insert" - }, - { + "category": "kakoune", "key": "Shift+R", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Copy and replace", "command": "dance.edit.yank-replace" }, { + "category": "kakoune", "key": "Q", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Replay recording", "command": "dance.history.recording.play" }, { + "category": "kakoune", "key": "Shift+Q", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && !dance.isRecording", + "when": "editorTextFocus && dance.mode == 'normal' && !dance.isRecording", "title": "Start recording", "command": "dance.history.recording.start" }, { + "category": "kakoune", "key": "Escape", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && dance.isRecording", + "when": "editorTextFocus && dance.mode == 'normal' && dance.isRecording", "title": "Stop recording", "command": "dance.history.recording.stop" }, { + "category": "kakoune", "key": "Shift+Q", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal' && dance.isRecording", + "when": "editorTextFocus && dance.mode == 'normal' && dance.isRecording", "title": "Stop recording", "command": "dance.history.recording.stop" }, { + "category": "core", "key": "Shift+U", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Redo", "command": "dance.history.redo" }, { - "key": "Shift+U", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", - "title": "Redo", - "command": "dance.history.redo" - }, - { + "category": "kakoune", "key": "Shift+Alt+U", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Redo a change of selections", "command": "dance.history.redo.selections" }, { + "category": "core", "key": ".", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Repeat last edit without a command", "command": "dance.history.repeat.edit" }, { + "category": "core", "key": "NumPad_Decimal", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Repeat last edit without a command", "command": "dance.history.repeat.edit" }, { + "category": "core", "key": "Alt+.", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "core", "key": "U", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Undo", "command": "dance.history.undo" }, { - "key": "U", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", - "title": "Undo", - "command": "dance.history.undo" - }, - { + "category": "kakoune", "key": "Alt+U", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Undo a change of selections", "command": "dance.history.undo.selections" }, { + "category": "core", "key": "Escape", "when": "editorTextFocus && dance.mode == 'normal' && !dance.isRecording && !markersNavigationVisible", "title": "Cancel Dance operation", "command": "dance.cancel" }, { + "category": "core", "key": "Escape", "when": "editorTextFocus && dance.mode == 'input'", "title": "Cancel Dance operation", "command": "dance.cancel" }, { + "category": "core", "key": "Up", "when": "inputFocus && dance.inPrompt", "command": "dance.changeInput", @@ -3156,6 +3073,7 @@ } }, { + "category": "core", "key": "Down", "when": "inputFocus && dance.inPrompt", "command": "dance.changeInput", @@ -3164,12 +3082,14 @@ } }, { + "category": "core", "key": "Shift+'", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select register for next command", "command": "dance.selectRegister" }, { + "category": "core", "key": "0", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 0 to the counter", @@ -3179,6 +3099,7 @@ } }, { + "category": "core", "key": "NumPad0", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 0 to the counter", @@ -3188,6 +3109,7 @@ } }, { + "category": "core", "key": "1", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 1 to the counter", @@ -3197,6 +3119,7 @@ } }, { + "category": "core", "key": "NumPad1", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 1 to the counter", @@ -3206,6 +3129,7 @@ } }, { + "category": "core", "key": "2", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 2 to the counter", @@ -3215,6 +3139,7 @@ } }, { + "category": "core", "key": "NumPad2", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 2 to the counter", @@ -3224,6 +3149,7 @@ } }, { + "category": "core", "key": "3", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 3 to the counter", @@ -3233,6 +3159,7 @@ } }, { + "category": "core", "key": "NumPad3", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 3 to the counter", @@ -3242,6 +3169,7 @@ } }, { + "category": "core", "key": "4", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 4 to the counter", @@ -3251,6 +3179,7 @@ } }, { + "category": "core", "key": "NumPad4", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 4 to the counter", @@ -3260,6 +3189,7 @@ } }, { + "category": "core", "key": "5", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 5 to the counter", @@ -3269,6 +3199,7 @@ } }, { + "category": "core", "key": "NumPad5", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 5 to the counter", @@ -3278,6 +3209,7 @@ } }, { + "category": "core", "key": "6", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 6 to the counter", @@ -3287,6 +3219,7 @@ } }, { + "category": "core", "key": "NumPad6", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 6 to the counter", @@ -3296,6 +3229,7 @@ } }, { + "category": "core", "key": "7", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 7 to the counter", @@ -3305,6 +3239,7 @@ } }, { + "category": "core", "key": "NumPad7", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 7 to the counter", @@ -3314,6 +3249,7 @@ } }, { + "category": "core", "key": "8", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 8 to the counter", @@ -3323,6 +3259,7 @@ } }, { + "category": "core", "key": "NumPad8", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 8 to the counter", @@ -3332,6 +3269,7 @@ } }, { + "category": "core", "key": "9", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 9 to the counter", @@ -3341,6 +3279,7 @@ } }, { + "category": "core", "key": "NumPad9", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add the digit 9 to the counter", @@ -3350,6 +3289,7 @@ } }, { + "category": "core", "key": "Shift+;", "when": "editorTextFocus && dance.mode == 'normal'", "command": "workbench.action.showCommands", @@ -3358,750 +3298,588 @@ } }, { + "category": "core", "key": "A", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "core", "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" - }, - { + "category": "core", "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" - }, - { + "category": "core", "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" - }, - { + "category": "core", "key": "Escape", "when": "editorTextFocus && dance.mode == 'insert'", "title": "Set mode to Normal", "command": "dance.modes.set.normal" }, { - "key": "Escape", - "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" - }, - { + "category": "kakoune", "key": "Ctrl+V", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Temporary Insert mode", "command": "dance.modes.set.temporarily.insert" }, { + "category": "kakoune", "key": "Ctrl+V", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert'", + "when": "editorTextFocus && dance.mode == 'insert'", "title": "Temporary Normal mode", "command": "dance.modes.set.temporarily.normal" }, { + "category": "core", "key": "/", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Search", "command": "dance.search" }, { + "category": "core", "key": "NumPad_Divide", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Search", "command": "dance.search" }, { + "category": "kakoune", "key": "Alt+/", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Search backward", "command": "dance.search.backward" }, { + "category": "kakoune", "key": "Shift+Alt+/", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", - "title": "Search backward (extend)", - "command": "dance.search.backward.extend" - }, - { - "key": "Shift+/", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Search backward (extend)", "command": "dance.search.backward.extend" }, { + "category": "kakoune", "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Search (extend)", "command": "dance.search.extend" }, { + "category": "core", "key": "N", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select next match", "command": "dance.search.next" }, { + "category": "kakoune", "key": "Shift+N", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add next match", "command": "dance.search.next.add" }, { + "category": "kakoune", "key": "Alt+N", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select previous match", "command": "dance.search.previous" }, { + "category": "kakoune", "key": "Shift+Alt+N", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Add previous match", "command": "dance.search.previous.add" }, { + "category": "core", "key": "Shift+Alt+8", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Search current selection", "command": "dance.search.selection" }, { + "category": "core", "key": "Alt+NumPad_Multiply", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Search current selection", "command": "dance.search.selection" }, { + "category": "core", "key": "Shift+8", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Search current selection (smart)", "command": "dance.search.selection.smart" }, { + "category": "core", "key": "NumPad_Multiply", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Search current selection (smart)", "command": "dance.search.selection.smart" }, { + "category": "core", "key": "T", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to character (excluded)", "command": "dance.seek" }, { + "category": "kakoune", "key": "Alt+A", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select whole object", "command": "dance.seek.askObject" }, { + "category": "kakoune", "key": "Alt+A", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert'", + "when": "editorTextFocus && dance.mode == 'insert'", "title": "Select whole object", "command": "dance.seek.askObject" }, { + "category": "kakoune", "key": "]", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to whole object end", "command": "dance.seek.askObject.end" }, { + "category": "kakoune", "key": "Shift+]", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to whole object end", "command": "dance.seek.askObject.end.extend" }, { + "category": "kakoune", "key": "Alt+I", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select inner object", "command": "dance.seek.askObject.inner" }, { + "category": "kakoune", "key": "Alt+I", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'insert'", + "when": "editorTextFocus && dance.mode == 'insert'", "title": "Select inner object", "command": "dance.seek.askObject.inner" }, { + "category": "kakoune", "key": "Alt+]", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to inner object end", "command": "dance.seek.askObject.inner.end" }, { + "category": "kakoune", "key": "Shift+Alt+]", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to inner object end", "command": "dance.seek.askObject.inner.end.extend" }, { + "category": "kakoune", "key": "Alt+[", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to inner object start", "command": "dance.seek.askObject.inner.start" }, { + "category": "kakoune", "key": "Shift+Alt+[", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to inner object start", "command": "dance.seek.askObject.inner.start.extend" }, { + "category": "kakoune", "key": "[", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to whole object start", "command": "dance.seek.askObject.start" }, { + "category": "kakoune", "key": "Shift+[", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to whole object start", "command": "dance.seek.askObject.start.extend" }, { + "category": "kakoune", "key": "Alt+T", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to character (excluded, backward)", "command": "dance.seek.backward" }, { + "category": "kakoune", "key": "M", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to next enclosing character", "command": "dance.seek.enclosing" }, { + "category": "kakoune", "key": "Alt+M", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to previous enclosing character", "command": "dance.seek.enclosing.backward" }, { + "category": "kakoune", "key": "Shift+M", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to next enclosing character", "command": "dance.seek.enclosing.extend" }, { + "category": "kakoune", "key": "Shift+Alt+M", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to previous enclosing character", "command": "dance.seek.enclosing.extend.backward" }, { + "category": "kakoune", "key": "Shift+T", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", - "title": "Extend to character (excluded)", - "command": "dance.seek.extend" - }, - { - "key": "T", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to character (excluded)", "command": "dance.seek.extend" }, { + "category": "kakoune", "key": "Shift+Alt+T", - "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.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to character (excluded, backward)", "command": "dance.seek.extend.backward" }, { + "category": "core", "key": "F", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to character (included)", "command": "dance.seek.included" }, { + "category": "kakoune", "key": "Alt+F", - "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.behavior == 'helix' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to character (included, backward)", "command": "dance.seek.included.backward" }, { + "category": "kakoune", "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.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to character (included)", "command": "dance.seek.included.extend" }, { + "category": "kakoune", "key": "Shift+Alt+F", - "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.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to character (included, backward)", "command": "dance.seek.included.extend.backward" }, { + "category": "core", "key": "W", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to next word start", "command": "dance.seek.word" }, { + "category": "core", "key": "B", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to previous word start", "command": "dance.seek.word.backward" }, { + "category": "kakoune", "key": "Shift+W", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", - "title": "Extend to next word start", - "command": "dance.seek.word.extend" - }, - { - "key": "W", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to next word start", "command": "dance.seek.word.extend" }, { + "category": "kakoune", "key": "Shift+B", - "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.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to previous word start", "command": "dance.seek.word.extend.backward" }, { + "category": "kakoune", "key": "Alt+W", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to next non-whitespace word start", "command": "dance.seek.word.ws" }, { + "category": "kakoune", "key": "Alt+B", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to previous non-whitespace word start", "command": "dance.seek.word.ws.backward" }, { + "category": "kakoune", "key": "Shift+Alt+W", - "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.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to next non-whitespace word start", "command": "dance.seek.word.ws.extend" }, { + "category": "kakoune", "key": "Shift+Alt+B", - "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.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to previous non-whitespace word start", "command": "dance.seek.word.ws.extend.backward" }, { + "category": "core", "key": "E", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to next word end", "command": "dance.seek.wordEnd" }, { + "category": "kakoune", "key": "Shift+E", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", - "title": "Extend to next word end", - "command": "dance.seek.wordEnd.extend" - }, - { - "key": "E", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to next word end", "command": "dance.seek.wordEnd.extend" }, { + "category": "kakoune", "key": "Alt+E", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to next non-whitespace word end", "command": "dance.seek.wordEnd.ws" }, { + "category": "kakoune", "key": "Shift+Alt+E", - "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.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to next non-whitespace word end", "command": "dance.seek.wordEnd.ws.extend" }, { + "category": "kakoune", "key": "Shift+5", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select whole buffer", "command": "dance.select.buffer" }, { + "category": "kakoune", "key": "Shift+J", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend down", "command": "dance.select.down.extend" }, { + "category": "kakoune", "key": "Shift+Down", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", - "title": "Extend down", - "command": "dance.select.down.extend" - }, - { - "key": "J", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", - "title": "Extend down", - "command": "dance.select.down.extend" - }, - { - "key": "Down", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend down", "command": "dance.select.down.extend" }, { + "category": "core", "key": "J", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Jump down", "command": "dance.select.down.jump" }, { + "category": "core", "key": "Down", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Jump down", "command": "dance.select.down.jump" }, { + "category": "kakoune", "key": "Shift+H", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend left", "command": "dance.select.left.extend" }, { + "category": "kakoune", "key": "Shift+Left", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", - "title": "Extend left", - "command": "dance.select.left.extend" - }, - { - "key": "H", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", - "title": "Extend left", - "command": "dance.select.left.extend" - }, - { - "key": "Left", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend left", "command": "dance.select.left.extend" }, { + "category": "core", "key": "H", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Jump left", "command": "dance.select.left.jump" }, { + "category": "core", "key": "Left", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "kakoune", "key": "Alt+L", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to line end", "command": "dance.select.lineEnd" }, { + "category": "core", "key": "End", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to line end", "command": "dance.select.lineEnd" }, { + "category": "kakoune", "key": "Shift+Alt+L", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to line end", "command": "dance.select.lineEnd.extend" }, { + "category": "kakoune", "key": "Shift+End", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to line end", "command": "dance.select.lineEnd.extend" }, { + "category": "kakoune", "key": "Alt+H", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to line start", "command": "dance.select.lineStart" }, { + "category": "core", "key": "Home", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Select to line start", "command": "dance.select.lineStart" }, { + "category": "kakoune", "key": "Shift+Alt+H", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to line start", "command": "dance.select.lineStart.extend" }, { + "category": "kakoune", "key": "Shift+Home", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to line start", "command": "dance.select.lineStart.extend" }, { + "category": "kakoune", "key": "Shift+L", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend right", "command": "dance.select.right.extend" }, { + "category": "kakoune", "key": "Shift+Right", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", - "title": "Extend right", - "command": "dance.select.right.extend" - }, - { - "key": "L", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", - "title": "Extend right", - "command": "dance.select.right.extend" - }, - { - "key": "Right", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend right", "command": "dance.select.right.extend" }, { + "category": "core", "key": "L", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Jump right", "command": "dance.select.right.jump" }, { + "category": "core", "key": "Right", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Jump right", "command": "dance.select.right.jump" }, { + "category": "kakoune", "key": "Shift+G", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", - "title": "Extend to", - "command": "dance.select.to.extend" - }, - { - "key": "G", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend to", "command": "dance.select.to.extend" }, { + "category": "core", "key": "G", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Go to", "command": "dance.select.to.jump" }, { + "category": "kakoune", "key": "Shift+K", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend up", "command": "dance.select.up.extend" }, { + "category": "kakoune", "key": "Shift+Up", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", - "title": "Extend up", - "command": "dance.select.up.extend" - }, - { - "key": "K", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", - "title": "Extend up", - "command": "dance.select.up.extend" - }, - { - "key": "Up", - "when": "editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Extend up", "command": "dance.select.up.extend" }, { + "category": "core", "key": "K", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Jump up", "command": "dance.select.up.jump" }, { + "category": "core", "key": "Up", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Jump up", "command": "dance.select.up.jump" }, { + "category": "core", "key": "Ctrl+F", "when": "editorTextFocus && dance.mode == 'normal'", "command": "dance.select.vertically", @@ -4112,6 +3890,7 @@ } }, { + "category": "core", "key": "Ctrl+F", "when": "editorTextFocus && dance.mode == 'insert'", "command": "dance.select.vertically", @@ -4122,6 +3901,7 @@ } }, { + "category": "core", "key": "Ctrl+D", "when": "editorTextFocus && dance.mode == 'normal'", "command": "dance.select.vertically", @@ -4132,6 +3912,7 @@ } }, { + "category": "core", "key": "Ctrl+D", "when": "editorTextFocus && dance.mode == 'insert'", "command": "dance.select.vertically", @@ -4142,6 +3923,7 @@ } }, { + "category": "core", "key": "Ctrl+B", "when": "editorTextFocus && dance.mode == 'normal'", "command": "dance.select.vertically", @@ -4152,6 +3934,7 @@ } }, { + "category": "core", "key": "Ctrl+B", "when": "editorTextFocus && dance.mode == 'insert'", "command": "dance.select.vertically", @@ -4162,6 +3945,7 @@ } }, { + "category": "core", "key": "Ctrl+U", "when": "editorTextFocus && dance.mode == 'normal'", "command": "dance.select.vertically", @@ -4172,6 +3956,7 @@ } }, { + "category": "core", "key": "Ctrl+U", "when": "editorTextFocus && dance.mode == 'insert'", "command": "dance.select.vertically", @@ -4182,240 +3967,142 @@ } }, { - "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" - } - }, - { + "category": "core", "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" - }, - { + "category": "core", "key": "Alt+,", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "core", "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" - }, - { + "category": "kakoune", "key": "Shift+C", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Copy selections below", "command": "dance.selections.copy" }, { + "category": "kakoune", "key": "Shift+Alt+C", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Copy selections above", "command": "dance.selections.copy.above" }, { + "category": "kakoune", "key": "X", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Expand to lines", "command": "dance.selections.expandToLines" }, { + "category": "kakoune", "key": "Shift+Alt+;", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Forward selections", "command": "dance.selections.faceForward" }, { + "category": "core", "key": "Shift+4", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "core", "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" - }, - { + "category": "core", "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" - }, - { + "category": "kakoune", "key": "Shift+Alt+-", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Merge contiguous selections", "command": "dance.selections.merge" }, { + "category": "core", "key": "Shift+Alt+\\", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "core", "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" - }, - { + "category": "core", "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" - }, - { + "category": "core", "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" - }, - { + "category": "core", "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" - }, - { + "category": "kakoune", "key": "Shift+Alt+S", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Reduce selections to their ends", "command": "dance.selections.reduce.edges" }, { + "category": "kakoune", "key": "Z", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Restore selections", "command": "dance.selections.restore" }, { + "category": "kakoune", "key": "Alt+Z", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Combine register selections with current ones", "command": "dance.selections.restore.withCurrent" }, { + "category": "kakoune", "key": "Shift+Alt+Z", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "command": "dance.selections.restore.withCurrent", "args": { "reverse": true, @@ -4423,166 +4110,86 @@ } }, { + "category": "kakoune", "key": "Shift+Z", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Save selections", "command": "dance.selections.save" }, { + "category": "core", "key": "Y", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "core", "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" - }, - { + "category": "core", "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" - }, - { + "category": "core", "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.behavior == 'dance' && dance.mode == 'normal'", - "title": "Toggle selection indices", - "command": "dance.selections.toggleIndices" - }, - { + "category": "core", "key": "Alt+X", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "core", "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" - }, - { + "category": "kakoune", "key": "Shift+Alt+0", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Rotate selections clockwise", "command": "dance.selections.rotate.both" }, { + "category": "kakoune", "key": "Shift+Alt+9", - "when": "editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal'", + "when": "editorTextFocus && 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" - }, - { + "category": "core", "key": "Shift+0", "when": "editorTextFocus && dance.mode == 'normal'", "title": "Rotate selections clockwise (selections only)", "command": "dance.selections.rotate.selections" }, { + "category": "core", "key": "Shift+9", "when": "editorTextFocus && dance.mode == 'normal'", "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" - }, - { + "category": "kakoune", "key": "V", - "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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Show view menu", "command": "dance.openMenu", "args": { @@ -4591,30 +4198,9 @@ } }, { + "category": "kakoune", "key": "Shift+V", - "when": "editorTextFocus && dance.behavior == 'kakoune' && 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 == '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'", + "when": "editorTextFocus && dance.mode == 'normal'", "title": "Show view menu (locked)", "command": "dance.openMenu", "args": { @@ -4626,462 +4212,92 @@ { "key": "Shift+D", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "Shift+X", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "Shift+Y", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "Shift+2", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "Shift+3", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "Shift+6", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "'", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "-", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "=", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "Tab", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "Space", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "NumPad_Add", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" + "when": "dance.mode == 'normal'" }, { "key": "NumPad_Subtract", "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" - }, - { - "key": "Shift+=", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" - }, - { - "key": "Shift+Tab", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" - }, - { - "key": "Shift+Space", - "command": "dance.ignore", - "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", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'kakoune'" - }, - { - "key": "M", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Q", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+C", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+D", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+G", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+H", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+J", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+K", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+L", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+M", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+Q", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+R", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+V", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+Y", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+2", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+3", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+5", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+6", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "'", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "-", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "=", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Tab", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Space", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "NumPad_Add", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "NumPad_Subtract", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+=", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+Tab", - "command": "dance.ignore", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "Shift+Space", - "command": "dance.ignore", - "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", - "when": "dance.mode == 'normal' && dance.behavior == 'helix'" - }, - { - "key": "M", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Q", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "R", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "0", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "1", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "2", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "3", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "4", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "5", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "6", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "7", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "8", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "9", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+C", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+D", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+G", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+H", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+K", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+L", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+M", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+Q", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+R", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+V", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+Y", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+0", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+2", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+3", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+5", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+6", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+7", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+8", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "'", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "-", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "=", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Tab", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Space", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "NumPad_Add", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "NumPad_Subtract", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" - }, - { - "key": "Shift+'", - "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" + "when": "dance.mode == 'normal'" }, { "key": "Shift+=", "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" + "when": "dance.mode == 'normal'" }, { "key": "Shift+Tab", "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" + "when": "dance.mode == 'normal'" }, { "key": "Shift+Space", "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" + "when": "dance.mode == 'normal'" }, { "key": "Shift+NumPad_Add", "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" + "when": "dance.mode == 'normal'" }, { "key": "Shift+NumPad_Subtract", "command": "dance.ignore", - "when": "dance.mode == 'select' && dance.behavior == 'helix'" + "when": "dance.mode == 'normal'" } ] } diff --git a/src/api/data/commands.yaml b/src/api/data/commands.yaml index 141edaa..841f601 100644 --- a/src/api/data/commands.yaml +++ b/src/api/data/commands.yaml @@ -234,7 +234,8 @@ edit.join: keys: qwerty: |- - `a-j` (core: normal) + `a-j` (kakoune: normal) + `s-j` (helix: normal) `s-j` (helix: select) doc: @@ -2739,6 +2740,26 @@ anonymous: qwerty: |- `up` (core: prompt) + - title: + en: Open match menu + + commands: |- + [".openMenu", { menu: "match" }] + + keys: + qwerty: |- + `m` (helix: normal) + + - title: + en: Open match menu with extend + + commands: |- + [".openMenu", { menu: "match", pass: [{shift: "extend"}] }] + + keys: + qwerty: |- + `m` (helix: select) + - title: en: Show view menu diff --git a/src/api/modes.ts b/src/api/modes.ts index 23e4404..f258d74 100644 --- a/src/api/modes.ts +++ b/src/api/modes.ts @@ -13,8 +13,7 @@ export function toMode(modeName: string, count: number): Thenable; export async function toMode(modeName: string, count?: number) { const context = Context.current, extension = context.extension, - mode = extension.modes.get(modeName); - + mode = findMode(modeName); if (mode === undefined || mode.isPendingDeletion) { throw new Error(`mode ${JSON.stringify(modeName)} does not exist`); } @@ -62,3 +61,24 @@ export async function toMode(modeName: string, count?: number) { })); }, 0); } + +/* Find a mode by name, prioritizing one that's within the same 'namespace' */ +function findMode(modeName: string, context?: Context) { + context = context ?? Context.current; + + const currentMode = context.mode, + split = currentMode.name.split("/"); + if (split.length === 2) { + const namespacedMode = context.extension.modes.get(`${split[0]}/${modeName}`); + if (namespacedMode) { + return namespacedMode; + } + } + + const directMode = context.extension.modes.get(modeName); + if (directMode) { + return directMode; + } + + return undefined; +} diff --git a/src/commands/README.md b/src/commands/README.md index ab733b6..04f7554 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.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.case.swapSwap caseAlt+` (editorTextFocus && dance.mode == 'normal')Shift+` (editorTextFocus && dance.mode == 'normal')Shift+` (editorTextFocus && dance.mode == 'select') +edit.case.toLowerTransform to lower case` (editorTextFocus && dance.mode == 'normal')` (editorTextFocus && dance.mode == 'select') +edit.case.toUpperTransform to upper caseShift+` (editorTextFocus && dance.mode == 'normal')Alt+` (editorTextFocus && dance.mode == 'normal')Alt+` (editorTextFocus && dance.mode == 'select') +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')Shift+, (editorTextFocus && dance.mode == 'select') +edit.deleteDeleteAlt+D (editorTextFocus && dance.mode == 'normal')Alt+D (editorTextFocus && dance.mode == 'select') +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')Shift+O (editorTextFocus && dance.mode == 'select') +edit.newLine.below.insertInsert new line below and switch to insertO (editorTextFocus && dance.mode == 'normal')O (editorTextFocus && dance.mode == 'select') +edit.paste.afterPaste afterP (editorTextFocus && dance.mode == 'select') edit.paste.after.selectPaste after and selectP (editorTextFocus && dance.mode == 'normal') -edit.paste.beforePaste beforeShift+P (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.paste.beforePaste beforeShift+P (editorTextFocus && 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.behavior == 'kakoune' && dance.mode == 'normal') +edit.pasteAll.after.selectPaste all after and selectAlt+P (editorTextFocus && dance.mode == 'normal') edit.pasteAll.beforePaste all before -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.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')Shift+. (editorTextFocus && dance.mode == 'select') +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')Shift+J (editorTextFocus && dance.mode == 'normal')Shift+J (editorTextFocus && dance.mode == 'select') +edit.join.selectJoin lines and select inserted separatorsShift+Alt+J (editorTextFocus && dance.mode == 'normal')Shift+Alt+J (editorTextFocus && dance.mode == 'select') +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.replaceCharactersReplace charactersR (editorTextFocus && dance.mode == 'normal') -historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal')Alt+. (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal')Alt+. (editorTextFocus && dance.mode == 'select') history.repeat.selectionRepeat last selection change -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.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.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.behavior == 'helix' && dance.mode == 'select') -history.undo.selectionsUndo a change of selectionsAlt+U (editorTextFocus && dance.behavior == 'kakoune' && 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') 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')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') +modesmodes.insert.afterInsert afterA (editorTextFocus && dance.mode == 'normal')A (editorTextFocus && dance.mode == 'select') +modes.insert.beforeInsert beforeI (editorTextFocus && dance.mode == 'normal')I (editorTextFocus && dance.mode == 'select') +modes.insert.lineEndInsert at line endShift+A (editorTextFocus && dance.mode == 'normal')Shift+A (editorTextFocus && dance.mode == 'select') +modes.insert.lineStartInsert at line startShift+I (editorTextFocus && dance.mode == 'normal')Shift+I (editorTextFocus && dance.mode == 'select') modes.set.insertSet mode to 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.set.normalSet mode to NormalEscape (editorTextFocus && dance.mode == 'insert')Escape (editorTextFocus && dance.mode == 'select')V (editorTextFocus && dance.mode == 'select') +modes.set.selectSet mode to SelectV (editorTextFocus && dance.mode == 'normal') +modes.set.temporarily.insertTemporary Insert modeCtrl+V (editorTextFocus && dance.mode == 'normal') +modes.set.temporarily.normalTemporary Normal modeCtrl+V (editorTextFocus && 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.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.backwardSearch backwardAlt+/ (editorTextFocus && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.mode == 'normal') +search.backward.extendSearch backward (extend)Shift+Alt+/ (editorTextFocus && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.mode == 'select') +search.extendSearch (extend)Shift+/ (editorTextFocus && dance.mode == 'normal')/ (editorTextFocus && dance.mode == 'select') +search.next.addAdd next matchShift+N (editorTextFocus && dance.mode == 'normal')N (editorTextFocus && dance.mode == 'select') +search.previousSelect previous matchAlt+N (editorTextFocus && dance.mode == 'normal')Shift+N (editorTextFocus && dance.mode == 'normal') +search.previous.addAdd previous matchShift+Alt+N (editorTextFocus && dance.mode == 'normal')Shift+N (editorTextFocus && 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.behavior == 'kakoune' && dance.mode == 'normal') +seekseek.enclosingSelect to next enclosing characterM (editorTextFocus && 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.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.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.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.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.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')Shift+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.includedSelect to character (included)F (editorTextFocus && dance.mode == 'normal') +seek.included.backwardSelect to character (included, backward)Alt+F (editorTextFocus && dance.mode == 'normal')Shift+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.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')Shift+W (editorTextFocus && dance.mode == 'normal') +seek.word.ws.backwardSelect to previous non-whitespace word startAlt+B (editorTextFocus && dance.mode == 'normal')Shift+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.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')Shift+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.syntax.experimentalSelect syntax object seek.wordSelect to next word startW (editorTextFocus && dance.mode == 'normal') -selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.mode == 'normal') select.firstVisibleLineSelect to first visible line select.horizontallySelect horizontally select.lastLineSelect to last line @@ -150,13 +150,13 @@ 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 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.line.below.extendExtend to line belowX (editorTextFocus && dance.mode == 'normal')X (editorTextFocus && dance.mode == 'select') +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.middleVisibleLineSelect to middle visible line 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.extendExtend downShift+J (editorTextFocus && dance.mode == 'normal')Shift+Down (editorTextFocus && dance.mode == 'normal')J (editorTextFocus && dance.mode == 'select')Down (editorTextFocus && 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 @@ -166,66 +166,66 @@ selections are empty 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.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.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.lineEnd.extendExtend to line endShift+Alt+L (editorTextFocus && dance.mode == 'normal')Shift+End (editorTextFocus && dance.mode == 'normal')End (editorTextFocus && dance.mode == 'select') +select.lineStart.extendExtend to line startShift+Alt+H (editorTextFocus && dance.mode == 'normal')Shift+Home (editorTextFocus && dance.mode == 'normal')Home (editorTextFocus && 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.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.behavior == 'kakoune' && dance.mode == 'normal')G (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +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.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.extendExtend upShift+K (editorTextFocus && dance.mode == 'normal')Shift+Up (editorTextFocus && dance.mode == 'normal')K (editorTextFocus && dance.mode == 'select')Up (editorTextFocus && 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')Alt+; (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selectionsselections.changeDirectionChange direction of selectionsAlt+; (editorTextFocus && dance.mode == 'normal')Alt+; (editorTextFocus && dance.mode == 'select') selections.changeOrderReverse selections -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.copyCopy selections belowShift+C (editorTextFocus && dance.mode == 'normal') +selections.expandToLinesExpand to linesX (editorTextFocus && dance.mode == 'normal')Shift+X (editorTextFocus && dance.mode == 'normal')Shift+X (editorTextFocus && dance.mode == 'select') +selections.filterFilter selectionsShift+4 (editorTextFocus && dance.mode == 'normal')Shift+4 (editorTextFocus && dance.mode == 'select') +selections.mergeMerge contiguous selectionsShift+Alt+- (editorTextFocus && dance.mode == 'normal') selections.openOpen selected file -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.pipePipe selectionsShift+Alt+\ (editorTextFocus && dance.mode == 'normal')Shift+Alt+\ (editorTextFocus && dance.mode == 'select') +selections.reduceReduce selections to their cursor; (editorTextFocus && dance.mode == 'normal'); (editorTextFocus && dance.mode == 'select') +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')Y (editorTextFocus && dance.mode == 'select') selections.selectSelect within selections -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.clear.mainClear main selectionsAlt+, (editorTextFocus && dance.mode == 'normal')Alt+, (editorTextFocus && dance.mode == 'select') +selections.clear.secondaryClear secondary selections, (editorTextFocus && dance.mode == 'normal'), (editorTextFocus && dance.mode == 'select') +selections.copy.aboveCopy selections aboveShift+Alt+C (editorTextFocus && 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.faceForwardForward selectionsShift+Alt+; (editorTextFocus && dance.mode == 'normal') +selections.filter.regexpKeep matching selectionsAlt+K (editorTextFocus && dance.mode == 'normal')Alt+K (editorTextFocus && dance.mode == 'select') +selections.filter.regexp.inverseClear matching selectionsShift+Alt+K (editorTextFocus && dance.mode == 'normal')Shift+Alt+K (editorTextFocus && 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.pipe.appendPipe and appendShift+1 (editorTextFocus && dance.mode == 'normal')Shift+1 (editorTextFocus && dance.mode == 'select') +selections.pipe.prependPipe and prependShift+Alt+1 (editorTextFocus && dance.mode == 'normal')Shift+Alt+1 (editorTextFocus && dance.mode == 'select') +selections.pipe.replacePipe and replaceShift+\ (editorTextFocus && dance.mode == 'normal')Shift+\ (editorTextFocus && dance.mode == 'select') +selections.reduce.edgesReduce selections to their endsShift+Alt+S (editorTextFocus && dance.mode == 'normal') +selections.select.orLeapLeap or selectS (editorTextFocus && dance.mode == 'normal')S (editorTextFocus && 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.splitLines.orLeap.backwardLeap or select backwardAlt+S (editorTextFocus && dance.mode == 'normal')Alt+S (editorTextFocus && dance.mode == 'select') selections.sortSort selections -selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal')Shift+S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal')Shift+S (editorTextFocus && dance.mode == 'select') selections.splitLinesSplit selections at line boundaries -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.toggleIndicesToggle selection indicesEnter (editorTextFocus && dance.mode == 'normal') +selections.trimLinesTrim linesAlt+X (editorTextFocus && dance.mode == 'normal')Alt+X (editorTextFocus && dance.mode == 'select') +selections.trimWhitespaceTrim whitespaceShift+- (editorTextFocus && dance.mode == 'normal')Shift+- (editorTextFocus && dance.mode == 'select') +selections.rotateselections.rotate.bothRotate selections clockwiseShift+Alt+0 (editorTextFocus && dance.mode == 'normal') +selections.rotate.contentsRotate selections clockwise (contents only)Shift+Alt+0 (editorTextFocus && dance.mode == 'normal')Shift+Alt+0 (editorTextFocus && 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.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') +selections.rotate.both.reverseRotate selections counter-clockwiseShift+Alt+9 (editorTextFocus && dance.mode == 'normal') +selections.rotate.contents.reverseRotate selections counter-clockwise (contents only)Shift+Alt+9 (editorTextFocus && dance.mode == 'normal')Shift+Alt+9 (editorTextFocus && dance.mode == 'select') +selections.rotate.selections.reverseRotate selections counter-clockwise (selections only)Shift+9 (editorTextFocus && dance.mode == 'normal')Shift+9 (editorTextFocus && dance.mode == 'select') viewview.lineReveals a position based on the main cursor @@ -319,7 +319,8 @@ Join lines. This command: - takes an argument `separator` of type `string`. -Default keybinding: `a-j` (core: normal) +Default keybinding: `a-j` (kakoune: normal) +`s-j` (helix: normal) `s-j` (helix: select) @@ -1013,9 +1014,16 @@ Default keybinding: `n` (core: normal) Update selections based on the text surrounding them. +#### Predefined keybindings + +| Title | Keybinding | Command | +| --------------------------- | ------------------- | ------------------------------------------------------------- | +| Open match menu | `m` (helix: normal) | `[".openMenu", { menu: "match" }]` | +| Open match menu with extend | `m` (helix: select) | `[".openMenu", { menu: "match", pass: [{shift: "extend"}] }]` | + -### [`seek.seek`](./seek.ts#L16-L41) +### [`seek.seek`](./seek.ts#L23-L48) Select to character (excluded). @@ -1041,7 +1049,7 @@ Default keybinding: `t` (core: normal) -### [`seek.enclosing`](./seek.ts#L81-L101) +### [`seek.enclosing`](./seek.ts#L88-L108) Select to next enclosing character. @@ -1062,7 +1070,7 @@ Default keybinding: `m` (kakoune: normal) -### [`seek.word`](./seek.ts#L174-L205) +### [`seek.word`](./seek.ts#L181-L212) Select to next word start. @@ -1094,7 +1102,7 @@ Default keybinding: `w` (core: normal) -### [`seek.object`](./seek.ts#L249-L291) +### [`seek.object`](./seek.ts#L256-L298) Select object. @@ -1134,7 +1142,7 @@ This command: -### [`seek.syntax.experimental`](./seek.ts#L564-L583) +### [`seek.syntax.experimental`](./seek.ts#L571-L590) Select syntax object. @@ -1152,7 +1160,7 @@ This command: -### [`seek.leap`](./seek.ts#L617-L633) +### [`seek.leap`](./seek.ts#L624-L640) Leap forward. diff --git a/src/commands/edit.ts b/src/commands/edit.ts index 24db4a1..db2d4d7 100644 --- a/src/commands/edit.ts +++ b/src/commands/edit.ts @@ -133,7 +133,7 @@ export async function insert( /** * Join lines. * - * @keys `a-j` (core: normal), `s-j` (helix: select) + * @keys `a-j` (kakoune: normal), `s-j` (helix: normal), `s-j` (helix: select) */ export function join(_: Context, separator?: Argument) { return joinLines(Selections.lines(), separator); diff --git a/src/commands/layouts/azerty.fr.md b/src/commands/layouts/azerty.fr.md index 92fc138..d684bd8 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.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.case.swapSwap caseAlt+` (editorTextFocus && dance.mode == 'normal')Shift+` (editorTextFocus && dance.mode == 'normal')Shift+` (editorTextFocus && dance.mode == 'select') +edit.case.toLowerTransform to lower case` (editorTextFocus && dance.mode == 'normal')` (editorTextFocus && dance.mode == 'select') +edit.case.toUpperTransform to upper caseShift+` (editorTextFocus && dance.mode == 'normal')Alt+` (editorTextFocus && dance.mode == 'normal')Alt+` (editorTextFocus && dance.mode == 'select') +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')Shift+, (editorTextFocus && dance.mode == 'select') +edit.deleteDeleteAlt+D (editorTextFocus && dance.mode == 'normal')Alt+D (editorTextFocus && dance.mode == 'select') +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')Shift+O (editorTextFocus && dance.mode == 'select') +edit.newLine.below.insertInsert new line below and switch to insertO (editorTextFocus && dance.mode == 'normal')O (editorTextFocus && dance.mode == 'select') +edit.paste.afterPaste afterP (editorTextFocus && dance.mode == 'select') edit.paste.after.selectPaste after and selectP (editorTextFocus && dance.mode == 'normal') -edit.paste.beforePaste beforeShift+P (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.paste.beforePaste beforeShift+P (editorTextFocus && 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.behavior == 'kakoune' && dance.mode == 'normal') +edit.pasteAll.after.selectPaste all after and selectAlt+P (editorTextFocus && dance.mode == 'normal') edit.pasteAll.beforePaste all before -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.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')Shift+. (editorTextFocus && dance.mode == 'select') +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')Shift+J (editorTextFocus && dance.mode == 'normal')Shift+J (editorTextFocus && dance.mode == 'select') +edit.join.selectJoin lines and select inserted separatorsShift+Alt+J (editorTextFocus && dance.mode == 'normal')Shift+Alt+J (editorTextFocus && dance.mode == 'select') +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.replaceCharactersReplace charactersR (editorTextFocus && dance.mode == 'normal') -historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal')Alt+. (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal')Alt+. (editorTextFocus && dance.mode == 'select') history.repeat.selectionRepeat last selection change -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.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.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.behavior == 'helix' && dance.mode == 'select') -history.undo.selectionsUndo a change of selectionsAlt+U (editorTextFocus && dance.behavior == 'kakoune' && 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') 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')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') +modesmodes.insert.afterInsert afterA (editorTextFocus && dance.mode == 'normal')A (editorTextFocus && dance.mode == 'select') +modes.insert.beforeInsert beforeI (editorTextFocus && dance.mode == 'normal')I (editorTextFocus && dance.mode == 'select') +modes.insert.lineEndInsert at line endShift+A (editorTextFocus && dance.mode == 'normal')Shift+A (editorTextFocus && dance.mode == 'select') +modes.insert.lineStartInsert at line startShift+I (editorTextFocus && dance.mode == 'normal')Shift+I (editorTextFocus && dance.mode == 'select') modes.set.insertSet mode to 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.set.normalSet mode to NormalEscape (editorTextFocus && dance.mode == 'insert')Escape (editorTextFocus && dance.mode == 'select')V (editorTextFocus && dance.mode == 'select') +modes.set.selectSet mode to SelectV (editorTextFocus && dance.mode == 'normal') +modes.set.temporarily.insertTemporary Insert modeCtrl+V (editorTextFocus && dance.mode == 'normal') +modes.set.temporarily.normalTemporary Normal modeCtrl+V (editorTextFocus && 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.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.backwardSearch backwardAlt+/ (editorTextFocus && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.mode == 'normal') +search.backward.extendSearch backward (extend)Shift+Alt+/ (editorTextFocus && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.mode == 'select') +search.extendSearch (extend)Shift+/ (editorTextFocus && dance.mode == 'normal')/ (editorTextFocus && dance.mode == 'select') +search.next.addAdd next matchShift+N (editorTextFocus && dance.mode == 'normal')N (editorTextFocus && dance.mode == 'select') +search.previousSelect previous matchAlt+N (editorTextFocus && dance.mode == 'normal')Shift+N (editorTextFocus && dance.mode == 'normal') +search.previous.addAdd previous matchShift+Alt+N (editorTextFocus && dance.mode == 'normal')Shift+N (editorTextFocus && 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.behavior == 'kakoune' && dance.mode == 'normal') +seekseek.enclosingSelect to next enclosing characterM (editorTextFocus && 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.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.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.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.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.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')Shift+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.includedSelect to character (included)F (editorTextFocus && dance.mode == 'normal') +seek.included.backwardSelect to character (included, backward)Alt+F (editorTextFocus && dance.mode == 'normal')Shift+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.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')Shift+W (editorTextFocus && dance.mode == 'normal') +seek.word.ws.backwardSelect to previous non-whitespace word startAlt+B (editorTextFocus && dance.mode == 'normal')Shift+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.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')Shift+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.syntax.experimentalSelect syntax object seek.wordSelect to next word startW (editorTextFocus && dance.mode == 'normal') -selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.mode == 'normal') select.firstVisibleLineSelect to first visible line select.horizontallySelect horizontally select.lastLineSelect to last line @@ -135,13 +135,13 @@ 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 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.line.below.extendExtend to line belowX (editorTextFocus && dance.mode == 'normal')X (editorTextFocus && dance.mode == 'select') +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.middleVisibleLineSelect to middle visible line 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.extendExtend downShift+J (editorTextFocus && dance.mode == 'normal')Shift+Down (editorTextFocus && dance.mode == 'normal')J (editorTextFocus && dance.mode == 'select')Down (editorTextFocus && 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 @@ -151,66 +151,66 @@ selections are empty 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.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.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.lineEnd.extendExtend to line endShift+Alt+L (editorTextFocus && dance.mode == 'normal')Shift+End (editorTextFocus && dance.mode == 'normal')End (editorTextFocus && dance.mode == 'select') +select.lineStart.extendExtend to line startShift+Alt+H (editorTextFocus && dance.mode == 'normal')Shift+Home (editorTextFocus && dance.mode == 'normal')Home (editorTextFocus && 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.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.behavior == 'kakoune' && dance.mode == 'normal')G (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +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.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.extendExtend upShift+K (editorTextFocus && dance.mode == 'normal')Shift+Up (editorTextFocus && dance.mode == 'normal')K (editorTextFocus && dance.mode == 'select')Up (editorTextFocus && 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')Alt+; (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selectionsselections.changeDirectionChange direction of selectionsAlt+; (editorTextFocus && dance.mode == 'normal')Alt+; (editorTextFocus && dance.mode == 'select') selections.changeOrderReverse selections -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.copyCopy selections belowShift+C (editorTextFocus && dance.mode == 'normal') +selections.expandToLinesExpand to linesX (editorTextFocus && dance.mode == 'normal')Shift+X (editorTextFocus && dance.mode == 'normal')Shift+X (editorTextFocus && dance.mode == 'select') +selections.filterFilter selectionsShift+4 (editorTextFocus && dance.mode == 'normal')Shift+4 (editorTextFocus && dance.mode == 'select') +selections.mergeMerge contiguous selectionsShift+Alt+- (editorTextFocus && dance.mode == 'normal') selections.openOpen selected file -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.pipePipe selectionsShift+Alt+\ (editorTextFocus && dance.mode == 'normal')Shift+Alt+\ (editorTextFocus && dance.mode == 'select') +selections.reduceReduce selections to their cursor; (editorTextFocus && dance.mode == 'normal'); (editorTextFocus && dance.mode == 'select') +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')Y (editorTextFocus && dance.mode == 'select') selections.selectSelect within selections -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.clear.mainClear main selectionsAlt+, (editorTextFocus && dance.mode == 'normal')Alt+, (editorTextFocus && dance.mode == 'select') +selections.clear.secondaryClear secondary selections, (editorTextFocus && dance.mode == 'normal'), (editorTextFocus && dance.mode == 'select') +selections.copy.aboveCopy selections aboveShift+Alt+C (editorTextFocus && 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.faceForwardForward selectionsShift+Alt+; (editorTextFocus && dance.mode == 'normal') +selections.filter.regexpKeep matching selectionsAlt+K (editorTextFocus && dance.mode == 'normal')Alt+K (editorTextFocus && dance.mode == 'select') +selections.filter.regexp.inverseClear matching selectionsShift+Alt+K (editorTextFocus && dance.mode == 'normal')Shift+Alt+K (editorTextFocus && 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.pipe.appendPipe and appendShift+1 (editorTextFocus && dance.mode == 'normal')Shift+1 (editorTextFocus && dance.mode == 'select') +selections.pipe.prependPipe and prependShift+Alt+1 (editorTextFocus && dance.mode == 'normal')Shift+Alt+1 (editorTextFocus && dance.mode == 'select') +selections.pipe.replacePipe and replaceShift+\ (editorTextFocus && dance.mode == 'normal')Shift+\ (editorTextFocus && dance.mode == 'select') +selections.reduce.edgesReduce selections to their endsShift+Alt+S (editorTextFocus && dance.mode == 'normal') +selections.select.orLeapLeap or selectS (editorTextFocus && dance.mode == 'normal')S (editorTextFocus && 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.splitLines.orLeap.backwardLeap or select backwardAlt+S (editorTextFocus && dance.mode == 'normal')Alt+S (editorTextFocus && dance.mode == 'select') selections.sortSort selections -selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal')Shift+S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal')Shift+S (editorTextFocus && dance.mode == 'select') selections.splitLinesSplit selections at line boundaries -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.toggleIndicesToggle selection indicesEnter (editorTextFocus && dance.mode == 'normal') +selections.trimLinesTrim linesAlt+X (editorTextFocus && dance.mode == 'normal')Alt+X (editorTextFocus && dance.mode == 'select') +selections.trimWhitespaceTrim whitespaceShift+- (editorTextFocus && dance.mode == 'normal')Shift+- (editorTextFocus && dance.mode == 'select') +selections.rotateselections.rotate.bothRotate selections clockwiseShift+Alt+0 (editorTextFocus && dance.mode == 'normal') +selections.rotate.contentsRotate selections clockwise (contents only)Shift+Alt+0 (editorTextFocus && dance.mode == 'normal')Shift+Alt+0 (editorTextFocus && 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.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') +selections.rotate.both.reverseRotate selections counter-clockwiseShift+Alt+9 (editorTextFocus && dance.mode == 'normal') +selections.rotate.contents.reverseRotate selections counter-clockwise (contents only)Shift+Alt+9 (editorTextFocus && dance.mode == 'normal')Shift+Alt+9 (editorTextFocus && dance.mode == 'select') +selections.rotate.selections.reverseRotate selections counter-clockwise (selections only)Shift+9 (editorTextFocus && dance.mode == 'normal')Shift+9 (editorTextFocus && dance.mode == 'select') viewview.lineReveals a position based on the main cursor @@ -304,7 +304,8 @@ Join lines. This command: - takes an argument `separator` of type `string`. -Default keybinding: `a-j` (core: normal) +Default keybinding: `a-j` (kakoune: normal) +`s-j` (helix: normal) `s-j` (helix: select) @@ -998,9 +999,16 @@ Default keybinding: `n` (core: normal) Update selections based on the text surrounding them. +#### Predefined keybindings + +| Title | Keybinding | Command | +| --------------------------- | ------------------- | ------------------------------------------------------------- | +| Open match menu | `m` (helix: normal) | `[".openMenu", { menu: "match" }]` | +| Open match menu with extend | `m` (helix: select) | `[".openMenu", { menu: "match", pass: [{shift: "extend"}] }]` | + -### [`seek.seek`](../seek.ts#L16-L41) +### [`seek.seek`](../seek.ts#L23-L48) Select to character (excluded). @@ -1026,7 +1034,7 @@ Default keybinding: `t` (core: normal) -### [`seek.enclosing`](../seek.ts#L81-L101) +### [`seek.enclosing`](../seek.ts#L88-L108) Select to next enclosing character. @@ -1047,7 +1055,7 @@ Default keybinding: `m` (kakoune: normal) -### [`seek.word`](../seek.ts#L174-L205) +### [`seek.word`](../seek.ts#L181-L212) Select to next word start. @@ -1079,7 +1087,7 @@ Default keybinding: `w` (core: normal) -### [`seek.object`](../seek.ts#L249-L291) +### [`seek.object`](../seek.ts#L256-L298) Select object. @@ -1119,7 +1127,7 @@ This command: -### [`seek.syntax.experimental`](../seek.ts#L564-L583) +### [`seek.syntax.experimental`](../seek.ts#L571-L590) Select syntax object. @@ -1137,7 +1145,7 @@ This command: -### [`seek.leap`](../seek.ts#L617-L633) +### [`seek.leap`](../seek.ts#L624-L640) Leap forward. diff --git a/src/commands/layouts/qwerty.md b/src/commands/layouts/qwerty.md index 563a19d..5d8bd26 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.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.case.swapSwap caseAlt+` (editorTextFocus && dance.mode == 'normal')Shift+` (editorTextFocus && dance.mode == 'normal')Shift+` (editorTextFocus && dance.mode == 'select') +edit.case.toLowerTransform to lower case` (editorTextFocus && dance.mode == 'normal')` (editorTextFocus && dance.mode == 'select') +edit.case.toUpperTransform to upper caseShift+` (editorTextFocus && dance.mode == 'normal')Alt+` (editorTextFocus && dance.mode == 'normal')Alt+` (editorTextFocus && dance.mode == 'select') +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')Shift+, (editorTextFocus && dance.mode == 'select') +edit.deleteDeleteAlt+D (editorTextFocus && dance.mode == 'normal')Alt+D (editorTextFocus && dance.mode == 'select') +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')Shift+O (editorTextFocus && dance.mode == 'select') +edit.newLine.below.insertInsert new line below and switch to insertO (editorTextFocus && dance.mode == 'normal')O (editorTextFocus && dance.mode == 'select') +edit.paste.afterPaste afterP (editorTextFocus && dance.mode == 'select') edit.paste.after.selectPaste after and selectP (editorTextFocus && dance.mode == 'normal') -edit.paste.beforePaste beforeShift+P (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +edit.paste.beforePaste beforeShift+P (editorTextFocus && 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.behavior == 'kakoune' && dance.mode == 'normal') +edit.pasteAll.after.selectPaste all after and selectAlt+P (editorTextFocus && dance.mode == 'normal') edit.pasteAll.beforePaste all before -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.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')Shift+. (editorTextFocus && dance.mode == 'select') +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')Shift+J (editorTextFocus && dance.mode == 'normal')Shift+J (editorTextFocus && dance.mode == 'select') +edit.join.selectJoin lines and select inserted separatorsShift+Alt+J (editorTextFocus && dance.mode == 'normal')Shift+Alt+J (editorTextFocus && dance.mode == 'select') +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.replaceCharactersReplace charactersR (editorTextFocus && dance.mode == 'normal') -historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal')Alt+. (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +historyhistory.repeat.seekRepeat last seekAlt+. (editorTextFocus && dance.mode == 'normal')Alt+. (editorTextFocus && dance.mode == 'select') history.repeat.selectionRepeat last selection change -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.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.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.behavior == 'helix' && dance.mode == 'select') -history.undo.selectionsUndo a change of selectionsAlt+U (editorTextFocus && dance.behavior == 'kakoune' && 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') 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')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') +modesmodes.insert.afterInsert afterA (editorTextFocus && dance.mode == 'normal')A (editorTextFocus && dance.mode == 'select') +modes.insert.beforeInsert beforeI (editorTextFocus && dance.mode == 'normal')I (editorTextFocus && dance.mode == 'select') +modes.insert.lineEndInsert at line endShift+A (editorTextFocus && dance.mode == 'normal')Shift+A (editorTextFocus && dance.mode == 'select') +modes.insert.lineStartInsert at line startShift+I (editorTextFocus && dance.mode == 'normal')Shift+I (editorTextFocus && dance.mode == 'select') modes.set.insertSet mode to 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.set.normalSet mode to NormalEscape (editorTextFocus && dance.mode == 'insert')Escape (editorTextFocus && dance.mode == 'select')V (editorTextFocus && dance.mode == 'select') +modes.set.selectSet mode to SelectV (editorTextFocus && dance.mode == 'normal') +modes.set.temporarily.insertTemporary Insert modeCtrl+V (editorTextFocus && dance.mode == 'normal') +modes.set.temporarily.normalTemporary Normal modeCtrl+V (editorTextFocus && 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.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.backwardSearch backwardAlt+/ (editorTextFocus && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.mode == 'normal') +search.backward.extendSearch backward (extend)Shift+Alt+/ (editorTextFocus && dance.mode == 'normal')Shift+/ (editorTextFocus && dance.mode == 'select') +search.extendSearch (extend)Shift+/ (editorTextFocus && dance.mode == 'normal')/ (editorTextFocus && dance.mode == 'select') +search.next.addAdd next matchShift+N (editorTextFocus && dance.mode == 'normal')N (editorTextFocus && dance.mode == 'select') +search.previousSelect previous matchAlt+N (editorTextFocus && dance.mode == 'normal')Shift+N (editorTextFocus && dance.mode == 'normal') +search.previous.addAdd previous matchShift+Alt+N (editorTextFocus && dance.mode == 'normal')Shift+N (editorTextFocus && 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.behavior == 'kakoune' && dance.mode == 'normal') +seekseek.enclosingSelect to next enclosing characterM (editorTextFocus && 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.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.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.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.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.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')Shift+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.includedSelect to character (included)F (editorTextFocus && dance.mode == 'normal') +seek.included.backwardSelect to character (included, backward)Alt+F (editorTextFocus && dance.mode == 'normal')Shift+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.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')Shift+W (editorTextFocus && dance.mode == 'normal') +seek.word.ws.backwardSelect to previous non-whitespace word startAlt+B (editorTextFocus && dance.mode == 'normal')Shift+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.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')Shift+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.syntax.experimentalSelect syntax object seek.wordSelect to next word startW (editorTextFocus && dance.mode == 'normal') -selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.behavior == 'kakoune' && dance.mode == 'normal') +selectselect.bufferSelect whole bufferShift+5 (editorTextFocus && dance.mode == 'normal') select.firstVisibleLineSelect to first visible line select.horizontallySelect horizontally select.lastLineSelect to last line @@ -135,13 +135,13 @@ 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 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.line.below.extendExtend to line belowX (editorTextFocus && dance.mode == 'normal')X (editorTextFocus && dance.mode == 'select') +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.middleVisibleLineSelect to middle visible line 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.extendExtend downShift+J (editorTextFocus && dance.mode == 'normal')Shift+Down (editorTextFocus && dance.mode == 'normal')J (editorTextFocus && dance.mode == 'select')Down (editorTextFocus && 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 @@ -151,66 +151,66 @@ selections are empty 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.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.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.lineEnd.extendExtend to line endShift+Alt+L (editorTextFocus && dance.mode == 'normal')Shift+End (editorTextFocus && dance.mode == 'normal')End (editorTextFocus && dance.mode == 'select') +select.lineStart.extendExtend to line startShift+Alt+H (editorTextFocus && dance.mode == 'normal')Shift+Home (editorTextFocus && dance.mode == 'normal')Home (editorTextFocus && 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.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.behavior == 'kakoune' && dance.mode == 'normal')G (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +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.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.extendExtend upShift+K (editorTextFocus && dance.mode == 'normal')Shift+Up (editorTextFocus && dance.mode == 'normal')K (editorTextFocus && dance.mode == 'select')Up (editorTextFocus && 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')Alt+; (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selectionsselections.changeDirectionChange direction of selectionsAlt+; (editorTextFocus && dance.mode == 'normal')Alt+; (editorTextFocus && dance.mode == 'select') selections.changeOrderReverse selections -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.copyCopy selections belowShift+C (editorTextFocus && dance.mode == 'normal') +selections.expandToLinesExpand to linesX (editorTextFocus && dance.mode == 'normal')Shift+X (editorTextFocus && dance.mode == 'normal')Shift+X (editorTextFocus && dance.mode == 'select') +selections.filterFilter selectionsShift+4 (editorTextFocus && dance.mode == 'normal')Shift+4 (editorTextFocus && dance.mode == 'select') +selections.mergeMerge contiguous selectionsShift+Alt+- (editorTextFocus && dance.mode == 'normal') selections.openOpen selected file -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.pipePipe selectionsShift+Alt+\ (editorTextFocus && dance.mode == 'normal')Shift+Alt+\ (editorTextFocus && dance.mode == 'select') +selections.reduceReduce selections to their cursor; (editorTextFocus && dance.mode == 'normal'); (editorTextFocus && dance.mode == 'select') +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')Y (editorTextFocus && dance.mode == 'select') selections.selectSelect within selections -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.clear.mainClear main selectionsAlt+, (editorTextFocus && dance.mode == 'normal')Alt+, (editorTextFocus && dance.mode == 'select') +selections.clear.secondaryClear secondary selections, (editorTextFocus && dance.mode == 'normal'), (editorTextFocus && dance.mode == 'select') +selections.copy.aboveCopy selections aboveShift+Alt+C (editorTextFocus && 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.faceForwardForward selectionsShift+Alt+; (editorTextFocus && dance.mode == 'normal') +selections.filter.regexpKeep matching selectionsAlt+K (editorTextFocus && dance.mode == 'normal')Alt+K (editorTextFocus && dance.mode == 'select') +selections.filter.regexp.inverseClear matching selectionsShift+Alt+K (editorTextFocus && dance.mode == 'normal')Shift+Alt+K (editorTextFocus && 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.pipe.appendPipe and appendShift+1 (editorTextFocus && dance.mode == 'normal')Shift+1 (editorTextFocus && dance.mode == 'select') +selections.pipe.prependPipe and prependShift+Alt+1 (editorTextFocus && dance.mode == 'normal')Shift+Alt+1 (editorTextFocus && dance.mode == 'select') +selections.pipe.replacePipe and replaceShift+\ (editorTextFocus && dance.mode == 'normal')Shift+\ (editorTextFocus && dance.mode == 'select') +selections.reduce.edgesReduce selections to their endsShift+Alt+S (editorTextFocus && dance.mode == 'normal') +selections.select.orLeapLeap or selectS (editorTextFocus && dance.mode == 'normal')S (editorTextFocus && 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.splitLines.orLeap.backwardLeap or select backwardAlt+S (editorTextFocus && dance.mode == 'normal')Alt+S (editorTextFocus && dance.mode == 'select') selections.sortSort selections -selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal')Shift+S (editorTextFocus && dance.behavior == 'helix' && dance.mode == 'select') +selections.splitSplit selectionsShift+S (editorTextFocus && dance.mode == 'normal')Shift+S (editorTextFocus && dance.mode == 'select') selections.splitLinesSplit selections at line boundaries -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.toggleIndicesToggle selection indicesEnter (editorTextFocus && dance.mode == 'normal') +selections.trimLinesTrim linesAlt+X (editorTextFocus && dance.mode == 'normal')Alt+X (editorTextFocus && dance.mode == 'select') +selections.trimWhitespaceTrim whitespaceShift+- (editorTextFocus && dance.mode == 'normal')Shift+- (editorTextFocus && dance.mode == 'select') +selections.rotateselections.rotate.bothRotate selections clockwiseShift+Alt+0 (editorTextFocus && dance.mode == 'normal') +selections.rotate.contentsRotate selections clockwise (contents only)Shift+Alt+0 (editorTextFocus && dance.mode == 'normal')Shift+Alt+0 (editorTextFocus && 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.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') +selections.rotate.both.reverseRotate selections counter-clockwiseShift+Alt+9 (editorTextFocus && dance.mode == 'normal') +selections.rotate.contents.reverseRotate selections counter-clockwise (contents only)Shift+Alt+9 (editorTextFocus && dance.mode == 'normal')Shift+Alt+9 (editorTextFocus && dance.mode == 'select') +selections.rotate.selections.reverseRotate selections counter-clockwise (selections only)Shift+9 (editorTextFocus && dance.mode == 'normal')Shift+9 (editorTextFocus && dance.mode == 'select') viewview.lineReveals a position based on the main cursor @@ -304,7 +304,8 @@ Join lines. This command: - takes an argument `separator` of type `string`. -Default keybinding: `a-j` (core: normal) +Default keybinding: `a-j` (kakoune: normal) +`s-j` (helix: normal) `s-j` (helix: select) @@ -998,9 +999,16 @@ Default keybinding: `n` (core: normal) Update selections based on the text surrounding them. +#### Predefined keybindings + +| Title | Keybinding | Command | +| --------------------------- | ------------------- | ------------------------------------------------------------- | +| Open match menu | `m` (helix: normal) | `[".openMenu", { menu: "match" }]` | +| Open match menu with extend | `m` (helix: select) | `[".openMenu", { menu: "match", pass: [{shift: "extend"}] }]` | + -### [`seek.seek`](../seek.ts#L16-L41) +### [`seek.seek`](../seek.ts#L23-L48) Select to character (excluded). @@ -1026,7 +1034,7 @@ Default keybinding: `t` (core: normal) -### [`seek.enclosing`](../seek.ts#L81-L101) +### [`seek.enclosing`](../seek.ts#L88-L108) Select to next enclosing character. @@ -1047,7 +1055,7 @@ Default keybinding: `m` (kakoune: normal) -### [`seek.word`](../seek.ts#L174-L205) +### [`seek.word`](../seek.ts#L181-L212) Select to next word start. @@ -1079,7 +1087,7 @@ Default keybinding: `w` (core: normal) -### [`seek.object`](../seek.ts#L249-L291) +### [`seek.object`](../seek.ts#L256-L298) Select object. @@ -1119,7 +1127,7 @@ This command: -### [`seek.syntax.experimental`](../seek.ts#L564-L583) +### [`seek.syntax.experimental`](../seek.ts#L571-L590) Select syntax object. @@ -1137,7 +1145,7 @@ This command: -### [`seek.leap`](../seek.ts#L617-L633) +### [`seek.leap`](../seek.ts#L624-L640) Leap forward. diff --git a/src/commands/seek.ts b/src/commands/seek.ts index 9c99dd6..da5bb9e 100644 --- a/src/commands/seek.ts +++ b/src/commands/seek.ts @@ -10,6 +10,13 @@ import { SyntaxNode, Tree, TreeSitter } from "../utils/tree-sitter"; /** * Update selections based on the text surrounding them. + * + * #### Predefined keybindings + * + * | Title | Keybinding | Command | + * | --------------------------- | ------------------- | ------------------------------------------------------------- | + * | Open match menu | `m` (helix: normal) | `[".openMenu", { menu: "match" }]` | + * | Open match menu with extend | `m` (helix: select) | `[".openMenu", { menu: "match", pass: [{shift: "extend"}] }]` | */ declare module "./seek"; diff --git a/src/state/extension.ts b/src/state/extension.ts index 821c374..6085d26 100644 --- a/src/state/extension.ts +++ b/src/state/extension.ts @@ -35,11 +35,6 @@ export class Extension implements vscode.Disposable { return this._gotoMenus as ReadonlyMap; } - private _behavior = ""; - public get behavior() { - return this._behavior; - } - // State. // ========================================================================== @@ -173,15 +168,6 @@ 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) => {