A Terminal With Precisely Configurable Fonts Using CSS Unicode Ranges
npm install isoterm
Table of Contents generated with DocToc
- A Terminal With Precisely Configurable Fonts Using CSS Unicode Ranges
- Installation
- Usage
- Live Replay / Echo
- To Do
- Is Done
* Why XXTerm
* Why CSS Unicode Ranges
Clone this repo into a convenient location, then run pnpm install (or npm install if you prefer).
``bashnpm install -g yarn
pnpm add -g yarn # or `
git clone https://github.com/loveencounterflow/xxterm
cd /path/to/xxterm
pnpm install
The clone command will take a little while because XXTerm includes some fairly large CJK fonts (more orinstall
less the reason I started this is to have good coverage of CJK codepoints). The command will alsogit-clone-xtermjs
take some time because it calls , a script that clones and prepares
xterm.js.
> Note xterm will want to run tests using yarn which should be installed globally. The tests willyarn
> fail for seemingly unrelated reasons unless is found, and because of this failure,xterm
> transpilation of modules will likewise not complete, meaning the subdirectory is left in anplaywright
> unusable state. What's more, the tests will also download which is needed for these veryxterm
> tests only (not for displaying a terminal in the browser as such), incurring a sizable additional
> dependency just because insists on running tests when being installed (as such not a bad idea, but
> still). I hope that in the future, we can resolve these inconveniences and avoid unnecessary downloads,
> but for the time being I do not see precisely how to accomplish that.
Chromium is currently hardcoded to be used for the web terminal; on Debian-ish system, install it with
`bash`
sudo apt install -y chromium-browser
When installation has completed, start a browser window displaying a terminal by executing
`bash`
./xxterm
This will call chromium --app=http://localhost:3000; the browser window will show no menus and no addressctrl+r
bar. In case the browser window does not show a terminal, press or use the button to reload the
window.
As of commit #3768e37aaa0
the parent process can echo everything that's going on in the web terminal, including colors, zsh lineless
completions, and even paging (including the ability to clear the screen) and more advanced TUI stuffhtop
like just work. Not sure ATM why that would be useful but it does make for a nice demo!
* [–] Move xterm code out of main folderchromium
* [–] Make digest or tag to revert to configurable?
* [–] Fix startups with missing terminal element in browser window
* [–] Make browser configurable (now hardcoded to )dist
* [–] Try to avoid the startup delay caused having to wait for webpack (by including bundled code in
or by removing webpack altogether)exit
* [–] Use exit handler to ensure server process gets terminated
* [–] make echoing of web terminal configurable
* [–] in web terminal should ternminate XXTerm (as it does in other terminal emulators)ops.js
* [–] implement On-Page Script () to avoid having to code insed of index.htmlcli.js
* [–] can we mirror errors &c that happen in the browser console to the main process ()?server.js
* [–] make browser console output easier to look at from the web terminal
* [–] handle race condition where a chosen port is no longer available so fails to connectcli
* [–] make browser size configurable
* [–] start server in process, cutting down from 3 to 2 processes per terminalxterm/src/browser/Terminal.ts:446
* [–] add option whether to start in user mode or in app (kiosk) mode (showing vs hiding user chrome
like address bar)
* [–] find out how to implement custom key shortcuts (key bindings) when terminal DOM element has focus;
currently this is blocked by &al.app/index.html
* [–] infinite zoom plane / utopia planitia?
* [–] clarify why in a useless literal tag has been removed—this looks like a
very strange and unexpected interaction
* [+] Avoid connection error on startup (by using a splash screen?)
* [+] Implement useful action (re-clone, update, cancel) to git-clone-xtermjs in case folder xtermgit reset --hard
should already exist (NB can be redone without changing anything)xxterm
* [+] Establish websocket communication between server and browser
* [+] Icon (sorta)
* [+] remove dependency on https://cdnjs.cloudflare.com/ajax/libs/es6-promise/4.1.1/es6-promise.auto.min.js
* [+] remove dependency on https://cdnjs.cloudflare.com/ajax/libs/fetch/1.0.0/fetch.min.js
* [+] each instance should look for its own free port, fail with message in case it doesn'tctrl+l
succeed in the configured range, with configured end digits
* [+] implement opening browser in fullscreen
* [+] implement technique to add key shortcut that overrides browser defaults such as , ctrl+k`