Compare commits

...

2 Commits

Author SHA1 Message Date
cca6de1877 Merge pull request 'fix: pasting in prompt no worky' (#12) 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 3m54s
Create Version Tag / publish-release (push) Successful in 36s
Reviewed-on: #12
2025-05-21 11:13:06 -07:00
b43a837c6a fix: pasting in prompt no worky 2025-05-21 12:12:37 -06:00
2 changed files with 43 additions and 25 deletions

View File

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

View File

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