This is ported over from an old forgotten branch I'd deleted, then
thankfully managed to dig up again. 😅
Instead of making GroupCommand contain child commands, use a flat array
for commands and implement groups as GroupStartCommand and
GroupEndCommand. This makes it much simpler to iterate the commands
list in order to jump to labels.
Then implement those labels and the commands that use them: b, t, and T.
Also add the s SubstituteCommand, and combine the code for the q and Q
commands.
Phoenix
Puter's pure-javascript shell
phoenix is a pure-javascript shell built for puter.com.
Following the spirit of open-source initiatives we've seen like
SerenityOS,
we've built much of the shell's functionality from scratch.
Some interesting portions of this shell include:
- A shell parser which produces a Concrete-Syntax-Tree
- Pipeline constructs built on top of the Streams API
- Platform support for Puter
The shell is a work in progress. The following improvements are considered in-scope:
- Anything specified in POSIX.1-2017 Chapter 2
- UX improvements over traditional shells
examples include: readline syntax highlighting, hex view for binary streams
- Platform support, so
phoenixcan run in more environments
Running Phoenix
In a Browser
You can use the terminal on Puter, including self-hosted installations.
Running in Node
Under node.js Phoenix acts as a shell for your operating system.
This is a work-in-progress and lots of things are not working
yet. If you'd like to try it out you can run src/main_cli.js.
Check this issue
for updated information on our progress.
Testing
You can find our tests in the test/ directory. Testing is done with mocha. Make sure it's installed, then run:
npm test
What's on the Roadmap?
We're looking to continue improving the shell and broaden its usefulness. Here are a few ideas we have for the future:
- local machine platform support
See this issue
- further support for the POSIX Command Language
Check our list of missing features
