Andreas Kling
b8440b12b7
Shell: Store jobs as NonnullRefPtr<Job>
2020-08-06 14:09:13 +02:00
Andreas Kling
5bce0193de
Shell: Make Job constructors private and use a create() helper
...
Also store PGIDs as pid_t since that's what they are.
2020-08-06 13:48:45 +02:00
Andreas Kling
bf2cd9374c
Shell: Make run_command() return a NonnullRefPtrVector<Job>
...
This never returns null Job pointers.
2020-08-06 13:44:30 +02:00
AnotherTest
ff01cfa08a
Shell: Mark suspended children as such when receiving a SIGCHLD
2020-08-06 10:35:22 +02:00
AnotherTest
7b15c85ff5
Shell: Do not assume that stdin/stdout is a TTY
...
This closes #2989 .
2020-08-05 17:30:31 +02:00
AnotherTest
771751258e
Shell: Give the TTY to the foreground process
...
This fixes the bug with the shell not waiting for any foreground process
that attempts to read from the terminal in the Lagom build.
2020-08-04 21:22:44 +02:00
Andreas Kling
3cb8ae873c
Shell: Use NonnullRefPtr to simplify some things in the parser/AST
2020-08-04 18:17:16 +02:00
AnotherTest
1d08cab9ab
Shell: Correct FdRedirection inheriting from two RefCounted bases
...
Also add missing calls to `adopt()`.
2020-08-04 13:40:58 +02:00
AnotherTest
12af65c1c9
Shell: Add support for ARGV (and $*, $#)
...
This patchset also adds the 'shift' builtin, as well as the usual tests.
closes #2948 .
2020-08-04 13:40:58 +02:00
Mathieu PATUREL
0622b60fbd
Shell: factor out updating the path cache into a function.
2020-08-04 10:51:16 +02:00
Mathieu PATUREL
f6d4c4f02c
Shell: update cached_path when adding aliases
...
This has the nice side effect of fixing alias completion, because
cached_path is the source of truth for the completion system, and it was
only refreshed (with shell::cache_path()) in the shell's constructor,
before the rc files where loaded (ie no aliases)
This also means that shell::is_runnable can now rely on the cache, and
doesn't have to check the aliases itself.
2020-08-04 10:51:16 +02:00
Mathieu PATUREL
2b4b9d212e
Shell: highlight runnable commands
...
And display in red the command which will result in something like "no
command, or is directory" (inspired by the fish shell).
2020-08-04 10:51:16 +02:00
AnotherTest
07ea2b672b
Shell: Tweak tests to use 'echo -n' when newlines are significant
2020-07-30 18:47:41 +02:00
AnotherTest
3b3e90714f
Shell: Add tests for '&&' and '||' parsing and evaluation
2020-07-30 18:47:41 +02:00
AnotherTest
c4888f4b5f
Shell: Fix parse mistake in '&&' not being recursive
2020-07-30 18:47:41 +02:00
AnotherTest
4be2cb895c
Shell: Do not assume that wstatus is valid after wait() returns 0
...
According to the linux waitid manpage, the value of wstatus is
unspecified if wait() returns 0, so we should not assume that any
value it holds is correct (including the exit code).
This is only applicable to the Lagom build.
2020-07-30 18:47:41 +02:00
AnotherTest
58308748cb
Shell: Ignore leading semicolons
...
This makes things like `foo&; bar` behave as expected.
Such behaviour is actually closer to the grammar defined in Parser.h
anyway :P
2020-07-27 12:10:29 +02:00
asynts
707d92db61
Refactor: Change the AK::binary_search signature to use AK::Span.
2020-07-26 16:49:06 +02:00
Ben Wiederhake
782db88e82
Shell: Don't crash when autocompleting a non-bare word
...
For example, type 'Hello?' without the quotation marks but with the
question mark, and press TAB.
Previously, this would crash the Shell. Now, it merely refuses
to make any suggestions.
We could do better, but that is too hard for now.
2020-07-25 19:11:10 +02:00
AnotherTest
8e364b9780
Shell: Mark ForLoop as would_execute
...
This fixes #2825 .
2020-07-17 23:18:15 +02:00
AnotherTest
2f731150a2
Shell: Add a test for loops
2020-07-16 16:01:10 +02:00
AnotherTest
b6066faa1f
Shell: Add a 'for' loop
...
Closes #2760 .
This commit adds a 'for' loop, and tweaks the syntax slightly to make &&
bind more tightly than || (allowing for `expr && if_ok || if_bad`) :^)
2020-07-16 16:01:10 +02:00
AnotherTest
95fc7dd03a
Shell: Parse lists serially, and flatten them only when needed
...
This allows `((1 2 3) (4 5 6))` to remain nested until we explicitly
flatten it out.
2020-07-16 16:01:10 +02:00
Peter Elliott
9c1da8fca1
Shell: Remove '[' and ']' as special shell characters
...
This makes the test utility work, when invoked as '['
2020-07-16 16:00:51 +02:00
AnotherTest
cd8495f1d4
Shell: Explicitly declare 'environ' to make the macOS Lagom build happy
2020-07-15 00:09:01 +02:00
AnotherTest
dc62371439
Shell: Avoid waiting for jobs that were *just* unblocked
...
This fixes the issue with C-z not suspending the job on the first try.
...and further signal issues when the suspended job is contiued.
2020-07-13 19:48:45 +02:00
AnotherTest
151e4d41ed
Shell: Put children in their own process groups and fix job control
...
This commit fixes job control by putting children in their own process
group, and proxying TTY signals to active jobs.
This also cleans up the code around builtin_disown a bit to use
the newer job interfaces.
2020-07-13 15:29:16 +02:00
AnotherTest
7170df7dd8
Shell: Resolve aliases in builtin_time
2020-07-13 15:12:28 +02:00
AnotherTest
b0ce8d725a
Shell: Move out run_commands and expand_aliases to be Shell member fns
...
This makes running commands from outside the AST chain easier.
2020-07-13 15:12:28 +02:00
AnotherTest
8d71eb9a6c
Shell: Recursively resolve aliases
2020-07-12 17:45:18 +02:00
Tom
5d9ea2c787
Shell: Pledge sigaction
...
The shell is wiring up signal handlers, and when they get torn
down by Core::EventLoop, they are reset, which requires sigaction.
2020-07-09 21:58:07 +02:00
Tom
6dfd503518
Shell: Handle signals asynchronously
...
Fixes #2717
2020-07-09 21:58:07 +02:00
AnotherTest
173effc88d
Shell: Suggest aliases when completing program names :^)
...
Closes #2732
2020-07-07 23:11:01 +02:00
AnotherTest
b5e04cb070
Shell: Skip creating a Join node when nothing was parsed
...
This fixes a crash when Shell tries to highlight `|`.
2020-07-07 14:52:53 +02:00
Andreas Kling
1bc6bb0421
Shell: Run both /etc/shellrc and ~/.shellrc on startup
...
The global script runs before the local (per-user) one.
2020-07-07 11:35:22 +02:00
AnotherTest
5cdb0ef2e5
Shell: Keep the TTY on the same pgroup to get tty signals
...
This allows the shell to be notified about SIGWINCH even when a child
process is running in the foreground.
2020-07-06 22:39:32 +02:00
AnotherTest
dec27e5e6f
Shell: Handle the case where the child we're waiting for doesn't exist
...
Normally, this should not happen, as the child should stay around until
we do a waitid on it.
2020-07-06 17:06:57 +02:00
AnotherTest
f9d3055691
Shell: Do not treat the ending newline as part of a comment
...
This allows the parser to finally parse the entire source into a single
AST.
As a result of allowing comments inside sequences, Sequence is also
marked as would_execute if its left or right node would.
2020-07-06 13:25:42 +02:00
AnotherTest
6d17fe38a4
Shell: Do not treat the absence of an init script as an error
2020-07-06 13:25:42 +02:00
AnotherTest
ddbdd0e686
Shell: Do not remove more than 2 dashes from the option being completed
...
This makes '------inl' a completion request for an option named
'----inl' instead of 'inl'.
2020-07-05 16:11:49 +02:00
AnotherTest
3a072332f4
Shell: Add some tests
2020-07-05 15:43:14 +02:00
AnotherTest
ff857cd358
Shell: Initial support for 'option' completions
...
Take one small step towards #2357 .
Handle completing barewords starting with '-' by piping the requests to
the Shell::complete_option(program_name, option) :^)
Also implements completion for a single builtin (setopt) until we figure out how
to handle #2357 .
2020-07-05 15:43:14 +02:00
AnotherTest
b8d1edb2a2
Shell: Add a 'setopt' builtin
...
This builtin sets (and unsets) boolean flags that alter the behaviour of
the shell.
The only flags added are
- inline_exec_keep_empty_segments: Keep empty segments in the result of
splitting $(...) by $IFS
- verbose: Announce each command before executing it
It should be noted that the (rather extreme) verbosity of the names is
intentional, and will hopefully be alleviated by the next commit :^)
2020-07-05 15:43:14 +02:00
AnotherTest
d6de2b5828
Shell: Show descriptions about syntax errors
...
The description contains an error message and where in the source the
error happened.
2020-07-05 15:43:14 +02:00
AnotherTest
034be8e74c
Shell: Allow a command sequence to be delimited by newlines
2020-07-05 15:43:14 +02:00
AnotherTest
639c1a1737
Shell: Build as part of Lagom as well
...
Bringing the Serenity Shell to your very own host system :^)
2020-07-05 15:43:14 +02:00
AnotherTest
d2bdbc3e77
Shell: Mark And and Or nodes as execute nodes
2020-07-05 15:43:14 +02:00
AnotherTest
3a37e8c56f
Shell: Provide completions to Tilde and its Juxtaposition.
...
This commit also removes the ExecutionInputType and directly uses
RefPtr<Shell> instead, since nothing else is needed for execution
purposes, and also makes the shell refuse to evaluate commands with
any sort of syntax error.
2020-07-05 15:43:14 +02:00
AnotherTest
c5d0aa9a44
Shell: Allow commands in variables, and properly substitute them on use
...
This allows the below interaction to work:
```
$ silence=(2>&1 >/dev/null)
$ do_noisy_thing with these args $silence
<nothing here lol>
```
2020-07-05 15:43:14 +02:00
AnotherTest
42304d7bf1
Shell: Parse a pipe sequence inside $(...)
2020-07-05 15:43:14 +02:00