summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sotoudeh <masotoudeh@ucdavis.edu>2021-09-05 20:58:16 -0700
committerGitHub <noreply@github.com>2021-09-05 20:58:16 -0700
commit1fb9bb4de0bd38bd6a3870fa102b8f2da3c995bd (patch)
tree9afe1a805ff21174c8849f335ac2388adcd13248
parent0f965d0a7f53908eb55cf33cde0a8aef585b6c31 (diff)
parent2fd506c131fc62171a144ead94785f2a36e42e93 (diff)
Merge pull request #11 from r2dev2/masterHEADmaster
Add A,I,$,0,o,O bindings. All thanks to @r2dev2 !
-rw-r--r--docs-vim.js89
1 files changed, 40 insertions, 49 deletions
diff --git a/docs-vim.js b/docs-vim.js
index 26bf0fd..a09282b 100644
--- a/docs-vim.js
+++ b/docs-vim.js
@@ -1,19 +1,34 @@
+const useQWERTY = false;
+const directionalKeys = useQWERTY ? "hjkl" : "dhtn";
+
vim = {
"mode": "insert", // Keep track of current mode
"num": "", // Keep track of number keys pressed by the user
"currentSequence": "", // Keep track of key sequences
- "keys": {
- "move": "dhtn", // QWERTY: hjkl
- "escapeSequence": "hn", // QWERTY: jk or jl
- },
- "multiMaps" : {
+ "escapeSequence": useQWERTY ? "jk" : "hn",
+ "keyMaps" : {
+ "Backspace": [["ArrowLeft"]],
+ "x": [["Delete"]],
"b": [["ArrowLeft", true]], // ctrl + <-
"e": [["ArrowRight", true]], // ctrl + ->
// w is same behavior as eeb
- "w": [["ArrowRight", true], ["ArrowRight", true], ["ArrowLeft", true]]
- }
+ "w": [["ArrowRight", true], ["ArrowRight", true], ["ArrowLeft", true]],
+ "a": [["ArrowRight"]],
+ "A": [["ArrowDown", true]],
+ "I": [["ArrowUp", true]],
+ "$": [["ArrowDown", true]],
+ "0": [["ArrowUp", true]],
+ "o": [["ArrowDown", true], ["Enter"]],
+ "O": [["ArrowUp", true], ["ArrowLeft"], ["Enter"]]
+ },
+ "needsInsert": ["a", "A", "I", "o", "O"]
};
+vim.keyMaps[directionalKeys[0]] = [["ArrowLeft"]];
+vim.keyMaps[directionalKeys[1]] = [["ArrowDown"]];
+vim.keyMaps[directionalKeys[2]] = [["ArrowUp"]];
+vim.keyMaps[directionalKeys[3]] = [["ArrowRight"]];
+
vim.addKeyMappings = function (baseMap) {
baseMap[vim.keys.move[0]] = "ArrowLeft";
baseMap[vim.keys.move[1]] = "ArrowDown";
@@ -52,11 +67,6 @@ vim.normal_keydown = function (e) {
e.preventDefault();
e.stopPropagation();
- if (e.key == "a") {
- docs.pressKey(docs.codeFromKey("ArrowRight"));
- e.key = "i";
- }
-
if (e.key == "i") {
vim.switchToInsertMode();
return true;
@@ -67,18 +77,11 @@ vim.normal_keydown = function (e) {
return true;
}
- var keyMap = { "Backspace": "ArrowLeft", "x": "Delete" };
- vim.addKeyMappings(keyMap);
-
if (e.key.match(/\d+/)) {
vim.num += e.key.toString();
}
- if (e.key in keyMap) {
- e.key = keyMap[e.key];
- }
-
- vim.multiMaps[e.key]?.forEach(([key, ...args]) => {
+ vim.keyMaps[e.key]?.forEach(([key, ...args]) => {
const numRepeats = parseInt(vim.num) || 1;
for (let i = 0; i < numRepeats; i++) {
docs.pressKey(docs.codeFromKey(key), ...args);
@@ -86,14 +89,9 @@ vim.normal_keydown = function (e) {
vim.num = "";
});
- if (e.key.indexOf("Arrow") == 0 || e.key == "Delete") {
- if (vim.num.length == 0 || isNaN(vim.num)) {
- vim.num = "1";
- }
- for (var i = 0; i < Number(vim.num); i++) {
- docs.pressKey(docs.codeFromKey(e.key));
- }
- vim.num = "";
+ if (vim.needsInsert.includes(e.key)) {
+ vim.switchToInsertMode();
+ return true;
}
return false;
@@ -112,46 +110,39 @@ vim.visual_keydown = function (e) {
}
vim.currentSequence += e.key;
- if (vim.currentSequence == vim.keys.escapeSequence) {
+ if (vim.currentSequence == vim.escapeSequence) {
e.preventDefault();
e.stopPropagation();
vim.switchToNormalMode();
return false;
}
- if (vim.keys.escapeSequence.indexOf(vim.currentSequence) != 0) {
+ if (vim.escapeSequence.indexOf(vim.currentSequence) != 0) {
vim.currentSequence = e.key;
}
e.preventDefault();
e.stopPropagation();
- var keyMap = { "Backspace": "ArrowLeft", "x": "Delete" };
- vim.addKeyMappings(keyMap);
-
if (e.key.match(/\d+/)) {
vim.num += e.key.toString();
}
- if (e.key in keyMap) {
- e.key = keyMap[e.key];
- }
-
- if (e.key.indexOf("Arrow") == 0 || e.key == "Delete") {
- if (vim.num.length == 0 || isNaN(vim.num)) {
- vim.num = "1";
- }
- for (var i = 0; i < Number(vim.num); i++) {
- if (e.key.indexOf("Arrow") == 0) {
- docs.pressKey(docs.codeFromKey(e.key), false, true);
+ vim.keyMaps[e.key]?.forEach(([key, ...args]) => {
+ const numRepeats = parseInt(vim.num) || 1;
+ for (let i = 0; i < numRepeats; i++) {
+ if (key.indexOf("Arrow") == 0) {
+ // get the special keys pressed and default to false
+ const keyArgs = [...args, false, false].slice(0, 2);
+ keyArgs[1] = true;
+ docs.pressKey(docs.codeFromKey(key), ...keyArgs);
} else {
- docs.pressKey(docs.codeFromKey(e.key));
- // Switch to normal mode when 'x' pressed
+ docs.pressKey(docs.codeFromKey(key), ...args);
vim.switchToNormalMode();
}
}
vim.num = "";
- }
+ });
return false;
};
@@ -163,7 +154,7 @@ vim.insert_keydown = function (e) {
}
vim.currentSequence += e.key;
- if (vim.currentSequence == vim.keys.escapeSequence) {
+ if (vim.currentSequence == vim.escapeSequence) {
e.preventDefault();
e.stopPropagation();
@@ -176,7 +167,7 @@ vim.insert_keydown = function (e) {
vim.switchToNormalMode();
return false;
}
- if (vim.keys.escapeSequence.indexOf(vim.currentSequence) != 0) {
+ if (vim.escapeSequence.indexOf(vim.currentSequence) != 0) {
vim.currentSequence = e.key;
}
};
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback