From 254385faeea2ff80affa9d910a88ee8af40296f8 Mon Sep 17 00:00:00 2001 From: b1ek Date: Thu, 16 Mar 2023 14:07:49 +1000 Subject: [PATCH] ls support for files --- public/static/ui/resume.css | 4 +- react/resume/package.json | 1 + react/resume/src/emulator/commands/index.js | 6 ++- react/resume/src/emulator/commands/ls.js | 23 +++++++---- react/resume/src/emulator/commands/skills.js | 17 ++++++++ react/resume/src/emulator/files.js | 12 ++++++ react/resume/src/emulator/fs.js | 8 +++- react/resume/src/resume.css | 43 ++++++++------------ 8 files changed, 75 insertions(+), 39 deletions(-) create mode 100644 react/resume/src/emulator/files.js diff --git a/public/static/ui/resume.css b/public/static/ui/resume.css index 14b3595..1264cd1 100644 --- a/public/static/ui/resume.css +++ b/public/static/ui/resume.css @@ -1,7 +1,7 @@ div#resume_js_app { background: #212121; - width:800px; - height:600px; + width:1000px; + height:800px; border: 1px solid #e1e1e1; border-radius: 6px; font-family: monospace; diff --git a/react/resume/package.json b/react/resume/package.json index b2c6838..d8d8fc6 100644 --- a/react/resume/package.json +++ b/react/resume/package.json @@ -23,6 +23,7 @@ "memfs": "^3.4.13", "react": "^18.2.0", "react-dom": "^18.2.0", + "unionfs": "^4.4.0", "xterm": "^5.1.0", "xterm-for-react": "^1.0.4", "xterm-js-shell": "^1.1.3" diff --git a/react/resume/src/emulator/commands/index.js b/react/resume/src/emulator/commands/index.js index 1b2beec..c2f7349 100644 --- a/react/resume/src/emulator/commands/index.js +++ b/react/resume/src/emulator/commands/index.js @@ -4,7 +4,11 @@ let cmds = { 'cmdls': require('./cmds'), 'help': require('./cmds'), 'ls': require('./ls'), - 'skills': require('./skills') + 'skills': require('./skills'), + + + // alias l='ls -l' + 'l': (a,t) => {require('./ls')([...a, '-l'], t)}, }; module.exports = cmds; \ No newline at end of file diff --git a/react/resume/src/emulator/commands/ls.js b/react/resume/src/emulator/commands/ls.js index 1d57180..be24307 100644 --- a/react/resume/src/emulator/commands/ls.js +++ b/react/resume/src/emulator/commands/ls.js @@ -26,7 +26,7 @@ module.exports = (argv, terminal) => { // remove .* files if -a not specified if (!all) - directories = directories.filter(x => x.startsWith('.')); + directories = directories.filter(x => !x.startsWith('.')); // remove arguments directories = directories.filter(x => !x.startsWith('-')); @@ -37,24 +37,31 @@ module.exports = (argv, terminal) => { directories = [...new Set(directories)]; directories.forEach((dir, i) => { + + if (!fs.lstatSync(dir).isDirectory()) { + terminal.write(dir); + return; + } if (directories.length != 1) { terminal.writeln(dir + ':'); terminal.writeln(''); } + if (!fs.existsSync(dir)) { + terminal.writeln(`${argv[0]}: cannot access '${dir}': No such file or directory`); + return; + } let files = fs.readdirSync(dir); files.forEach((file, i) => { - - if (!fs.accessSync(file, fs.constants.X_OK)) - terminal.write('\033[1;32m'); - if (fs.accessSync(file, fs.constants.R_OK)) - terminal.write('\033[35m'); - terminal.write(file + '\033[0m '); + if (!long_format) + terminal.write(file + '\033[0m '); + else + terminal.writeln('drwx-xr-x 1 nobody nobody 4.0K Jan 1 13 01:00 ' + file); if ((i+1) % 5 == 0) terminal.writeln(''); }); - terminal.writeln(''); }) + terminal.writeln(''); } \ No newline at end of file diff --git a/react/resume/src/emulator/commands/skills.js b/react/resume/src/emulator/commands/skills.js index 9117392..ba583d3 100644 --- a/react/resume/src/emulator/commands/skills.js +++ b/react/resume/src/emulator/commands/skills.js @@ -1,4 +1,20 @@ +const fs = require('../fs'); + module.exports = (argv, terminal) => { + + if (argv.indexOf('--help') != -1) { + terminal.writeln(`Usage: ${argv[0]}\nShows my skills info`); + return; + } + + if (argv[1] != undefined) { + const file = 'skills/' + argv[1]; + if (!fs.existsSync(file)) + return; + terminal.write(fs.readFileSync(file)); + return; + } + terminal.write(` My skills @@ -10,6 +26,7 @@ Learn more: \x1b[4;32mskills web\x1b[0m \x1b[1;33m[## ] 40% Native C/C++/Rust\x1b[0m Not really my zone of work but its really fun to make something with these in spare time. +Learn more: \x1b[4;32mskills nt\x1b[0m \x1b[1;38:5:244m[ ] 0% Being cis\x1b[0m Never liked it diff --git a/react/resume/src/emulator/files.js b/react/resume/src/emulator/files.js new file mode 100644 index 0000000..38f588b --- /dev/null +++ b/react/resume/src/emulator/files.js @@ -0,0 +1,12 @@ +module.exports = { + '/skills/web': ` +My web experience +I don't really know anything about web development, +but I have some projects which are presented below: + +blek! Site: Second rewrite of my website. https://github.com/b1ek/blekSite +blek! ID: An auth server. https://github.com/b1ek/blekID +blek! Bin: A pastebin alternative. https://git.blek.codes/blek/bin +homepage.js: Third rewrite of my website. https://git.blek.codes/blek/homepage.js +` +} \ No newline at end of file diff --git a/react/resume/src/emulator/fs.js b/react/resume/src/emulator/fs.js index 963123d..740489d 100644 --- a/react/resume/src/emulator/fs.js +++ b/react/resume/src/emulator/fs.js @@ -1,4 +1,8 @@ -const { fs } = require('memfs'); +const { fs, vol } = require('memfs'); fs.writeFileSync('README.md', 'uwu'); +const { ufs } = require('unionfs'); -module.exports = fs; \ No newline at end of file +ufs.use(fs).use(vol.fromJSON(require('./files'))); +ufs.constants = fs.constants; + +module.exports = ufs; \ No newline at end of file diff --git a/react/resume/src/resume.css b/react/resume/src/resume.css index 8e44637..02ba993 100644 --- a/react/resume/src/resume.css +++ b/react/resume/src/resume.css @@ -1,52 +1,43 @@ div#resume_js_app { - width: 800px; - height: 600px; background: #212121; + width:1000px; + height:800px; border: 1px solid #e1e1e1; border-radius: 6px; - padding: 8px 2px; font-family: monospace; - transition: all .15s; - box-shadow: 0 2px 1px #303030a0; + box-shadow: 0 2px 1px #303030A0; color: #e1e1e1 !important; + padding: 8px 2px; + transition: 150ms ease; } - div#resume_js_app:hover { box-shadow: 0 2px 3px #303030; } - div#resume_js_app p.js_loading_indicator { - width: -moz-fit-content; + padding: 0; margin: 0; + position: relative; + top: 50%; left: 50%; + transform: translate(-50%, -50%); width: fit-content; text-align: center; - margin: 0; - padding: 0; - position: relative; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); } + div#resume_js_app * { color: #e1e1e1; - font-family: Source Code Pro, monospace !important; + font-family: 'Source Code Pro', monospace !important; } - div#resume_js_app a, div#resume_js_app a:visited { - text-shadow: 0 0 #24557e30; - font-weight: 500; + color: rgb(36, 85, 126) !important; text-decoration: none; - transition: all .15s; - color: #24557e !important; + font-weight: 500; + transition: 150ms ease; + text-shadow: 0 0 0px #24557e30; } - div#resume_js_app a:hover { text-shadow: 0 0 4px #24557e30; } - div#resume_js_app table * { + border:0; text-align: left; - border: 0; -} - -/*# sourceMappingURL=resume.css.map */ +} \ No newline at end of file