Comparing version 0.0.5 to 0.0.6
139
index.js
@@ -6,114 +6,91 @@ #!/usr/bin/env node | ||
const path = require("path"); | ||
const table = str => `╔${"═".repeat(str.length + 2)}╗\n║ ${str} ║\n╚${"═".repeat(str.length + 2)}╝`; | ||
const fileName = process.argv[2] || "untitled.txt"; | ||
const filePoss = path.resolve(process.cwd(), fileName); | ||
const dirName = path.resolve(process.cwd(), fileName); | ||
if (fs.existsSync(filePoss)) { | ||
let file = fs.existsSync(dirName) ? fs.readFileSync(dirName, "utf8").replace(/\r/i).split(/\n/) : [""]; | ||
const content = fs.readFileSync(filePoss, "utf-8"); | ||
void main(content.split(/\r\n?/)); | ||
} else { | ||
void main([""]); | ||
} | ||
readline.emitKeypressEvents(process.stdin); | ||
process.stdin.setRawMode(true); | ||
function save(content) { | ||
fs.writeFileSync(filePoss, content) | ||
} | ||
let curY = curX = 0; | ||
function main(file) { | ||
readline.emitKeypressEvents(process.stdin); | ||
process.stdin.setRawMode(true); | ||
render(); | ||
let curY = curX = 0; | ||
process.stdin.on('keypress', (ch, key) => { | ||
// console.log(key) | ||
render(); | ||
if (key.ctrl) | ||
if (key.name === "s") | ||
return fs.writeFile(dirName, file.join("\n"), () => console.log("\nSaved! Path:", dirName)) | ||
process.stdin.on('keypress', (ch, key) => { | ||
// console.log(key) | ||
else if (key.name === "c") | ||
return process.exit(0); | ||
if (key.ctrl) { | ||
if (key.name === "s") { | ||
//TODO! | ||
save(file.join("\n")) | ||
console.log("Saved!") | ||
return; | ||
} else if (key.name === "c") | ||
else return; | ||
return process.exit(0); | ||
if (!file[curY + 1]) file[curY + 1] = ""; | ||
else return; | ||
switch (key?.name) { | ||
} | ||
// Arrow keys: | ||
case "up": if (curY) curY--; curX = file[curY].length; render(); break; | ||
if (!file[curY + 1]) file[curY + 1] = ""; | ||
case "down": curY++; curX = file[curY].length; render(); break; | ||
// if (file[curY]===file[file.length-1]&&!file[curY]) | ||
case "left": if (curX) curX--; else if (curY) curY--; render(); break; | ||
switch (key?.name) { | ||
case "right": if (!file[curY][curX]) file[curY] += " "; curX++; render(); break; | ||
// Arrow keys: | ||
case "up": if (curY) curY--; curX = file[curY].length; render(); break; | ||
// Enter Key: | ||
case "return": | ||
file.splice(curY + 1, 0, file[curY].slice(curX)); | ||
file[curY] = file[curY].slice(0, curX); | ||
case "down": curY++; curX = file[curY].length; render(); break; | ||
curX = file[curY + 1].length; curY++; render(); break; | ||
case "left": if (curX) curX--; render(); break; | ||
// Delete Key: | ||
case "delete": | ||
if (file[curY]) file[curY] = file[curY].substring(0, curX) + file[curY].substring(curX + 1); | ||
else file.splice(curY, 1) | ||
render(); break; | ||
case "right": curX++; render(); break; | ||
// Backspace Key: | ||
case "backspace": | ||
if (curX) { | ||
file[curY] = file[curY].substring(0, curX - 1) + file[curY].substring(curX); | ||
curX--; | ||
// Enter Key: | ||
case "return": | ||
file.splice(curY + 1, 0, file[curY].slice(curX)); | ||
file[curY] = file[curY].slice(0, curX); | ||
} | ||
else if (curY) { | ||
file = file.slice(0, -1); | ||
curY--; | ||
curX = file[curY + 1].length; curY++; render(); break; | ||
} | ||
// Delete Key: | ||
case "delete": | ||
if (file[curY]) file[curY] = file[curY].substring(0, curX) + file[curY].substring(curX + 1); | ||
else file.splice(curY, 1) | ||
render(); break; | ||
render(); break; | ||
// Backspace Key: | ||
case "backspace": | ||
if (curX) { | ||
file[curY] = file[curY].substring(0, curX - 1) + file[curY].substring(curX); | ||
default: | ||
if (!ch) break; | ||
file[curY] = file[curY].substring(0, curX) + ch + file[curY].substring(curX); | ||
curX-- | ||
curX++; render(); break; | ||
} | ||
else if (curY) { | ||
file = file.slice(0, -1) | ||
curY--; | ||
} | ||
}) | ||
} | ||
function render() { | ||
console.clear(); | ||
render(); break; | ||
const lines = file.map((l, i) => i + " │ " + l) | ||
default: | ||
if (!ch) break; | ||
file[curY] = file[curY].substring(0, curX) + ch + file[curY].substring(curX); | ||
console.log(`${table(`akf-code - ${fileName} | ${curY}:${curX}`)}\n${[ | ||
...lines.slice(0, curY + 1), | ||
"──┤ " + " ".repeat(curX) + "^", | ||
...lines.slice(curY + 1) | ||
].join("\n")}\nExit: CTRL + C | Save: CTRL + S`); | ||
curX++; render(); break; | ||
} | ||
} | ||
}) | ||
function render() { | ||
console.clear(); | ||
const write = [ | ||
...file.slice(0, curY + 1), | ||
" ".repeat(curX) + "^", | ||
...file.slice(curY + 1) | ||
]; | ||
console.log( | ||
`akf-code - ${fileName} | ||
--------------------------------- | ||
${write.join("\n")} | ||
--------------------------------- | ||
Current pos: ${curY}:${curX} | ||
Exit: CTRL + C | Save: CTRL + S`); | ||
} | ||
} |
{ | ||
"name": "akf-code", | ||
"version": "0.0.5", | ||
"version": "0.0.6", | ||
"description": "A CLI code editor", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
# akf-code | ||
A editor to write code in your terminal! | ||
A editor to write code or etc in your terminal! | ||
# Usage/install | ||
- `npm i akf-code -g` or `npx akf-code` | ||
- `acode` | ||
- `npm i akf-code -g && acode <filename>` or `npx akf-code <filename>` | ||
## Keys | ||
- `Ctrl+C`: To exit | ||
- `Ctrl+C`: To exit! | ||
- `Ctrl+S`: To save! | ||
## Features | ||
- Pointer. | ||
- Current poss. | ||
- Zero-Dependencies | ||
- Like indexing, it starts at line 0 | ||
- Save && read from file! | ||
- Pointer | ||
- Current poss | ||
- Cursorline | ||
## TO-DOS | ||
- [ ] Add readFile && writeFile | ||
- [x] Add readFile && writeFile | ||
- [x] Better pointer | ||
- [x] Down arrow and enter is not same! | ||
- [x] Delete key! | ||
## IMAGE: | ||
 | ||
- [x] Cursorline | ||
## GIF: | ||
 |
28
3767
63