geeto 0.6.5 → 0.9.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/README.md +23 -9
- package/lib/api/copilot-adapter.d.ts +14 -5
- package/lib/api/copilot-adapter.d.ts.map +1 -1
- package/lib/api/copilot-adapter.js +15 -21
- package/lib/api/copilot-adapter.js.map +1 -1
- package/lib/api/copilot-sdk.d.ts +3 -16
- package/lib/api/copilot-sdk.d.ts.map +1 -1
- package/lib/api/copilot-sdk.js +166 -441
- package/lib/api/copilot-sdk.js.map +1 -1
- package/lib/api/copilot.d.ts +3 -4
- package/lib/api/copilot.d.ts.map +1 -1
- package/lib/api/copilot.js +34 -31
- package/lib/api/copilot.js.map +1 -1
- package/lib/api/gemini-sdk.d.ts.map +1 -1
- package/lib/api/gemini-sdk.js +11 -77
- package/lib/api/gemini-sdk.js.map +1 -1
- package/lib/api/gemini.d.ts +2 -2
- package/lib/api/gemini.d.ts.map +1 -1
- package/lib/api/gemini.js +30 -22
- package/lib/api/gemini.js.map +1 -1
- package/lib/api/github.d.ts.map +1 -1
- package/lib/api/github.js +12 -6
- package/lib/api/github.js.map +1 -1
- package/lib/api/gitlab.d.ts +80 -0
- package/lib/api/gitlab.d.ts.map +1 -0
- package/lib/api/gitlab.js +192 -0
- package/lib/api/gitlab.js.map +1 -0
- package/lib/api/openrouter-sdk.d.ts +7 -7
- package/lib/api/openrouter-sdk.d.ts.map +1 -1
- package/lib/api/openrouter-sdk.js +17 -79
- package/lib/api/openrouter-sdk.js.map +1 -1
- package/lib/api/openrouter.d.ts.map +1 -1
- package/lib/api/openrouter.js +10 -20
- package/lib/api/openrouter.js.map +1 -1
- package/lib/api/platform.d.ts +78 -0
- package/lib/api/platform.d.ts.map +1 -0
- package/lib/api/platform.js +218 -0
- package/lib/api/platform.js.map +1 -0
- package/lib/api/trello.d.ts.map +1 -1
- package/lib/api/trello.js +8 -4
- package/lib/api/trello.js.map +1 -1
- package/lib/cli/input.d.ts +12 -3
- package/lib/cli/input.d.ts.map +1 -1
- package/lib/cli/input.js +123 -9
- package/lib/cli/input.js.map +1 -1
- package/lib/cli/menu.d.ts +1 -1
- package/lib/cli/menu.d.ts.map +1 -1
- package/lib/cli/menu.js +153 -96
- package/lib/cli/menu.js.map +1 -1
- package/lib/core/copilot-setup.d.ts +8 -7
- package/lib/core/copilot-setup.d.ts.map +1 -1
- package/lib/core/copilot-setup.js +60 -232
- package/lib/core/copilot-setup.js.map +1 -1
- package/lib/core/gemini-setup.js +7 -7
- package/lib/core/gemini-setup.js.map +1 -1
- package/lib/core/gitlab-setup.d.ts +5 -0
- package/lib/core/gitlab-setup.d.ts.map +1 -0
- package/lib/core/gitlab-setup.js +85 -0
- package/lib/core/gitlab-setup.js.map +1 -0
- package/lib/core/openrouter-setup.d.ts.map +1 -1
- package/lib/core/openrouter-setup.js +17 -0
- package/lib/core/openrouter-setup.js.map +1 -1
- package/lib/index.js +501 -704
- package/lib/index.js.map +1 -1
- package/lib/types/index.d.ts +11 -5
- package/lib/types/index.d.ts.map +1 -1
- package/lib/utils/ai-provider-helpers.d.ts +5 -0
- package/lib/utils/ai-provider-helpers.d.ts.map +1 -0
- package/lib/utils/ai-provider-helpers.js +23 -0
- package/lib/utils/ai-provider-helpers.js.map +1 -0
- package/lib/utils/ai-text.d.ts +23 -0
- package/lib/utils/ai-text.d.ts.map +1 -0
- package/lib/utils/ai-text.js +57 -0
- package/lib/utils/ai-text.js.map +1 -0
- package/lib/utils/ai-workflow.d.ts +18 -0
- package/lib/utils/ai-workflow.d.ts.map +1 -0
- package/lib/utils/ai-workflow.js +66 -0
- package/lib/utils/ai-workflow.js.map +1 -0
- package/lib/utils/branch-naming.d.ts.map +1 -1
- package/lib/utils/branch-naming.js +2 -4
- package/lib/utils/branch-naming.js.map +1 -1
- package/lib/utils/config.d.ts +13 -1
- package/lib/utils/config.d.ts.map +1 -1
- package/lib/utils/config.js +38 -1
- package/lib/utils/config.js.map +1 -1
- package/lib/utils/display.d.ts +24 -0
- package/lib/utils/display.d.ts.map +1 -1
- package/lib/utils/display.js +55 -1
- package/lib/utils/display.js.map +1 -1
- package/lib/utils/git-ai.d.ts +2 -0
- package/lib/utils/git-ai.d.ts.map +1 -1
- package/lib/utils/git-ai.js +30 -13
- package/lib/utils/git-ai.js.map +1 -1
- package/lib/utils/git-errors.d.ts.map +1 -1
- package/lib/utils/git-errors.js +4 -10
- package/lib/utils/git-errors.js.map +1 -1
- package/lib/utils/git.d.ts.map +1 -1
- package/lib/utils/git.js +5 -0
- package/lib/utils/git.js.map +1 -1
- package/lib/utils/github-helpers.d.ts +33 -0
- package/lib/utils/github-helpers.d.ts.map +1 -0
- package/lib/utils/github-helpers.js +101 -0
- package/lib/utils/github-helpers.js.map +1 -0
- package/lib/utils/logging.d.ts +8 -0
- package/lib/utils/logging.d.ts.map +1 -1
- package/lib/utils/logging.js +12 -0
- package/lib/utils/logging.js.map +1 -1
- package/lib/utils/prompt-loader.d.ts +9 -0
- package/lib/utils/prompt-loader.d.ts.map +1 -0
- package/lib/utils/prompt-loader.js +42 -0
- package/lib/utils/prompt-loader.js.map +1 -0
- package/lib/utils/prompts-embedded.d.ts +2 -0
- package/lib/utils/prompts-embedded.d.ts.map +1 -0
- package/lib/utils/prompts-embedded.js +255 -0
- package/lib/utils/prompts-embedded.js.map +1 -0
- package/lib/utils/scramble.d.ts +9 -86
- package/lib/utils/scramble.d.ts.map +1 -1
- package/lib/utils/scramble.js +27 -279
- package/lib/utils/scramble.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/workflows/alias.d.ts.map +1 -1
- package/lib/workflows/alias.js +1 -0
- package/lib/workflows/alias.js.map +1 -1
- package/lib/workflows/amend.d.ts.map +1 -1
- package/lib/workflows/amend.js +3 -6
- package/lib/workflows/amend.js.map +1 -1
- package/lib/workflows/branch-helpers.d.ts.map +1 -1
- package/lib/workflows/branch-helpers.js +0 -1
- package/lib/workflows/branch-helpers.js.map +1 -1
- package/lib/workflows/branch-utils.js +1 -1
- package/lib/workflows/branch-utils.js.map +1 -1
- package/lib/workflows/cleanup.js +3 -3
- package/lib/workflows/cleanup.js.map +1 -1
- package/lib/workflows/commit.d.ts.map +1 -1
- package/lib/workflows/commit.js +163 -202
- package/lib/workflows/commit.js.map +1 -1
- package/lib/workflows/doctor.d.ts +7 -0
- package/lib/workflows/doctor.d.ts.map +1 -0
- package/lib/workflows/doctor.js +284 -0
- package/lib/workflows/doctor.js.map +1 -0
- package/lib/workflows/history.d.ts.map +1 -1
- package/lib/workflows/history.js +2 -1
- package/lib/workflows/history.js.map +1 -1
- package/lib/workflows/issue.d.ts +1 -1
- package/lib/workflows/issue.d.ts.map +1 -1
- package/lib/workflows/issue.js +31 -130
- package/lib/workflows/issue.js.map +1 -1
- package/lib/workflows/main-helpers.d.ts +34 -0
- package/lib/workflows/main-helpers.d.ts.map +1 -0
- package/lib/workflows/main-helpers.js +346 -0
- package/lib/workflows/main-helpers.js.map +1 -0
- package/lib/workflows/main-steps.d.ts.map +1 -1
- package/lib/workflows/main-steps.js +11 -139
- package/lib/workflows/main-steps.js.map +1 -1
- package/lib/workflows/main.d.ts +2 -6
- package/lib/workflows/main.d.ts.map +1 -1
- package/lib/workflows/main.js +43 -365
- package/lib/workflows/main.js.map +1 -1
- package/lib/workflows/pr.d.ts +2 -2
- package/lib/workflows/pr.d.ts.map +1 -1
- package/lib/workflows/pr.js +52 -152
- package/lib/workflows/pr.js.map +1 -1
- package/lib/workflows/prune.d.ts.map +1 -1
- package/lib/workflows/prune.js +2 -10
- package/lib/workflows/prune.js.map +1 -1
- package/lib/workflows/pull.d.ts.map +1 -1
- package/lib/workflows/pull.js +2 -24
- package/lib/workflows/pull.js.map +1 -1
- package/lib/workflows/release-merge.d.ts +12 -0
- package/lib/workflows/release-merge.d.ts.map +1 -0
- package/lib/workflows/release-merge.js +569 -0
- package/lib/workflows/release-merge.js.map +1 -0
- package/lib/workflows/release-notes.d.ts +13 -0
- package/lib/workflows/release-notes.d.ts.map +1 -0
- package/lib/workflows/release-notes.js +141 -0
- package/lib/workflows/release-notes.js.map +1 -0
- package/lib/workflows/release-recover.d.ts +5 -0
- package/lib/workflows/release-recover.d.ts.map +1 -0
- package/lib/workflows/release-recover.js +137 -0
- package/lib/workflows/release-recover.js.map +1 -0
- package/lib/workflows/release-sync.d.ts +7 -0
- package/lib/workflows/release-sync.d.ts.map +1 -0
- package/lib/workflows/release-sync.js +321 -0
- package/lib/workflows/release-sync.js.map +1 -0
- package/lib/workflows/release-utils.d.ts +36 -0
- package/lib/workflows/release-utils.d.ts.map +1 -0
- package/lib/workflows/release-utils.js +150 -0
- package/lib/workflows/release-utils.js.map +1 -0
- package/lib/workflows/release.d.ts.map +1 -1
- package/lib/workflows/release.js +97 -723
- package/lib/workflows/release.js.map +1 -1
- package/lib/workflows/repo-settings.d.ts +2 -2
- package/lib/workflows/repo-settings.d.ts.map +1 -1
- package/lib/workflows/repo-settings.js +35 -25
- package/lib/workflows/repo-settings.js.map +1 -1
- package/lib/workflows/reword.d.ts.map +1 -1
- package/lib/workflows/reword.js +159 -167
- package/lib/workflows/reword.js.map +1 -1
- package/lib/workflows/security-gate.d.ts.map +1 -1
- package/lib/workflows/security-gate.js +18 -94
- package/lib/workflows/security-gate.js.map +1 -1
- package/lib/workflows/settings.d.ts +2 -1
- package/lib/workflows/settings.d.ts.map +1 -1
- package/lib/workflows/settings.js +289 -19
- package/lib/workflows/settings.js.map +1 -1
- package/lib/workflows/stash.d.ts.map +1 -1
- package/lib/workflows/stash.js +2 -1
- package/lib/workflows/stash.js.map +1 -1
- package/lib/workflows/trello-menu.d.ts +2 -5
- package/lib/workflows/trello-menu.d.ts.map +1 -1
- package/lib/workflows/trello-menu.js +67 -228
- package/lib/workflows/trello-menu.js.map +1 -1
- package/lib/workflows/undo.d.ts.map +1 -1
- package/lib/workflows/undo.js +2 -1
- package/lib/workflows/undo.js.map +1 -1
- package/package.json +3 -6
- package/prompts/branch-name-prompt.md +4 -0
- package/prompts/commit-message-prompt.md +12 -0
- package/prompts/issue-prompt.md +19 -0
- package/prompts/issue-review.with-context.prompt.yml +77 -0
- package/prompts/pr-prompt.md +14 -0
- package/prompts/release-notes-prompt.md +35 -0
- package/prompts/repo-description-prompt.md +1 -0
- package/prompts/security-gate-prompt.md +80 -0
package/lib/cli/input.js
CHANGED
|
@@ -46,15 +46,124 @@ export const highlightDiff = (diff) => {
|
|
|
46
46
|
.replaceAll(/^(\s.*)$/gm, '\u001B[37m$1\u001B[0m'); // Context lines (white)
|
|
47
47
|
};
|
|
48
48
|
/**
|
|
49
|
-
* Ask a yes/no confirmation question
|
|
49
|
+
* Ask a yes/no confirmation question with interactive arrow-key toggle.
|
|
50
|
+
*
|
|
51
|
+
* Shortcuts:
|
|
52
|
+
* - ↑ / ↓ → cycle between Y and N (wraps around)
|
|
53
|
+
* - y / Y → immediately confirm yes
|
|
54
|
+
* - n / N → immediately confirm no
|
|
55
|
+
* - Enter → confirm current selection
|
|
56
|
+
* - Ctrl+C → exit
|
|
57
|
+
*
|
|
58
|
+
* Falls back to plain text input when stdin is not a TTY.
|
|
50
59
|
*/
|
|
51
60
|
export const confirm = (question, defaultYes = true) => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
61
|
+
// Ensure cursor is visible and raw mode is off before we start
|
|
62
|
+
if (process.stdin.isTTY && process.stdin.isRaw) {
|
|
63
|
+
process.stdin.setRawMode(false);
|
|
64
|
+
}
|
|
65
|
+
process.stdout.write('\u001B[?25h');
|
|
66
|
+
// Non-TTY fallback — plain text input
|
|
67
|
+
if (!process.stdin.isTTY) {
|
|
68
|
+
const suffix = defaultYes ? ' (Y/n): ' : ' (y/N): ';
|
|
69
|
+
const answer = askQuestion(`${question}${suffix}`);
|
|
70
|
+
if (answer === '')
|
|
71
|
+
return defaultYes;
|
|
72
|
+
return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';
|
|
73
|
+
}
|
|
74
|
+
let selected = null; // null = no selection yet, use defaultYes on Enter
|
|
75
|
+
const suffix = defaultYes ? '(Y/n)' : '(y/N)';
|
|
76
|
+
// Strip leading newlines from question — render them once as spacing, not on every redraw
|
|
77
|
+
const leadingNewlines = question.match(/^\n+/)?.[0] ?? '';
|
|
78
|
+
const cleanQuestion = question.slice(leadingNewlines.length);
|
|
79
|
+
/** Render the interactive prompt line (single-line overwrite). */
|
|
80
|
+
const render = () => {
|
|
81
|
+
const answer = selected === null
|
|
82
|
+
? ''
|
|
83
|
+
: selected
|
|
84
|
+
? '\u001B[36m\u001B[1mY\u001B[0m'
|
|
85
|
+
: '\u001B[36m\u001B[1mN\u001B[0m';
|
|
86
|
+
const line = `${cleanQuestion} ${suffix} ${answer}`;
|
|
87
|
+
process.stdout.write(`\r${line}\u001B[K`);
|
|
88
|
+
};
|
|
89
|
+
/** Render the final confirmed state and move to next line. */
|
|
90
|
+
const renderFinal = (label) => {
|
|
91
|
+
const line = `${cleanQuestion} ${suffix} \u001B[36m${label}\u001B[0m`;
|
|
92
|
+
process.stdout.write(`\r${line}\u001B[K\n`);
|
|
93
|
+
};
|
|
94
|
+
// Write leading newlines once, then initial render on the new line
|
|
95
|
+
process.stdout.write(leadingNewlines + '\n');
|
|
96
|
+
render();
|
|
97
|
+
// Enter raw mode for key-by-key reading
|
|
98
|
+
rl.pause();
|
|
99
|
+
process.stdin.setRawMode(true);
|
|
100
|
+
const buf = Buffer.alloc(16);
|
|
101
|
+
try {
|
|
102
|
+
for (;;) {
|
|
103
|
+
let n;
|
|
104
|
+
try {
|
|
105
|
+
n = fs.readSync(0, buf, 0, buf.length, null);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
if (n === 0)
|
|
111
|
+
break;
|
|
112
|
+
const b = buf[0];
|
|
113
|
+
if (b === undefined)
|
|
114
|
+
break;
|
|
115
|
+
// Ctrl+C → exit
|
|
116
|
+
if (b === 3) {
|
|
117
|
+
process.stdout.write('\u001B[?25h\n');
|
|
118
|
+
process.exit(0);
|
|
119
|
+
}
|
|
120
|
+
// Escape (standalone, not arrow sequence) → cancel, return false
|
|
121
|
+
if (b === 27 && (n === 1 || buf[1] !== 0x5b)) {
|
|
122
|
+
renderFinal('N');
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
// Enter → confirm current selection (null = use default)
|
|
126
|
+
if (b === 13 || b === 10) {
|
|
127
|
+
const result = selected ?? defaultYes;
|
|
128
|
+
renderFinal(result ? 'Y' : 'N');
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
// y / Y → immediately yes
|
|
132
|
+
if (b === 0x79 || b === 0x59) {
|
|
133
|
+
renderFinal('Y');
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
// n / N → immediately no
|
|
137
|
+
if (b === 0x6e || b === 0x4e) {
|
|
138
|
+
renderFinal('N');
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
// ESC sequences — arrow keys
|
|
142
|
+
if (b === 27 && n >= 3 && buf[1] === 0x5b) {
|
|
143
|
+
const arrow = buf[2];
|
|
144
|
+
// UP (0x41) or DOWN (0x42) → toggle
|
|
145
|
+
if (arrow === 0x41 || arrow === 0x42) {
|
|
146
|
+
if (selected === null) {
|
|
147
|
+
// First arrow press: UP → Y, DOWN → N
|
|
148
|
+
selected = arrow === 0x41;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
selected = !selected;
|
|
152
|
+
}
|
|
153
|
+
render();
|
|
154
|
+
}
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
if (process.stdin.isTTY) {
|
|
161
|
+
process.stdin.setRawMode(false);
|
|
162
|
+
}
|
|
163
|
+
process.stdout.write('\u001B[?25h'); // Show cursor
|
|
164
|
+
rl.resume();
|
|
56
165
|
}
|
|
57
|
-
return
|
|
166
|
+
return selected ?? defaultYes;
|
|
58
167
|
};
|
|
59
168
|
/**
|
|
60
169
|
* Interactive multiline text input with editing support.
|
|
@@ -146,6 +255,11 @@ export const askMultiline = (question, initialText = '') => {
|
|
|
146
255
|
process.stdout.write('\n');
|
|
147
256
|
return null;
|
|
148
257
|
}
|
|
258
|
+
// Escape (standalone, not arrow sequence) → cancel
|
|
259
|
+
if (b === 27 && (n === 1 || buf[1] !== 0x5b)) {
|
|
260
|
+
process.stdout.write('\n');
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
149
263
|
// Ctrl+D → submit
|
|
150
264
|
if (b === 4) {
|
|
151
265
|
process.stdout.write('\n');
|
|
@@ -223,8 +337,8 @@ export const askMultiline = (question, initialText = '') => {
|
|
|
223
337
|
return text || null;
|
|
224
338
|
};
|
|
225
339
|
/**
|
|
226
|
-
* Inline multi-line text editor using the system's
|
|
227
|
-
* Opens
|
|
340
|
+
* Inline multi-line text editor using the system's terminal editor.
|
|
341
|
+
* Opens vim (macOS/Linux) or notepad (Windows) with the initial text.
|
|
228
342
|
*
|
|
229
343
|
* Kept async (returns Promise) so all existing callers using
|
|
230
344
|
* `await editInline(...)` continue to work without changes.
|
|
@@ -243,7 +357,7 @@ export const editInline = (initialText, label = 'Edit Message', _syntax = '') =>
|
|
|
243
357
|
catch {
|
|
244
358
|
return Promise.resolve(null);
|
|
245
359
|
}
|
|
246
|
-
const editor = process.platform === 'win32' ? 'notepad' : '
|
|
360
|
+
const editor = process.platform === 'win32' ? 'notepad' : 'vim';
|
|
247
361
|
try {
|
|
248
362
|
spawnSync(editor, [tmpPath], { stdio: 'inherit' });
|
|
249
363
|
const edited = fs.readFileSync(tmpPath, { encoding: 'utf8' }).trim();
|
package/lib/cli/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/cli/input.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/cli/input.ts"],"names":[],"mappings":"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"}
|
package/lib/cli/menu.d.ts
CHANGED
|
@@ -9,5 +9,5 @@ export declare const select: (question: string, options: SelectOption[]) => Prom
|
|
|
9
9
|
/**
|
|
10
10
|
* Interactive multi-select menu with checkboxes (Space to toggle, Enter to confirm)
|
|
11
11
|
*/
|
|
12
|
-
export declare const multiSelect: (question: string, options: SelectOption[]) => Promise<string[]>;
|
|
12
|
+
export declare const multiSelect: (question: string, options: SelectOption[], preSelected?: string[]) => Promise<string[]>;
|
|
13
13
|
//# sourceMappingURL=menu.d.ts.map
|
package/lib/cli/menu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/cli/menu.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAMrD;;GAEG;AACH,eAAO,MAAM,MAAM,GAAU,UAAU,MAAM,EAAE,SAAS,YAAY,EAAE,KAAG,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/cli/menu.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAMrD;;GAEG;AACH,eAAO,MAAM,MAAM,GAAU,UAAU,MAAM,EAAE,SAAS,YAAY,EAAE,KAAG,OAAO,CAAC,MAAM,CA2VtF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,GACtB,UAAU,MAAM,EAChB,SAAS,YAAY,EAAE,EACvB,cAAc,MAAM,EAAE,KACrB,OAAO,CAAC,MAAM,EAAE,CAwdlB,CAAA"}
|
package/lib/cli/menu.js
CHANGED
|
@@ -14,6 +14,23 @@ export const select = async (question, options) => {
|
|
|
14
14
|
let searchMode = false;
|
|
15
15
|
let searchQuery = '';
|
|
16
16
|
let filteredOptions = options;
|
|
17
|
+
/** Skip disabled items when navigating */
|
|
18
|
+
const skipDisabled = (dir) => {
|
|
19
|
+
const len = filteredOptions.length;
|
|
20
|
+
for (let i = 0; i < len; i++) {
|
|
21
|
+
selectedIndex += dir;
|
|
22
|
+
if (selectedIndex < 0)
|
|
23
|
+
selectedIndex = len - 1;
|
|
24
|
+
if (selectedIndex >= len)
|
|
25
|
+
selectedIndex = 0;
|
|
26
|
+
if (!filteredOptions[selectedIndex]?.disabled)
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
// Skip initial disabled items
|
|
31
|
+
if (filteredOptions[selectedIndex]?.disabled) {
|
|
32
|
+
skipDisabled(1);
|
|
33
|
+
}
|
|
17
34
|
const filterOptions = (query) => {
|
|
18
35
|
if (!query) {
|
|
19
36
|
return options;
|
|
@@ -37,6 +54,10 @@ export const select = async (question, options) => {
|
|
|
37
54
|
*/
|
|
38
55
|
const stripAnsi = (str) => str.replaceAll(/\u001B\[\d*;?\d*m|\u001B\]8;;[^\u0007]*\u0007/g, '');
|
|
39
56
|
const renderItem = (opt, idx) => {
|
|
57
|
+
// Disabled items render as section headers (non-selectable)
|
|
58
|
+
if (opt.disabled) {
|
|
59
|
+
return ` ${colors.bright}${opt.label}${colors.reset}`;
|
|
60
|
+
}
|
|
40
61
|
const prefix = idx === selectedIndex ? `${colors.cyan}❯${colors.reset}` : ' ';
|
|
41
62
|
// Truncate label to terminal width
|
|
42
63
|
const cols = process.stdout.columns || 80;
|
|
@@ -100,7 +121,7 @@ export const select = async (question, options) => {
|
|
|
100
121
|
linesRendered++;
|
|
101
122
|
const hintText = searchMode
|
|
102
123
|
? ` (Esc cancel search, Enter select)`
|
|
103
|
-
: ` (↑↓/jk arrows, / search, Enter select, 'c' clear, 'q' quit)`;
|
|
124
|
+
: ` (↑↓/jk arrows, / search, Enter select, Esc back, 'c' clear, 'q' quit)`;
|
|
104
125
|
console.log(`${colors.gray}${hintText}${colors.reset}`);
|
|
105
126
|
linesRendered++;
|
|
106
127
|
if (searchMode) {
|
|
@@ -213,6 +234,12 @@ export const select = async (question, options) => {
|
|
|
213
234
|
}
|
|
214
235
|
// Normal navigation mode
|
|
215
236
|
switch (keyStr) {
|
|
237
|
+
case '\u001B': {
|
|
238
|
+
// Escape key - back to parent menu
|
|
239
|
+
cleanup();
|
|
240
|
+
resolve('back');
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
216
243
|
case '/': {
|
|
217
244
|
searchMode = true;
|
|
218
245
|
renderMenu();
|
|
@@ -220,18 +247,20 @@ export const select = async (question, options) => {
|
|
|
220
247
|
}
|
|
221
248
|
case '\u001B[A':
|
|
222
249
|
case 'k': {
|
|
223
|
-
|
|
250
|
+
skipDisabled(-1);
|
|
224
251
|
renderMenu();
|
|
225
252
|
break;
|
|
226
253
|
}
|
|
227
254
|
case '\u001B[B':
|
|
228
255
|
case 'j': {
|
|
229
|
-
|
|
256
|
+
skipDisabled(1);
|
|
230
257
|
renderMenu();
|
|
231
258
|
break;
|
|
232
259
|
}
|
|
233
260
|
case '\r':
|
|
234
261
|
case '\n': {
|
|
262
|
+
if (filteredOptions[selectedIndex]?.disabled)
|
|
263
|
+
break;
|
|
235
264
|
cleanup();
|
|
236
265
|
resolve(filteredOptions[selectedIndex]?.value ?? '');
|
|
237
266
|
break;
|
|
@@ -272,7 +301,7 @@ export const select = async (question, options) => {
|
|
|
272
301
|
}
|
|
273
302
|
console.log('');
|
|
274
303
|
clearLines++;
|
|
275
|
-
console.log(`${colors.gray} (↑↓/jk arrows, / search, Enter select, 'c' clear, 'q' quit)${colors.reset}`);
|
|
304
|
+
console.log(`${colors.gray} (↑↓/jk arrows, / search, Enter select, Esc back, 'c' clear, 'q' quit)${colors.reset}`);
|
|
276
305
|
clearLines++;
|
|
277
306
|
lastRenderedLines = clearLines;
|
|
278
307
|
break;
|
|
@@ -286,9 +315,15 @@ export const select = async (question, options) => {
|
|
|
286
315
|
/**
|
|
287
316
|
* Interactive multi-select menu with checkboxes (Space to toggle, Enter to confirm)
|
|
288
317
|
*/
|
|
289
|
-
export const multiSelect = async (question, options) => {
|
|
318
|
+
export const multiSelect = async (question, options, preSelected) => {
|
|
290
319
|
return new Promise((resolve) => {
|
|
291
320
|
let selectedIndex = 0;
|
|
321
|
+
// Skip initial disabled items (but allow group headers with children)
|
|
322
|
+
while (selectedIndex < options.length &&
|
|
323
|
+
options[selectedIndex]?.disabled &&
|
|
324
|
+
!options[selectedIndex]?.children) {
|
|
325
|
+
selectedIndex++;
|
|
326
|
+
}
|
|
292
327
|
const maxVisibleItems = 15;
|
|
293
328
|
let scrollOffset = 0;
|
|
294
329
|
let searchMode = false;
|
|
@@ -296,7 +331,33 @@ export const multiSelect = async (question, options) => {
|
|
|
296
331
|
let searchQuery = '';
|
|
297
332
|
let rangeQuery = '';
|
|
298
333
|
let filteredOptions = options;
|
|
299
|
-
const checked = new Set();
|
|
334
|
+
const checked = new Set((preSelected ?? []).filter((v) => options.some((o) => o.value === v)));
|
|
335
|
+
const totalSelectable = options.filter((o) => !o.disabled && !o.children).length;
|
|
336
|
+
let lastRenderedLines = 0;
|
|
337
|
+
/** Group header values to filter out from results */
|
|
338
|
+
const groupValues = new Set(options.filter((o) => o.children).map((o) => o.value));
|
|
339
|
+
/** Get checked values excluding group header values */
|
|
340
|
+
const getResult = () => [...checked].filter((v) => !groupValues.has(v));
|
|
341
|
+
/** Skip over disabled items when navigating (group headers with children are NOT skipped) */
|
|
342
|
+
const skipDisabled = (dir) => {
|
|
343
|
+
while (filteredOptions[selectedIndex]?.disabled &&
|
|
344
|
+
!filteredOptions[selectedIndex]?.children &&
|
|
345
|
+
selectedIndex >= 0 &&
|
|
346
|
+
selectedIndex < filteredOptions.length) {
|
|
347
|
+
selectedIndex += dir;
|
|
348
|
+
}
|
|
349
|
+
// Clamp
|
|
350
|
+
if (selectedIndex < 0)
|
|
351
|
+
selectedIndex = 0;
|
|
352
|
+
if (selectedIndex >= filteredOptions.length)
|
|
353
|
+
selectedIndex = filteredOptions.length - 1;
|
|
354
|
+
// If still on disabled (and not a group header), find nearest enabled
|
|
355
|
+
if (filteredOptions[selectedIndex]?.disabled && !filteredOptions[selectedIndex]?.children) {
|
|
356
|
+
const idx = filteredOptions.findIndex((o) => !o.disabled || (o.children && o.children.length > 0));
|
|
357
|
+
if (idx !== -1)
|
|
358
|
+
selectedIndex = idx;
|
|
359
|
+
}
|
|
360
|
+
};
|
|
300
361
|
const filterOptions = (query) => {
|
|
301
362
|
if (!query)
|
|
302
363
|
return options;
|
|
@@ -318,15 +379,37 @@ export const multiSelect = async (question, options) => {
|
|
|
318
379
|
*/
|
|
319
380
|
const stripAnsi = (str) => str.replaceAll(/\u001B\[\d*;?\d*m|\u001B\]8;;[^\u0007]*\u0007/g, '');
|
|
320
381
|
const renderItem = (opt, idx) => {
|
|
382
|
+
// Group header (folder) — selectable, toggles children
|
|
383
|
+
if (opt.children && opt.children.length > 0) {
|
|
384
|
+
const checkedCount = opt.children.filter((v) => checked.has(v)).length;
|
|
385
|
+
const total = opt.children.length;
|
|
386
|
+
const cursor = idx === selectedIndex ? `${colors.cyan}❯${colors.reset}` : ' ';
|
|
387
|
+
let box;
|
|
388
|
+
if (checkedCount === total) {
|
|
389
|
+
box = `${colors.green}◉${colors.reset}`;
|
|
390
|
+
}
|
|
391
|
+
else if (checkedCount > 0) {
|
|
392
|
+
box = `${colors.yellow}◐${colors.reset}`;
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
box = `${colors.gray}○${colors.reset}`;
|
|
396
|
+
}
|
|
397
|
+
const label = idx === selectedIndex
|
|
398
|
+
? `${colors.cyan}${colors.bright}${opt.label}${colors.reset}`
|
|
399
|
+
: `${colors.bright}${opt.label}${colors.reset}`;
|
|
400
|
+
return `${cursor} ${box} ${label}`;
|
|
401
|
+
}
|
|
402
|
+
// Disabled items are non-interactive separators
|
|
403
|
+
if (opt.disabled) {
|
|
404
|
+
return ` ${colors.bright}${opt.label}${colors.reset}`;
|
|
405
|
+
}
|
|
321
406
|
const cursor = idx === selectedIndex ? `${colors.cyan}❯${colors.reset}` : ' ';
|
|
322
407
|
const box = checked.has(opt.value)
|
|
323
408
|
? `${colors.green}◉${colors.reset}`
|
|
324
409
|
: `${colors.gray}○${colors.reset}`;
|
|
325
|
-
// Show 1-based number for quick range selection
|
|
326
|
-
const num = `${colors.gray}${String(idx + 1).padStart(2, ' ')}${colors.reset}`;
|
|
327
410
|
// Truncate label to fit terminal width
|
|
328
411
|
const cols = process.stdout.columns || 80;
|
|
329
|
-
const prefixLen = 5
|
|
412
|
+
const prefixLen = 5; // "❯ ◉ "
|
|
330
413
|
const maxLabelLen = cols - prefixLen - 1;
|
|
331
414
|
const visibleLabel = stripAnsi(opt.label);
|
|
332
415
|
let displayLabel = opt.label;
|
|
@@ -344,18 +427,14 @@ export const multiSelect = async (question, options) => {
|
|
|
344
427
|
? `${colors.cyan}${colors.bright}${opt.label}${colors.reset}`
|
|
345
428
|
: `${colors.gray}${opt.label}${colors.reset}`;
|
|
346
429
|
}
|
|
347
|
-
return `${cursor} ${box} ${
|
|
430
|
+
return `${cursor} ${box} ${displayLabel}`;
|
|
348
431
|
};
|
|
349
|
-
// Track how many lines the previous render produced (for accurate clearing)
|
|
350
|
-
let lastRenderedLines = 0;
|
|
351
432
|
const renderMenu = () => {
|
|
352
433
|
const { start, end } = getVisibleRange();
|
|
353
|
-
//
|
|
354
|
-
// First clear current line, then go up for the rest
|
|
434
|
+
// Clear previous render by moving cursor up line-by-line (reliable across all terminals)
|
|
355
435
|
if (rangeMode) {
|
|
356
436
|
process.stdout.write('\u001B[2K\r'); // Clear current range input line
|
|
357
437
|
}
|
|
358
|
-
// Clear exactly the number of lines the PREVIOUS render produced
|
|
359
438
|
for (let i = 0; i < lastRenderedLines; i++) {
|
|
360
439
|
process.stdout.write('\u001B[1A\u001B[2K');
|
|
361
440
|
}
|
|
@@ -364,8 +443,7 @@ export const multiSelect = async (question, options) => {
|
|
|
364
443
|
console.log(`${colors.cyan}/ search:${colors.reset} ${searchQuery}`);
|
|
365
444
|
linesRendered++;
|
|
366
445
|
}
|
|
367
|
-
|
|
368
|
-
console.log(`${colors.gray} Selected: ${colors.cyan}${checked.size}${colors.gray}/${options.length}${colors.reset}`);
|
|
446
|
+
console.log(`${colors.gray} Selected: ${colors.cyan}${checked.size}${colors.gray}/${totalSelectable}${colors.reset}`);
|
|
369
447
|
linesRendered++;
|
|
370
448
|
// Scroll indicator: items above
|
|
371
449
|
const above = start;
|
|
@@ -397,7 +475,7 @@ export const multiSelect = async (question, options) => {
|
|
|
397
475
|
? ` (Type numbers: "1 3 5" or "1-10", Enter apply, Esc cancel)`
|
|
398
476
|
: searchMode
|
|
399
477
|
? ` (Esc cancel search, Space toggle, Enter confirm)`
|
|
400
|
-
: ` (↑↓/jk Space toggle, 'a' all, 'n' none, '#' range, / search, Enter confirm, 'q' quit)`;
|
|
478
|
+
: ` (↑↓/jk Space toggle, 'a' all, 'n' none, '#' range, / search, Enter confirm, Esc back, 'q' quit)`;
|
|
401
479
|
console.log(`${colors.gray}${hintText}${colors.reset}`);
|
|
402
480
|
linesRendered++;
|
|
403
481
|
// Range input at the very bottom (no newline so cursor stays at end)
|
|
@@ -406,42 +484,10 @@ export const multiSelect = async (question, options) => {
|
|
|
406
484
|
}
|
|
407
485
|
lastRenderedLines = linesRendered;
|
|
408
486
|
};
|
|
409
|
-
//
|
|
487
|
+
// Print question line
|
|
410
488
|
console.log(`${colors.cyan}?${colors.reset} ${question}`);
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
console.log(`${colors.gray} Selected: ${colors.cyan}${checked.size}${colors.gray}/${options.length}${colors.reset}`);
|
|
414
|
-
initLines++;
|
|
415
|
-
const { start, end } = getVisibleRange();
|
|
416
|
-
const above = start;
|
|
417
|
-
if (above > 0) {
|
|
418
|
-
console.log(`${colors.gray} ↑ ${above} more above${colors.reset}`);
|
|
419
|
-
initLines++;
|
|
420
|
-
}
|
|
421
|
-
console.log('');
|
|
422
|
-
initLines++;
|
|
423
|
-
for (let idx = start; idx < end; idx++) {
|
|
424
|
-
const opt = filteredOptions[idx];
|
|
425
|
-
if (!opt)
|
|
426
|
-
continue;
|
|
427
|
-
console.log(renderItem(opt, idx));
|
|
428
|
-
initLines++;
|
|
429
|
-
}
|
|
430
|
-
// Scroll indicator: items below
|
|
431
|
-
const below = filteredOptions.length - end;
|
|
432
|
-
if (below > 0) {
|
|
433
|
-
console.log('');
|
|
434
|
-
initLines++;
|
|
435
|
-
console.log(`${colors.gray} ↓ ${below} more below${colors.reset}`);
|
|
436
|
-
initLines++;
|
|
437
|
-
}
|
|
438
|
-
// Hint at bottom
|
|
439
|
-
console.log('');
|
|
440
|
-
initLines++;
|
|
441
|
-
console.log(`${colors.gray} (↑↓/jk Space toggle, 'a' all, 'n' none, '#' range, / search, Enter confirm, 'q' quit)${colors.reset}`);
|
|
442
|
-
initLines++;
|
|
443
|
-
lastRenderedLines = initLines;
|
|
444
|
-
}
|
|
489
|
+
// Initial render
|
|
490
|
+
renderMenu();
|
|
445
491
|
if (process.stdin.isTTY) {
|
|
446
492
|
process.stdin.setRawMode(true);
|
|
447
493
|
}
|
|
@@ -541,12 +587,25 @@ export const multiSelect = async (question, options) => {
|
|
|
541
587
|
}
|
|
542
588
|
if (keyStr === ' ') {
|
|
543
589
|
const opt = filteredOptions[selectedIndex];
|
|
544
|
-
if (opt) {
|
|
545
|
-
if (
|
|
546
|
-
checked.
|
|
590
|
+
if (opt && !opt.disabled) {
|
|
591
|
+
if (opt.children && opt.children.length > 0) {
|
|
592
|
+
const allChecked = opt.children.every((v) => checked.has(v));
|
|
593
|
+
if (allChecked) {
|
|
594
|
+
for (const v of opt.children)
|
|
595
|
+
checked.delete(v);
|
|
596
|
+
}
|
|
597
|
+
else {
|
|
598
|
+
for (const v of opt.children)
|
|
599
|
+
checked.add(v);
|
|
600
|
+
}
|
|
547
601
|
}
|
|
548
602
|
else {
|
|
549
|
-
checked.
|
|
603
|
+
if (checked.has(opt.value)) {
|
|
604
|
+
checked.delete(opt.value);
|
|
605
|
+
}
|
|
606
|
+
else {
|
|
607
|
+
checked.add(opt.value);
|
|
608
|
+
}
|
|
550
609
|
}
|
|
551
610
|
}
|
|
552
611
|
renderMenu();
|
|
@@ -554,24 +613,27 @@ export const multiSelect = async (question, options) => {
|
|
|
554
613
|
}
|
|
555
614
|
if (keyStr === '\r' || keyStr === '\n') {
|
|
556
615
|
cleanup();
|
|
557
|
-
resolve(
|
|
616
|
+
resolve(getResult());
|
|
558
617
|
return;
|
|
559
618
|
}
|
|
560
619
|
if (keyStr === '\u007F' || keyStr === '\b') {
|
|
561
620
|
searchQuery = searchQuery.slice(0, -1);
|
|
562
621
|
filteredOptions = filterOptions(searchQuery);
|
|
563
622
|
selectedIndex = 0;
|
|
623
|
+
skipDisabled(1);
|
|
564
624
|
scrollOffset = 0;
|
|
565
625
|
renderMenu();
|
|
566
626
|
return;
|
|
567
627
|
}
|
|
568
628
|
if (keyStr === '\u001B[A' || keyStr === 'k') {
|
|
569
629
|
selectedIndex = selectedIndex > 0 ? selectedIndex - 1 : filteredOptions.length - 1;
|
|
630
|
+
skipDisabled(-1);
|
|
570
631
|
renderMenu();
|
|
571
632
|
return;
|
|
572
633
|
}
|
|
573
634
|
if (keyStr === '\u001B[B' || keyStr === 'j') {
|
|
574
635
|
selectedIndex = selectedIndex < filteredOptions.length - 1 ? selectedIndex + 1 : 0;
|
|
636
|
+
skipDisabled(1);
|
|
575
637
|
renderMenu();
|
|
576
638
|
return;
|
|
577
639
|
}
|
|
@@ -591,6 +653,12 @@ export const multiSelect = async (question, options) => {
|
|
|
591
653
|
}
|
|
592
654
|
// Normal navigation mode
|
|
593
655
|
switch (keyStr) {
|
|
656
|
+
case '\u001B': {
|
|
657
|
+
// Escape key - cancel/back
|
|
658
|
+
cleanup();
|
|
659
|
+
resolve([]);
|
|
660
|
+
break;
|
|
661
|
+
}
|
|
594
662
|
case '#': {
|
|
595
663
|
rangeMode = true;
|
|
596
664
|
renderMenu();
|
|
@@ -604,24 +672,40 @@ export const multiSelect = async (question, options) => {
|
|
|
604
672
|
case '\u001B[A':
|
|
605
673
|
case 'k': {
|
|
606
674
|
selectedIndex = selectedIndex > 0 ? selectedIndex - 1 : filteredOptions.length - 1;
|
|
675
|
+
skipDisabled(-1);
|
|
607
676
|
renderMenu();
|
|
608
677
|
break;
|
|
609
678
|
}
|
|
610
679
|
case '\u001B[B':
|
|
611
680
|
case 'j': {
|
|
612
681
|
selectedIndex = selectedIndex < filteredOptions.length - 1 ? selectedIndex + 1 : 0;
|
|
682
|
+
skipDisabled(1);
|
|
613
683
|
renderMenu();
|
|
614
684
|
break;
|
|
615
685
|
}
|
|
616
686
|
case ' ': {
|
|
617
|
-
// Toggle current item
|
|
687
|
+
// Toggle current item (skip disabled)
|
|
618
688
|
const opt = filteredOptions[selectedIndex];
|
|
619
|
-
if (opt) {
|
|
620
|
-
if (
|
|
621
|
-
|
|
689
|
+
if (opt && !opt.disabled) {
|
|
690
|
+
if (opt.children && opt.children.length > 0) {
|
|
691
|
+
// Group header: toggle all children
|
|
692
|
+
const allChecked = opt.children.every((v) => checked.has(v));
|
|
693
|
+
if (allChecked) {
|
|
694
|
+
for (const v of opt.children)
|
|
695
|
+
checked.delete(v);
|
|
696
|
+
}
|
|
697
|
+
else {
|
|
698
|
+
for (const v of opt.children)
|
|
699
|
+
checked.add(v);
|
|
700
|
+
}
|
|
622
701
|
}
|
|
623
702
|
else {
|
|
624
|
-
checked.
|
|
703
|
+
if (checked.has(opt.value)) {
|
|
704
|
+
checked.delete(opt.value);
|
|
705
|
+
}
|
|
706
|
+
else {
|
|
707
|
+
checked.add(opt.value);
|
|
708
|
+
}
|
|
625
709
|
}
|
|
626
710
|
}
|
|
627
711
|
renderMenu();
|
|
@@ -629,9 +713,10 @@ export const multiSelect = async (question, options) => {
|
|
|
629
713
|
}
|
|
630
714
|
case 'a':
|
|
631
715
|
case 'A': {
|
|
632
|
-
// Select all
|
|
716
|
+
// Select all (only non-disabled, non-group-header)
|
|
633
717
|
for (const opt of options) {
|
|
634
|
-
|
|
718
|
+
if (!opt.disabled && !opt.children)
|
|
719
|
+
checked.add(opt.value);
|
|
635
720
|
}
|
|
636
721
|
renderMenu();
|
|
637
722
|
break;
|
|
@@ -646,7 +731,7 @@ export const multiSelect = async (question, options) => {
|
|
|
646
731
|
case '\r':
|
|
647
732
|
case '\n': {
|
|
648
733
|
cleanup();
|
|
649
|
-
resolve(
|
|
734
|
+
resolve(getResult());
|
|
650
735
|
break;
|
|
651
736
|
}
|
|
652
737
|
case 'q':
|
|
@@ -660,36 +745,8 @@ export const multiSelect = async (question, options) => {
|
|
|
660
745
|
case 'C': {
|
|
661
746
|
console.clear();
|
|
662
747
|
console.log(`${colors.cyan}?${colors.reset} ${question}`);
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
clearLines++;
|
|
666
|
-
const { start, end } = getVisibleRange();
|
|
667
|
-
const aboveC = start;
|
|
668
|
-
if (aboveC > 0) {
|
|
669
|
-
console.log(`${colors.gray} ↑ ${aboveC} more above${colors.reset}`);
|
|
670
|
-
clearLines++;
|
|
671
|
-
}
|
|
672
|
-
console.log('');
|
|
673
|
-
clearLines++;
|
|
674
|
-
for (let idx = start; idx < end; idx++) {
|
|
675
|
-
const opt = filteredOptions[idx];
|
|
676
|
-
if (!opt)
|
|
677
|
-
continue;
|
|
678
|
-
console.log(renderItem(opt, idx));
|
|
679
|
-
clearLines++;
|
|
680
|
-
}
|
|
681
|
-
const belowC = filteredOptions.length - end;
|
|
682
|
-
if (belowC > 0) {
|
|
683
|
-
console.log('');
|
|
684
|
-
clearLines++;
|
|
685
|
-
console.log(`${colors.gray} ↓ ${belowC} more below${colors.reset}`);
|
|
686
|
-
clearLines++;
|
|
687
|
-
}
|
|
688
|
-
console.log('');
|
|
689
|
-
clearLines++;
|
|
690
|
-
console.log(`${colors.gray} (↑↓/jk Space toggle, 'a' all, 'n' none, '#' range, / search, Enter confirm, 'q' quit)${colors.reset}`);
|
|
691
|
-
clearLines++;
|
|
692
|
-
lastRenderedLines = clearLines;
|
|
748
|
+
lastRenderedLines = 0;
|
|
749
|
+
renderMenu();
|
|
693
750
|
break;
|
|
694
751
|
}
|
|
695
752
|
}
|