diff --git a/src/plugins/terminal/terminalsettings.cpp b/src/plugins/terminal/terminalsettings.cpp index 1a3625098da..1f548a65fae 100644 --- a/src/plugins/terminal/terminalsettings.cpp +++ b/src/plugins/terminal/terminalsettings.cpp @@ -35,11 +35,15 @@ static int defaultFontSize() static QString defaultShell() { - if (Utils::HostOsInfo::isMacHost()) - return "/bin/zsh"; - if (Utils::HostOsInfo::isAnyUnixHost()) - return "/bin/bash"; - return qtcEnvironmentVariable("COMSPEC"); + if (HostOsInfo::isWindowsHost()) + return qtcEnvironmentVariable("COMSPEC"); + + QString defaultShell = qtcEnvironmentVariable("SHELL"); + if (FilePath::fromUserInput(defaultShell).isExecutableFile()) + return defaultShell; + + Utils::FilePath shPath = Utils::Environment::systemEnvironment().searchInPath("sh"); + return shPath.nativePath(); } TerminalSettings &TerminalSettings::instance() @@ -97,6 +101,14 @@ TerminalSettings::TerminalSettings() shell.setToolTip(Tr::tr("The shell executable to be started as terminal")); shell.setDefaultValue(defaultShell()); + shellArguments.setSettingsKey("ShellArguments"); + shellArguments.setLabelText(Tr::tr("Shell arguments:")); + shellArguments.setDisplayStyle(StringAspect::LineEditDisplay); + shellArguments.setHistoryCompleter("Terminal.Shell.History"); + shellArguments.setToolTip(Tr::tr("The arguments to be passed to the shell")); + if (!HostOsInfo::isWindowsHost()) + shellArguments.setDefaultValue(QString("-l")); + sendEscapeToTerminal.setSettingsKey("SendEscapeToTerminal"); sendEscapeToTerminal.setLabelText(Tr::tr("Send escape key to terminal")); sendEscapeToTerminal.setToolTip( @@ -117,6 +129,7 @@ TerminalSettings::TerminalSettings() registerAspect(&enableTerminal); registerAspect(&sendEscapeToTerminal); registerAspect(&audibleBell); + registerAspect(&shellArguments); setupColor(this, foregroundColor, diff --git a/src/plugins/terminal/terminalsettings.h b/src/plugins/terminal/terminalsettings.h index 45b85c5910f..137f3abe3aa 100644 --- a/src/plugins/terminal/terminalsettings.h +++ b/src/plugins/terminal/terminalsettings.h @@ -18,6 +18,7 @@ public: Utils::StringAspect font; Utils::IntegerAspect fontSize; Utils::StringAspect shell; + Utils::StringAspect shellArguments; Utils::ColorAspect foregroundColor; Utils::ColorAspect backgroundColor; diff --git a/src/plugins/terminal/terminalsettingspage.cpp b/src/plugins/terminal/terminalsettingspage.cpp index f0bfa883d7a..b6ef57f2d00 100644 --- a/src/plugins/terminal/terminalsettingspage.cpp +++ b/src/plugins/terminal/terminalsettingspage.cpp @@ -423,8 +423,9 @@ QWidget *TerminalSettingsPage::widget() } }, }, - Row { + Column { settings.shell, + settings.shellArguments, }, st, }.attachTo(widget); diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp index 06fcfe57791..a7b3590a599 100644 --- a/src/plugins/terminal/terminalwidget.cpp +++ b/src/plugins/terminal/terminalwidget.cpp @@ -141,7 +141,9 @@ void TerminalWidget::setupPty() Environment env = m_openParameters.environment.value_or(Environment::systemEnvironment()); CommandLine shellCommand = m_openParameters.shellCommand.value_or( - CommandLine{TerminalSettings::instance().shell.filePath(), {}}); + CommandLine{TerminalSettings::instance().shell.filePath(), + TerminalSettings::instance().shellArguments.value(), + CommandLine::Raw}); // For git bash on Windows env.prependOrSetPath(shellCommand.executable().parentDir());