3 Commits

Author SHA1 Message Date
c0ce69af6f Merge pull request 'fix: arrow keys in prompts now move cursor, also implements delete key' (#11) from 1.0.2 into main
All checks were successful
Create Version Tag / version-check (push) Successful in 23s
Create Version Tag / build-release (push) Successful in 1m51s
Create Version Tag / publish-release (push) Successful in 31s
Reviewed-on: #11
2025-05-21 10:50:55 -07:00
da80c4690b Merge pull request 'fix: jsr install breaks because of missing asciiart file' (#10) from 1.0.2 into main
All checks were successful
Create Version Tag / version-check (push) Successful in 21s
Create Version Tag / build-release (push) Successful in 3m52s
Create Version Tag / publish-release (push) Successful in 30s
Reviewed-on: #10
2025-05-20 14:14:03 -07:00
93df271f79 Merge pull request '1.0.2' (#9) from 1.0.2 into main
All checks were successful
Create Version Tag / version-check (push) Successful in 22s
Create Version Tag / build-release (push) Successful in 2m58s
Create Version Tag / publish-release (push) Successful in 32s
Reviewed-on: #9
2025-05-20 12:46:29 -07:00
2 changed files with 25 additions and 48 deletions

View File

@@ -43,64 +43,41 @@ export async function cliPrompt(
render();
const buf = new Uint8Array(64); // large enough for most pastes
inputLoop:
const buf = new Uint8Array(6); // 6 bytes is enough for all the keys
while (true) {
const n = await Deno.stdin.read(buf);
if (n === null) break;
const [a, b, c] = buf;
for (let i = 0; i < n; i++) {
const byte = buf[i];
// Ctrl+C
if (byte === 3) {
if (a === 3) { // Ctrl+C
block?.clear();
block?.["layout"]?.clearAll();
await Deno.stdin.setRaw(false);
Deno.stdin.setRaw(false);
Deno.exit(130);
}
if (byte === 13) { // Enter
break inputLoop;
}
// Escape sequence?
if (byte === 27 && i + 1 < n && buf[i + 1] === 91) {
const third = buf[i + 2];
if (third === 68 && cursorPos > 0) cursorPos--; // Left
else if (third === 67 && cursorPos < input.length) cursorPos++; // Right
else if (third === 51 && i + 3 < n && buf[i + 3] === 126) { // Delete
if (cursorPos < input.length) input.splice(cursorPos, 1);
i += 1; // consume tilde
}
i += 2; // consume ESC [ X
continue;
}
// Backspace
if (byte === 127 || byte === 8) {
if (a === 13) { // Enter
break;
} else if (a === 127 || a === 8) { // Backspace
if (cursorPos > 0) {
input.splice(cursorPos - 1, 1);
cursorPos--;
}
continue;
}
// Delete (ASCII 46)
if (byte === 46 && cursorPos < input.length) {
} else if (a === 46) { // Delete
if (cursorPos < input.length) {
input.splice(cursorPos, 1);
continue;
}
// Printable
if (byte >= 32 && byte <= 126) {
input.splice(cursorPos, 0, String.fromCharCode(byte));
} else if (a === 27 && b === 91) { // Arrow keys
if (c === 51 && cursorPos < input.length) { // delete
input.splice(cursorPos, 1);
}
if (c === 68 && cursorPos > 0) cursorPos--; // Left
if (c === 67 && cursorPos < input.length) cursorPos++; // Right
} else if (a >= 32 && a <= 126) { // Printable ASCII
input.splice(cursorPos, 0, String.fromCharCode(a));
cursorPos++;
}
// Other cases: ignore
}
render();
}

View File

@@ -1,6 +1,6 @@
{
"name": "@bearmetal/pdf-tools",
"version": "1.0.7",
"version": "1.0.4",
"license": "GPL 3.0",
"tasks": {
"dev": "deno run -A --env-file=.env main.ts",