feature: client: user-menu: navigate: add support of \D + [JK] to speed up vim navigation

This commit is contained in:
coderaiser 2023-01-19 22:48:46 +02:00
parent 40f17bb670
commit 5b5889dcf7
2 changed files with 105 additions and 26 deletions

View file

@ -1,5 +1,7 @@
'use strict';
const fullstore = require('fullstore');
const {
J,
K,
@ -7,29 +9,50 @@ const {
DOWN,
} = require('../../key/key.js');
module.exports = (el, {keyCode}) => {
if (keyCode === DOWN || keyCode === J)
return down(el);
if (keyCode === UP || keyCode === K)
return up(el);
const store = fullstore(1);
const isDigit = (a) => /^\d+$/.test(a);
module.exports = (el, {key, keyCode}) => {
if (isDigit(key)) {
store(Number(key));
}
if (keyCode === DOWN || keyCode === J) {
const count = store();
store(1);
return down(el, count);
}
if (keyCode === UP || keyCode === K) {
const count = store();
store(1);
return up(el, count);
}
};
function down(el) {
function down(el, count) {
const {length} = el;
if (el.selectedIndex === length - 1)
el.selectedIndex = 0;
else
++el.selectedIndex;
el.selectedIndex += count;
if (el.selectedIndex < 0)
el.selectedIndex = length - 1;
}
function up(el) {
function up(el, count) {
const {length} = el;
if (!el.selectedIndex)
el.selectedIndex = length - 1;
else
--el.selectedIndex;
el.selectedIndex -= count;
if (el.selectedIndex < 0)
el.selectedIndex = 0;
}

View file

@ -15,11 +15,11 @@ test('cloudcmd: user-menu: navigate: DOWN', (t) => {
length: 3,
selectedIndex: 0,
};
navigate(el, {
keyCode: DOWN,
});
t.equal(el.selectedIndex, 1);
t.end();
});
@ -29,11 +29,11 @@ test('cloudcmd: user-menu: navigate: J', (t) => {
length: 3,
selectedIndex: 0,
};
navigate(el, {
keyCode: J,
});
t.equal(el.selectedIndex, 1);
t.end();
});
@ -43,11 +43,11 @@ test('cloudcmd: user-menu: navigate: DOWN: bottom', (t) => {
length: 3,
selectedIndex: 2,
};
navigate(el, {
keyCode: DOWN,
});
t.equal(el.selectedIndex, 0);
t.end();
});
@ -57,11 +57,11 @@ test('cloudcmd: user-menu: navigate: K', (t) => {
length: 3,
selectedIndex: 2,
};
navigate(el, {
keyCode: K,
});
t.equal(el.selectedIndex, 1);
t.end();
});
@ -71,11 +71,11 @@ test('cloudcmd: user-menu: navigate: UP', (t) => {
length: 3,
selectedIndex: 2,
};
navigate(el, {
keyCode: UP,
});
t.equal(el.selectedIndex, 1);
t.end();
});
@ -85,11 +85,11 @@ test('cloudcmd: user-menu: navigate: UP: top', (t) => {
length: 3,
selectedIndex: 0,
};
navigate(el, {
keyCode: UP,
});
t.equal(el.selectedIndex, 2);
t.end();
});
@ -99,12 +99,68 @@ test('cloudcmd: user-menu: navigate', (t) => {
length: 3,
selectedIndex: 0,
};
navigate(el, {
keyCode: 0,
});
t.equal(el.selectedIndex, 0, 'should not change');
t.end();
});
test('cloudcmd: user-menu: navigate: DOWN: count', (t) => {
const el = {
length: 3,
selectedIndex: 0,
};
navigate(el, {
keyCode: 53,
key: '5',
});
navigate(el, {
keyCode: DOWN,
});
t.equal(el.selectedIndex, 5);
t.end();
});
test('cloudcmd: user-menu: navigate: J: count: to big', (t) => {
const el = {
length: 3,
selectedIndex: -Infinity,
};
navigate(el, {
keyCode: 53,
key: '5',
});
navigate(el, {
keyCode: J,
});
t.equal(el.selectedIndex, 2);
t.end();
});
test('cloudcmd: user-menu: navigate: K: count: to small', (t) => {
const el = {
length: 3,
selectedIndex: -Infinity,
};
navigate(el, {
keyCode: 53,
key: '5',
});
navigate(el, {
keyCode: K,
});
t.equal(el.selectedIndex, 0);
t.end();
});