UNPKG

isoterm

Version:

A Terminal With Precisely Configurable Fonts Using CSS Unicode Ranges

44 lines 7.05 kB
{ "name": "isoterm", "version": "0.0.0", "description": "A Terminal With Precisely Configurable Fonts Using CSS Unicode Ranges", "main": "./.", "repository": { "type": "git", "url": "git+https://github.com/loveencounterflow/xxterm.git" }, "keywords": [ "xterm", "terminal", "webterm", "unicode", "css", "ranges" ], "author": "", "license": "MIT", "bugs": { "url": "https://github.com/loveencounterflow/xxterm/issues" }, "homepage": "https://github.com/loveencounterflow/xxterm#readme", "dependencies": { "@vamidicreations/screenres": "^2.0.3", "cnd": "^9.2.2", "datom": "10.0.1", "express": ">=5.0.0-beta.1", "guy": "4.1.2", "intertype": "^7.7.0", "mixa": "0.2.0", "mudom": "^0.2.3", "nodexh": "^2.1.0", "port-used": "^2.0.8", "randexp": "^0.5.3", "ws": "^8.5.0" }, "scripts": { "build": "coffee --map -o lib -c src", "test": "echo see 'https://github.com/loveencounterflow/hengist/tree/master/dev/xxterm' (planned)", "preinstall": "./git-clone-xtermjs" }, "readme": "\n\n\n<img src='app/static/logo.png'>\n\n\n# XXTerm\n\n\n\n\n<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*\n\n- [A Terminal With Precisely Configurable Fonts Using CSS Unicode Ranges](#a-terminal-with-precisely-configurable-fonts-using-css-unicode-ranges)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Live Replay / Echo](#live-replay--echo)\n- [To Do](#to-do)\n- [Is Done](#is-done)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n## A Terminal With Precisely Configurable Fonts Using CSS Unicode Ranges\n\n* Why XXTerm\n* Why CSS Unicode Ranges\n\n## Installation\n\nClone this repo into a convenient location, then run `pnpm install` (or `npm install` if you prefer).\n\n\n```bash\npnpm add -g yarn # or `npm install -g yarn`\ngit clone https://github.com/loveencounterflow/xxterm\ncd /path/to/xxterm\npnpm install\n```\n\nThe `clone` command will take a little while because XXTerm includes some fairly large CJK fonts (more or\nless the reason I started this is to have good coverage of CJK codepoints). The `install` command will also\ntake some time because it calls `git-clone-xtermjs`, a script that clones and prepares\n[xterm.js](https://github.com/xtermjs/xterm.js).\n\n> **Note** `xterm` will want to run tests using `yarn` which should be installed globally. The tests will\n> fail **for seemingly unrelated reasons** unless `yarn` is found, and because of this failure,\n> transpilation of modules will likewise not complete, meaning the `xterm` subdirectory is left in an\n> unusable state. What's more, the tests will also download `playwright` which is needed for these very\n> tests only (not for displaying a terminal in the browser as such), incurring a sizable additional\n> dependency just because `xterm` insists on running tests when being installed (as such not a bad idea, but\n> still). I hope that in the future, we can resolve these inconveniences and avoid unnecessary downloads,\n> but for the time being I do not see precisely how to accomplish that.\n\n\nChromium is currently hardcoded to be used for the web terminal; on Debian-ish system, install it with\n\n```bash\nsudo apt install -y chromium-browser\n```\n\n\n## Usage\n\nWhen installation has completed, start a browser window displaying a terminal by executing\n\n```bash\n./xxterm\n```\n\nThis will call `chromium --app=http://localhost:3000`; the browser window will show no menus and no address\nbar. In case the browser window does not show a terminal, press `ctrl+r` or use the button to reload the\nwindow.\n\n## Live Replay / Echo\n\nAs of [commit&nbsp;#3768e37aaa0](https://github.com/loveencounterflow/xxterm/commit/3768e37aaa0486895bbe9e86d7bbccfdc42cdef8)\nthe parent process can echo everything that's going on in the web terminal, including colors, `zsh` line\ncompletions, and even `less` paging (including the ability to clear the screen) and more advanced TUI stuff\nlike `htop` just work. Not sure ATM why that would be useful but it does make for a nice demo!\n\n\n\n## To Do\n\n* **[–]** Move `xterm` code out of main folder\n* **[–]** Make digest or tag to revert to configurable?\n* **[–]** Fix startups with missing terminal element in browser window\n* **[–]** Make browser configurable (now hardcoded to `chromium`)\n* **[–]** Try to avoid the startup delay caused having to wait for webpack (by including bundled code in\n `dist` or by removing webpack altogether)\n* **[–]** Use exit handler to ensure server process gets terminated\n* **[–]** make echoing of web terminal configurable\n* **[–]** `exit` in web terminal should ternminate XXTerm (as it does in other terminal emulators)\n* **[–]** implement On-Page Script (`ops.js`) to avoid having to code insed of `index.html`\n* **[–]** can we mirror errors &c that happen in the browser console to the main process (`cli.js`)?\n* **[–]** make browser console output easier to look at from the web terminal\n* **[–]** handle race condition where a chosen port is no longer available so `server.js` fails to connect\n* **[–]** make browser size configurable\n* **[–]** start server in `cli` process, cutting down from 3 to 2 processes per terminal\n* **[–]** add option whether to start in user mode or in app (kiosk) mode (showing vs hiding user chrome\n like address bar)\n* **[–]** find out how to implement custom key shortcuts (key bindings) when terminal DOM element has focus;\n currently this is blocked by `xterm/src/browser/Terminal.ts:446` &al.\n* **[–]** infinite zoom plane / utopia planitia?\n* **[–]** clarify why in `app/index.html` a useless literal `<script>` tag is needed even when the `defer`\n attribute on the `<script src=\"dist/client-bundle.js\"></script>` tag has been removed—this looks like a\n very strange and unexpected interaction\n\n## Is Done\n\n* **[+]** Avoid connection error on startup (by using a splash screen?)\n* **[+]** Implement useful action (re-clone, update, cancel) to `git-clone-xtermjs` in case folder `xterm`\n should already exist (NB `git reset --hard` can be redone without changing anything)\n* **[+]** Establish websocket communication between server and browser\n* **[+]** Icon (sorta)\n* **[+]** remove dependency on https://cdnjs.cloudflare.com/ajax/libs/es6-promise/4.1.1/es6-promise.auto.min.js\n* **[+]** remove dependency on https://cdnjs.cloudflare.com/ajax/libs/fetch/1.0.0/fetch.min.js\n* **[+]** each `xxterm` instance should look for its own free port, fail with message in case it doesn't\n succeed in the configured range, with configured end digits\n* **[+]** implement opening browser in fullscreen\n* **[+]** implement technique to add key shortcut that overrides browser defaults such as `ctrl+l`, `ctrl+k`\n\n\n\n\n" }