summaryrefslogtreecommitdiff
path: root/Shell/main.cpp
AgeCommit message (Collapse)Author
2020-05-20LibLine: Unify completion hooks and adapt its usersAnotherTest
LibLine should ultimately not care about what a "token" means in the context of its user, so force the user to split the buffer itself. This also allows the users to pick up contextual clues as well, since they have to lex the line themselves. This commit pacthes Shell and the JS repl to better handle completions, so certain wrong behaviours are now corrected as well: - JS repl can now complete "Object . getOw<tab>" - Shell can now complete "echo | ca<tab>" and paths inside strings
2020-05-17Shell: Switch to using Core::EventLoopAnotherTest
This commit refactors Shell to a Core::Object and switches its looping to Core::EventLoop.
2020-05-17Shell: Patch most of the builtins to use Core::ArgsParserAnotherTest
The remaining one is 'pushd', which seems to have relatively complex logic with regards to its arguments.
2020-05-17Shell: Add job control capabilitiesAnotherTest
This patchset adds the `jobs`, `fg` and `bg` builtins.
2020-05-16Shell: Properly handle parser syntax errorsLinus Groh
In the case of a syntax error the shell parser prints an error message to stderr and returns an empty Vector<Command> - in that case we shouldn't try to determine whether or not we can continue parsing but abort immediately - is_complete() expects that *something* was parsed successfully. Fixes #2251.
2020-05-16Shell: Use DirIterator::SkipParentAndBaseDirShannon Booth
2020-05-15Shell: Correct program stop behaviourAnotherTest
Prior to this, we would only wait for program exit; the shell should stop waiting once the program has been stopped. Fixes #2230
2020-05-15Shell: Print correct errno when execvp() failsSergey Bugaev
Amusingly enough, this was caused by yet another bug.
2020-05-13Shell: Break out of continuation when ^C is pressedAnotherTest
This fixes the little issue with Shell not allowing cancellation of commands once they were in continuation mode ``` $ ls ' $ # No matter what we do here, we cannot escape 'ls' ```
2020-05-10Shell: Hyperlink output from "pwd" and "dirs" built-ins :^)Andreas Kling
2020-05-10Shell: Support basic syntax highlightingAnotherTest
2020-05-10Shell: Parse commentsAnotherTest
2020-05-10Shell: Include some metadata in parsed tokens and ask for continuationAnotherTest
This patchset adds some metadata to Parser::parse() which allows the Shell to ask for the rest of a command, if it is not complete. A command is considered complete if it has no trailing pipe, or unterminated string.
2020-05-04Shell: Check for invalid #! in commandsAndrew Kaster
2020-04-30Shell: Provide the correct invariant length to the line editorAnotherTest
2020-04-30Shell+LibLine: Handle escaped characters correctlyAnotherTest
This patchset fixes incorrect handling of escaped tokens (`a\ b`) in Shell autocompletion and LibLine. The users of LibLine can now choose between two token splitting modes, either taking into account escapes, or ignoring them.
2020-04-27Shell: use access() syscall to check if files are executable by userStephan Unverwerth
2020-04-21LibCore: Make Core::File::open() return a Result<NNRP<File>, String>Andreas Kling
It was impractical to return a RefPtr<File> since that left us no way to extract the error string. This is usually needed for the UI, so the old static open() got basically no use.
2020-04-19Shell: Correct suggestion of directoriesAnotherTest
2020-04-19LibLine: Allow suggestions to have trailing trivia stringsAnotherTest
These strings would be applied when inserted into the buffer, but are not shown as part of the suggestion. This commit also patches up Userland/js and Shell to use this functionality
2020-04-19Shell: Don't return early if command is in PATH and a directoryLinus Groh
2020-04-19Shell: Explicitly check if command is a directoryLinus Groh
This is a bit nicer than getting "Exec format error" after trying to execvp() a directory.
2020-04-13Shell: Suggest local executables and directoriesStephan Unverwerth
...when no matching executable could be found in $PATH
2020-04-13Shell: Complete .hidden files if token starts with a dotAnotherTest
2020-04-13Shell: Avoid spamming debug output with suggestionsAnotherTest
2020-04-13Shell: Do not manually write to the editor buffer when completing pathsAnotherTest
2020-04-11LibLine: Display suggestions and cycle between themAnotherTest
With extra color (tm) This commit also patches the users of LibLine to properly use the new API
2020-03-31LibLine: Rename LineEditor.{cpp,h} => Editor.{cpp,h}Andreas Kling
2020-03-31LibLine: Rename LineEditor to Line::EditorAndreas Kling
2020-03-31LibLine: Rename from LibLineEditAndreas Kling
2020-03-31LibLineEdit + Shell: Handle Termios internally and give a copy if askedAnotherTest
This moves the Termios logic inside LibLineEdit and allows users to simply forget about the existence of termios if they so choose to :^)
2020-03-31LibLinEdit + Shell: handle signalsAnotherTest
This allows the LineEditor to get notified about signals, since we cannot set signal handlers in a clean way within the LineEditor instance.
2020-03-31Shell: Move LineEdit out and add it as a dependencyAnotherTest
This builds up on the 'new' LibLineEdit and overrides some of its hooks For instance, on_tab_complete_first_token
2020-03-30Shell: Shorten $HOME to '~' in shell promptsAndreas Kling
The "\w" substitution in shell prompts now uses '~' to represent the user's home directory (technically, whatever $HOME contains.)
2020-03-30Shell: Stop making shell history files world-readableAndreas Kling
\0 pointed out that it's pretty bad to have world-readable .history files, especially for root's shell!
2020-03-22Shell: More general tilde expansionShannon Booth
Now expanding a tilde isn't hardcoded to just work for `cd`. It is instead expanded while processing shell arguments. Autocompletion still doesn't work, but this is definitely an improvement over the last iteration.
2020-03-22Shell: Use starts_with() in expand_parametersShannon Booth
This reads a little nicer, and makes us care less about an empty String
2020-03-22Shell: Use size_t for SH_DEBUG vector iterationShannon Booth
We missed this when switching to size_t for vector sizing as this code is not normally compiled.
2020-03-09Shell: Validate only one directory is given to cdShannon Booth
2020-03-09Shell: Implement a "cd history" (cdh) builtinShannon Booth
`cdh` with no arguments dumps the last 8 cd calls in history, and `cdh [index]` can be used to cd to re-run a specific index from that history. `cdh` itself it a thin wrapper of the `cd` builtin. There's definitely some improvements that can be made for this command, but this seems like a good starting point for getting a feel for it and ideas for changing it in the future. It's not entirely clear whether we should be storing the resolved path - or simply just the last argument passed to cd. For now we just use the last path passed into cd as this seemed like the better option for now. This means: * invalid paths will still be stored in history (potentially useful) * cdh's can be repeated for duplicate directory names * the history looks a little nicer on the eyes It might make sense to use resolved paths. Closes #397
2020-03-07Shell: Fix silly stack overflow in 'cd' builtinAndreas Kling
Let's write in C++ and we won't have as many C problems. :^)
2020-03-07Shell: Set up the PWD environment variable earlyAndreas Kling
This ensures that PWD is set when running "sh -c something"
2020-03-02AK: Move the wildcard-matching implementation to StringUtilshowar6hill
Provide wrappers in the String and StringView classes, and add some tests.
2020-02-25Shell: Don't pass nonsense options to waitpid()Andreas Kling
I had these options confused with the options for waitid()
2020-02-25AK: Make Vector use size_t for its size and capacityAndreas Kling
2020-02-22Shell: Make some functions constShannon Booth
2020-02-22Shell: Add basic tilde expansionShannon Booth
This does not work with shell completion yet, but the basics of being able a cd being able to expand "~" to the current user's home directory, and "~foo" to the home directory of user "foo" is added in this commit Work towards: #115
2020-02-15Shell: Use SkipParentAndBaseDir flag in DirIteratorShannon Booth
2020-02-10Shell: Build prompt based on the PROMPT environment variable if presentAndreas Kling
2020-02-06LibCore: Remove leading C from filenamesAndreas Kling