Constructs an instance of arsd.terminal.LineGetter appropriate for use in a repl for this shell.
Sets up signal handling and progress groups to become an interactive shell.
This function in pure in all but formal annotation; it does not interact with the outside world.
A shell component - which is likely an argument, but that is a semantic distinction we can't make until parsing - may be made up of several lexemes. Think foo'bar'. This will extract them from the given array up to and including the next unquoted space or newline char.
Parses a set of lexemes into set of command objects.
Holds some context needed for shell expansions.
Represents one component of a shell command line as a precursor to parsing.
If you want to use this to understand a command, also use it to execute that command so you get what you expect.
Some notes about this shell syntax:
bash does it with \u and stuff but i kinda think using $USER and such might make more sense.
Added October 18, 2025
Support functions to build a custom unix-style shell.