diff --git a/src/libs/utils/terminalcommand.cpp b/src/libs/utils/terminalcommand.cpp index 0b200430efc..c25b379f321 100644 --- a/src/libs/utils/terminalcommand.cpp +++ b/src/libs/utils/terminalcommand.cpp @@ -15,7 +15,7 @@ namespace Utils { static QSettings *s_settings = nullptr; -TerminalCommand::TerminalCommand(const QString &command, const QString &openArgs, +TerminalCommand::TerminalCommand(const FilePath &command, const QString &openArgs, const QString &executeArgs, bool needsQuotes) : command(command) , openArgs(openArgs) @@ -65,9 +65,9 @@ TerminalCommand TerminalCommand::defaultTerminalEmulator() if (defaultTerm.command.isEmpty()) { if (HostOsInfo::isMacHost()) { - const QString termCmd = QCoreApplication::applicationDirPath() - + "/../Resources/scripts/openTerminal.py"; - if (QFileInfo::exists(termCmd)) + const FilePath termCmd = FilePath::fromString(QCoreApplication::applicationDirPath()) + / "../Resources/scripts/openTerminal.py"; + if (termCmd.exists()) defaultTerm = {termCmd, "", ""}; else defaultTerm = {"/usr/X11/bin/xterm", "", "-e"}; @@ -76,7 +76,7 @@ TerminalCommand TerminalCommand::defaultTerminalEmulator() defaultTerm = {"xterm", "", "-e"}; const Environment env = Environment::systemEnvironment(); for (const TerminalCommand &term : *knownTerminals) { - const QString result = env.searchInPath(term.command).toString(); + const FilePath result = env.searchInPath(term.command.path()); if (!result.isEmpty()) { defaultTerm = {result, term.openArgs, term.executeArgs, term.needsQuotes}; break; @@ -95,7 +95,7 @@ QVector TerminalCommand::availableTerminalEmulators() if (HostOsInfo::isAnyUnixHost()) { const Environment env = Environment::systemEnvironment(); for (const TerminalCommand &term : *knownTerminals) { - const QString command = env.searchInPath(term.command).toString(); + const FilePath command = env.searchInPath(term.command.path()); if (!command.isEmpty()) result.push_back({command, term.openArgs, term.executeArgs}); } @@ -118,7 +118,7 @@ const char kTerminalExecuteOptionsKey[] = "General/Terminal/ExecuteOptions"; TerminalCommand TerminalCommand::terminalEmulator() { if (s_settings && HostOsInfo::isAnyUnixHost() && s_settings->contains(kTerminalCommandKey)) { - return {s_settings->value(kTerminalCommandKey).toString(), + return {FilePath::fromSettings(s_settings->value(kTerminalCommandKey)), s_settings->value(kTerminalOpenOptionsKey).toString(), s_settings->value(kTerminalExecuteOptionsKey).toString()}; } @@ -135,7 +135,7 @@ void TerminalCommand::setTerminalEmulator(const TerminalCommand &term) s_settings->remove(kTerminalOpenOptionsKey); s_settings->remove(kTerminalExecuteOptionsKey); } else { - s_settings->setValue(kTerminalCommandKey, term.command); + s_settings->setValue(kTerminalCommandKey, term.command.toSettings()); s_settings->setValue(kTerminalOpenOptionsKey, term.openArgs); s_settings->setValue(kTerminalExecuteOptionsKey, term.executeArgs); } diff --git a/src/libs/utils/terminalcommand.h b/src/libs/utils/terminalcommand.h index f1311d26531..edb9ffcadde 100644 --- a/src/libs/utils/terminalcommand.h +++ b/src/libs/utils/terminalcommand.h @@ -5,6 +5,8 @@ #include "utils_global.h" +#include "filepath.h" + #include #include @@ -20,13 +22,13 @@ class QTCREATOR_UTILS_EXPORT TerminalCommand { public: TerminalCommand() = default; - TerminalCommand(const QString &command, const QString &openArgs, + TerminalCommand(const FilePath &command, const QString &openArgs, const QString &executeArgs, bool needsQuotes = false); bool operator==(const TerminalCommand &other) const; bool operator<(const TerminalCommand &other) const; - QString command; + Utils::FilePath command; QString openArgs; QString executeArgs; bool needsQuotes = false; diff --git a/src/libs/utils/terminalprocess.cpp b/src/libs/utils/terminalprocess.cpp index e6e28b493e0..bd0333c9d74 100644 --- a/src/libs/utils/terminalprocess.cpp +++ b/src/libs/utils/terminalprocess.cpp @@ -392,7 +392,7 @@ void TerminalImpl::start() allArgs = QStringList { ProcessArgs::joinArgs(allArgs) }; d->m_process.setEnvironment(m_setup.m_environment); - d->m_process.setCommand({FilePath::fromString(terminal.command), allArgs}); + d->m_process.setCommand({terminal.command, allArgs}); d->m_process.setProcessImpl(m_setup.m_processImpl); d->m_process.setReaperTimeout(m_setup.m_reaperTimeout); @@ -400,7 +400,7 @@ void TerminalImpl::start() if (!d->m_process.waitForStarted()) { const QString msg = Tr::tr("Cannot start the terminal emulator \"%1\", change the " "setting in the Environment preferences. (%2)") - .arg(terminal.command, d->m_process.errorString()); + .arg(terminal.command.toUserOutput(), d->m_process.errorString()); cleanupAfterStartFailure(msg); return; } diff --git a/src/plugins/coreplugin/systemsettings.cpp b/src/plugins/coreplugin/systemsettings.cpp index 54d908c3f5d..f34e7fb5b70 100644 --- a/src/plugins/coreplugin/systemsettings.cpp +++ b/src/plugins/coreplugin/systemsettings.cpp @@ -197,7 +197,7 @@ public: const QVector availableTerminals = TerminalCommand::availableTerminalEmulators(); for (const TerminalCommand &term : availableTerminals) - m_terminalComboBox->addItem(term.command, QVariant::fromValue(term)); + m_terminalComboBox->addItem(term.command.toUserOutput(), QVariant::fromValue(term)); updateTerminalUi(TerminalCommand::terminalEmulator()); connect(m_terminalComboBox, &QComboBox::currentIndexChanged, this, [this](int index) { updateTerminalUi(m_terminalComboBox->itemData(index).value()); @@ -373,9 +373,11 @@ void SystemSettingsWidget::apply() QtcSettings *settings = ICore::settings(); EditorManager::setReloadSetting(IDocument::ReloadSetting(m_reloadBehavior->currentIndex())); if (HostOsInfo::isAnyUnixHost()) { - TerminalCommand::setTerminalEmulator({m_terminalComboBox->lineEdit()->text(), - m_terminalOpenArgs->text(), - m_terminalExecuteArgs->text()}); + TerminalCommand::setTerminalEmulator({ + FilePath::fromUserInput(m_terminalComboBox->lineEdit()->text()), + m_terminalOpenArgs->text(), + m_terminalExecuteArgs->text() + }); if (!HostOsInfo::isMacHost()) { UnixUtils::setFileBrowser(settings, m_externalFileBrowserEdit->text()); } @@ -423,7 +425,7 @@ void SystemSettingsWidget::resetTerminal() void SystemSettingsWidget::updateTerminalUi(const TerminalCommand &term) { - m_terminalComboBox->lineEdit()->setText(term.command); + m_terminalComboBox->lineEdit()->setText(term.command.toUserOutput()); m_terminalOpenArgs->setText(term.openArgs); m_terminalExecuteArgs->setText(term.executeArgs); } diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp index 57984a6b11c..a09c8bac76d 100644 --- a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp @@ -77,7 +77,7 @@ static void startTerminalEmulator(const QString &workingDir, const Environment & #else const TerminalCommand term = TerminalCommand::terminalEmulator(); QProcess process; - process.setProgram(term.command); + process.setProgram(term.command.nativePath()); process.setArguments(ProcessArgs::splitArgs(term.openArgs)); process.setProcessEnvironment(env.toProcessEnvironment()); process.setWorkingDirectory(workingDir);