BetterReader.read_with_cancel() returns both the read promise, and a function that can be used to cancel the read. A cancelled read is placed back into the BetterReader's chunk buffer, to be consumed by the next user that requests a read. This is used by Coupler so that when the coupler is closed, its pending read() call does not consume the next batch of input. This fixes the problem we were having with child applications consuming one chunk of stdin after they are closed, meaning the first key you press after an app exits would disappear. Co-authored-by: KernelDeimos <eric.alex.dube@gmail.com>
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
