aleman 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ChangeLog CHANGED
@@ -1,3 +1,13 @@
1
+ 2025.09.13, v1.7.0
2
+
3
+ feature:
4
+ - 176eb02 aleman: menu: Number + j, Number + k
5
+
6
+ 2025.09.12, v1.6.2
7
+
8
+ fix:
9
+ - acc7a86 aleman: menu: vim: gg: showSubmenu
10
+
1
11
  2025.09.12, v1.6.1
2
12
 
3
13
  fix:
@@ -1,9 +1,6 @@
1
1
  import {getSubmenu} from './submenu/index.js';
2
2
 
3
- export const keys = [
4
- 'ArrowDown',
5
- 'j',
6
- ];
3
+ export const keys = ['ArrowDown'];
7
4
  export const preventDefault = true;
8
5
 
9
6
  export const filter = ({state}) => state.command === 'show';
@@ -14,18 +14,18 @@ export const listener = ({state, options}) => {
14
14
 
15
15
  const menuValues = Object.values(menu);
16
16
 
17
- if (insideSubmenu && submenuIndex > 0)
18
- submenuIndex = 0;
19
-
20
- if (!insideSubmenu)
21
- index = menuValues.length - 1;
22
-
23
17
  const submenu = getSubmenu({
24
18
  index,
25
19
  options,
26
20
  });
27
21
 
28
22
  const submenuCount = Object.keys(submenu).length;
23
+
24
+ if (insideSubmenu)
25
+ submenuIndex = submenuCount - 1;
26
+ else
27
+ index = menuValues.length - 1;
28
+
29
29
  const showSubmenu = submenuCount > 0;
30
30
 
31
31
  return {
package/menu/addons/up.js CHANGED
@@ -1,9 +1,6 @@
1
1
  import {getSubmenu} from './submenu/index.js';
2
2
 
3
- export const keys = [
4
- 'ArrowUp',
5
- 'k',
6
- ];
3
+ export const keys = ['ArrowUp'];
7
4
 
8
5
  export const preventDefault = true;
9
6
 
@@ -1,4 +1,8 @@
1
1
  import * as up from './up.js';
2
+ import * as down from './down.js';
3
+ import {getSubmenu} from './submenu/index.js';
4
+
5
+ const isNumber = (a) => !Number.isNaN(a) && typeof a === 'number';
2
6
 
3
7
  export const createVim = () => {
4
8
  const buffer = [];
@@ -16,19 +20,102 @@ const filter = ({state}) => state.command === 'show';
16
20
 
17
21
  const createListener = (buffer) => ({event, state, options}) => {
18
22
  const {key} = event;
23
+ const {index} = state;
24
+
25
+ const menuCount = Object.keys(options.menu).length;
26
+ const submenuCount = Object.keys(getSubmenu({
27
+ index,
28
+ options,
29
+ })).length;
19
30
 
20
31
  if (!buffer.length && key === 'g') {
21
32
  buffer.push('g');
22
33
  return null;
23
34
  }
24
35
 
25
- if (buffer[0] === 'g' && key === 'g') {
36
+ if (!buffer.length && /\d/.test(key)) {
37
+ buffer.push(Number(key));
38
+ return null;
39
+ }
40
+
41
+ if (!buffer.length && key === 'j')
42
+ buffer.push(1);
43
+
44
+ if (!buffer.length && key === 'k')
45
+ buffer.push(1);
46
+
47
+ const [first] = buffer;
48
+
49
+ if (isNumber(first) && key === 'j') {
50
+ buffer = [];
51
+ const {insideSubmenu, submenuIndex} = state;
52
+
53
+ let newIndex = insideSubmenu ? index : index + first - 1;
54
+ let newSubmenuIndex = insideSubmenu ? submenuIndex + first : submenuIndex;
55
+
56
+ if (newIndex > menuCount - 1)
57
+ newIndex = menuCount - 1;
58
+
59
+ if (newSubmenuIndex > submenuCount - 1)
60
+ newSubmenuIndex = submenuCount - 1;
61
+
62
+ const newState = {
63
+ ...state,
64
+ index: newIndex,
65
+ submenuIndex: newSubmenuIndex,
66
+ };
67
+
68
+ return down.listener({
69
+ state: newState,
70
+ options,
71
+ });
72
+ }
73
+
74
+ if (isNumber(first) && key === 'k') {
75
+ buffer = [];
76
+ const {
77
+ insideSubmenu,
78
+ index,
79
+ submenuIndex,
80
+ } = state;
81
+
82
+ let newIndex = insideSubmenu ? index : index - first - 1;
83
+ let newSubmenuIndex = insideSubmenu ? submenuIndex - first - 1 : submenuIndex;
84
+
85
+ if (newIndex < -1)
86
+ newIndex = -1;
87
+
88
+ if (newSubmenuIndex < -1)
89
+ newSubmenuIndex = -1;
90
+
91
+ const newState = {
92
+ ...state,
93
+ index: newIndex,
94
+ submenuIndex: newSubmenuIndex,
95
+ };
96
+
97
+ return down.listener({
98
+ state: newState,
99
+ options,
100
+ });
101
+ }
102
+
103
+ if (first === 'g' && key === 'g') {
26
104
  buffer = [];
105
+ const {
106
+ insideSubmenu,
107
+ index,
108
+ submenuIndex,
109
+ } = state;
110
+
111
+ const newState = {
112
+ ...state,
113
+ index: insideSubmenu ? index : 1,
114
+ submenuIndex: insideSubmenu ? 1 : submenuIndex,
115
+ };
116
+
27
117
  return up.listener({
28
- state: {
29
- ...state,
30
- index: 1,
31
- },
118
+ state: newState,
32
119
  options,
33
120
  });
34
121
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aleman",
3
- "version": "1.6.1",
3
+ "version": "1.7.0",
4
4
  "type": "module",
5
5
  "author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
6
6
  "description": "🐊Putout-based framework for web",