summaryrefslogtreecommitdiff
path: root/Shell
AgeCommit message (Collapse)Author
2019-11-01Shell: Exit the shell on (interactive) EOF with empty bufferAndreas Kling
In other words, if the user presses EOF (normally Ctrl+D), we now print out "<EOF>" and exit the shell without error. Fixes #701.
2019-10-30Shell: Properly set and restore termios settings.Drew Stratford
Previously, we did not properly restore termios settings after running built-in commands. This has been fixed by ensuring that we only change the termios settings when we are forking a child process.
2019-10-20Shell: Update termios settings to match line discipline.Drew Stratford
Shell.cpp uses its own line discipline which handles echoing and line editing. Because of this we disable ICANON and ECHO so that we don't get duplicate characters or weird line editing errors. We also revert these settings just before running a command. This is so that commands may run with proper line editing and echoing.
2019-09-30ByteBuffer: Remove pointer() in favor of data()Andreas Kling
We had two ways to get the data inside a ByteBuffer. That was silly.
2019-09-21LibCore: Convert CFile to ObjectPtrAndreas Kling
2019-09-16Shell: Add a "time" builtin to show how long a command took to runAndreas Kling
2019-09-15Shell: Tab completion for programs in PATHwillmcpherson2
This patch adds a function to LineEditor that takes the current shell buffer, searches PATH for the first program that starts with that buffer and then compares that to any other programs starting with the buffer to remove any mismatching characters off the end. The result is appended to the buffer. This may be faster with a data structure but that seems overkill.
2019-09-15Shell: Fixed `pushd` and `popd`Jesse Buhagiar
Fixed a few issues with both `pushd` and `popd`. There was a few typos etcetera causing it to behave errantly in certain situations.
2019-09-15Shell: Added `pushd`, `popd` and `dirs` builtinsJesse Buhagiar
Added a few builtin functions to the shell to make navigating a bit easier in the terminal. `pushd` allows a user to "push" the current directory to the directory stack, and then `cd` to the new directory. `popd` allows the used to take the directory on the top of the stack off before `cd`'ing to it. `dirs` gives the state of the current directory stack. This is only a partial implementation of the `bash` version (gnu.org/software/bash/manual/html_node/Directory-Stack-Builtins.html) , and doesn't include any of the +N or -N commands as of yet.
2019-09-14Shell: Support extremely naive shell script executionAndreas Kling
This patch allows passing a script as an argument to the Shell program. We will read the specified line by line and pass them through the Shell command interpreter. This is not very powerful, but it's a start :^)
2019-09-14Shell: Add POSIX-compliant character escapingAaron Malpas
POSIX.1-2017, Shells & Utilities, section 2.2
2019-09-13Shell: fix crash when using `cd -` and OLDPWD is nullTim Morgan
2019-09-13Shell: Remember previous working dirTim Morgan
...and allow switching back to it with `cd -` Partially addresses #397
2019-09-10Shell: Add support for special parameter that returns PIDMinusGix
2019-09-10Shell: Add support for special parameter that expands to return-code of last ↵MinusGix
program executed
2019-09-10Shell: Add support for getting environment variable valuesMinusGix
2019-09-06AK: Rename <AK/AKString.h> to <AK/String.h>Andreas Kling
This was a workaround to be able to build on case-insensitive file systems where it might get confused about <string.h> vs <String.h>. Let's just not support building that way, so String.h can have an objectively nicer name. :^)
2019-09-04Shell: Okay I keep messing up this history file code.. actually fix it!Andreas Kling
It's not safe to return a CFile by-value. CFile is a CObjects and they are honestly not very good at being values..
2019-09-04Shell: Oops, don't exit() when ~/.history does not existAndreas Kling
2019-09-04Shell: Don't open ~/.history for writing on startupAndreas Kling
When we only want to read the file, we should open it for reading.
2019-09-02Shell: Added support for ctr-e/a.marprok
By pressing ctr-e/a the cursor goes to the end/beginning of the current line.
2019-09-01Shell: Support semicolons for separating commandsConrad Pankoff
2019-08-18Shell: Support forward deleteConrad Pankoff
2019-07-25Shell: Put failed command exit statuses in the debug output instead.Andreas Kling
It was kinda unpleasant to always see "So-and-so exited with status 123."
2019-07-25Shell: Simply print "cmd: Command not found." for ENOENT on execution.Andreas Kling
This looks a little nicer than 'execvp(cmd): No such file or directory'
2019-07-19Shell: Implement support for terminal clearing with ^L.Andreas Kling
Make LineEditor::get_line() responsible for printing the prompt. That way we can re-prompt after clearing the screen on ^L. This makes the Serenity Terminal feel a little bit more like home :^)
2019-07-14Kernel: Add support for the WSTOPPED flag to the waitpid() syscall.Andreas Kling
This makes waitpid() return when a child process is stopped via a signal. Use this in Shell to catch stopped children and return control to the command line. :^) Fixes #298.
2019-07-09Shell: Remove some unused code.Andreas Kling
2019-07-08Shell: Handle SIGWINCH to get a nice behavior when resizing.Andreas Kling
When resizing the terminal, we now clear the entire current line and reset the shell's LineEditor input state. This makes it look and feel kinda the same as xterm. Fixes #286.
2019-07-08StringView: Rename characters() to characters_without_null_termination().Andreas Kling
This should make you think twice before trying to use the const char* from a StringView as if it's a null-terminated string.
2019-06-30Meta: Removed all gitignore in the source tree only keeping the root oneVAN BOSSUYT Nicolas
2019-06-23add ~/.history file for Shell, stores entire command log and loads recent ↵CallumAttryde
commands into history buffer
2019-06-14Shell: Implement more advanced globbing.Sergey Bugaev
A glob has to be resolved against the directory corresponding to the part of the path it is found in, not the current directory. For example, in /usr/i*/AK/, the glob has to be resolved inside /usr. Moreover, an argument can contain more than one glob, such as /u*/*/?, in which case they have to be resolved recursively. In case a glob matches nothing, the argument should be used as is.
2019-06-07Meta: Tweak .clang-format to not wrap braces after enums.Andreas Kling
2019-06-07Shell: Run clang-format on everything.Andreas Kling
2019-06-07Kernel: Rename FileDescriptor to FileDescription.Andreas Kling
After reading a bunch of POSIX specs, I've learned that a file descriptor is the number that refers to a file description, not the description itself. So this patch renames FileDescriptor to FileDescription, and Process now has FileDescription* file_description(int fd).
2019-06-06Shell: Print the name of each process whose exit status we're reporting.Andreas Kling
2019-06-06Shell: Check the exit status of all spawned child processes.Andreas Kling
2019-06-04Shell: Separate fd rewirings from redirections.Andreas Kling
This was unnecessarily confusing. When we build up a chain of commands connected by pipes, we now store the file descriptors of each end of these pipes as rewirings in a vector. The rewirings are then put into effect by calls to dup2().
2019-05-31Shell: Fix an error message incorrectly complaining about lstat() failure.Andreas Kling
The syscall used is actually stat(), so let's be correct about that.
2019-05-30LibC: Move wait-related stuff to <sys/wait.h>. #POSIXAndreas Kling
2019-05-30LibC: Add setenv().Andreas Kling
If I'm understanding the standard C library correctly, setenv() copies while putenv() does not. That's really confusing and putenv() basically sucks. To know which environment variables to free on replacement and which ones to leave alone, we keep track of the ones malloced by setenv in a side table. This patch also moves Shell to using setenv() instead of putenv(). Fixes #29.
2019-05-28Add clang-format fileRobin Burchell
Also run it across the whole tree to get everything using the One True Style. We don't yet run this in an automated fashion as it's a little slow, but there is a snippet to do so in makeall.sh.
2019-05-28Shell: Allow * and ? wildcard expansion in argumentsRobin Burchell
Should also presumably allow for escaping and such, but this is a start. Fixes #112.
2019-05-26Shell: A '>' redirection target should be truncated.Andreas Kling
2019-05-26Shell: When a command is terminated by a signal, print signal description.Andreas Kling
Previously we were only printing the signal number (except for SIGINT.)
2019-05-26Shell: Add append operator (>>)Robin Burchell
Fixes #93.
2019-05-16LibC/Shell: Add unsetenv(), and unset builtin calling it in Shell.Robin Burchell
2019-05-16LibC: Change putenv (and getenv) to not copy, but directly return the ↵Robin Burchell
environ values. This is in keeping with how putenv should function. It does mean that the shell's export command now leaks, but that's not a difficult fix. Contributes to #29.
2019-05-15Kernel: Add a beep() syscall that beeps the PC speaker.Andreas Kling
Hook this up in Terminal so that the '\a' character generates a beep. Finally emit an '\a' character in the shell line editing code when backspacing at the start of the line.