diff options
author | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2023-06-03 18:44:39 +0200 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2023-06-05 09:25:11 +0330 |
commit | 9531abcb1a6f55157ec31c81cec762807fd14cb4 (patch) | |
tree | 879966226e4aa1954c21be240096508f78f8deef | |
parent | 6e5457d9e02b30d7b7f04cf47cc694ba3431e0cc (diff) | |
download | serenity-9531abcb1a6f55157ec31c81cec762807fd14cb4.zip |
Shell: Add a "." builtin that aliases to "source" in POSIXmaster
This patch adds an alias to the source builtin when an user types ".".
We cannot just add an enumeration entry using __ENUMERATE_SHELL_BUILTIN
because "." is not a valid name in a function.
This patch adds handling similarly to the name rewriting of ":".
This alias is limited to POSIX mode only.
-rw-r--r-- | Userland/Shell/Builtin.cpp | 4 | ||||
-rw-r--r-- | Userland/Shell/Shell.h | 4 |
2 files changed, 7 insertions, 1 deletions
diff --git a/Userland/Shell/Builtin.cpp b/Userland/Shell/Builtin.cpp index 3d9a54cd3c..2238de8b3c 100644 --- a/Userland/Shell/Builtin.cpp +++ b/Userland/Shell/Builtin.cpp @@ -1328,6 +1328,8 @@ ErrorOr<bool> Shell::run_builtin(const AST::Command& command, Vector<NonnullRefP if (name == ":"sv) name = "noop"sv; + else if (m_in_posix_mode && name == "."sv) + name = "source"sv; #define __ENUMERATE_SHELL_BUILTIN(builtin, _mode) \ if (name == #builtin) { \ @@ -1921,7 +1923,7 @@ ErrorOr<int> Shell::builtin_run_with_env(Main::Arguments arguments) bool Shell::has_builtin(StringView name) const { - if (name == ":"sv) + if (name == ":"sv || (m_in_posix_mode && name == "."sv)) return true; #define __ENUMERATE_SHELL_BUILTIN(builtin, mode) \ diff --git a/Userland/Shell/Shell.h b/Userland/Shell/Shell.h index a34a84f968..b425333183 100644 --- a/Userland/Shell/Shell.h +++ b/Userland/Shell/Shell.h @@ -462,7 +462,11 @@ private: #undef __ENUMERATE_SHELL_BUILTIN + "."sv, // Needs to be aliased to "source" in POSIX mode. + // clang-format off + // Clang-format does not properly indent this, it gives it 4 spaces too few. ":"sv, // POSIX-y name for "noop". + // clang-format on }; bool m_should_ignore_jobs_on_next_exit { false }; |