diff options
author | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2012-08-30 20:43:02 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2012-08-30 20:43:02 +0200 |
commit | a32e243e6168d0cf329390e74e547fc6b2cc0460 (patch) | |
tree | 62b8955655cbaf0a58b18820ed440403e8fa91b1 /src/libs/utils/consoleprocess_unix.cpp | |
parent | e6270852a3a29dfa0afb9ad00d93504d7460598a (diff) | |
parent | 5fdb9f0df92e14c3ab92a0c34dfbbd0956131c2c (diff) | |
download | qt-creator-a32e243e6168d0cf329390e74e547fc6b2cc0460.tar.gz |
Merge branch '2.6'
Conflicts:
src/libs/utils/consoleprocess_unix.cpp
Change-Id: I196f61e882bfce94e165d9c724bffee9df1011b7
Diffstat (limited to 'src/libs/utils/consoleprocess_unix.cpp')
-rw-r--r-- | src/libs/utils/consoleprocess_unix.cpp | 60 |
1 files changed, 55 insertions, 5 deletions
diff --git a/src/libs/utils/consoleprocess_unix.cpp b/src/libs/utils/consoleprocess_unix.cpp index 9e000eb2bc..2e9738c68a 100644 --- a/src/libs/utils/consoleprocess_unix.cpp +++ b/src/libs/utils/consoleprocess_unix.cpp @@ -281,19 +281,69 @@ void ConsoleProcess::stubExited() emit wrapperStopped(); } +struct Terminal { + const char *binary; + const char *options; +}; + +static const Terminal knownTerminals[] = +{ + {"xterm", "-e"}, + {"aterm", "-e"}, + {"Eterm", "-e"}, + {"rxvt", "-e"}, + {"urxvt", "-e"}, + {"xfce4-terminal", "-x"}, + {"konsole", "--nofork -e"}, + {"gnome-terminal", "-x"} +}; + QString ConsoleProcess::defaultTerminalEmulator() { if (Utils::HostOsInfo::isMacHost()) return QLatin1String("/usr/X11/bin/xterm"); - return QLatin1String("xterm"); + + const Environment env = Environment::systemEnvironment(); + const int terminalCount = int(sizeof(knownTerminals) / sizeof(knownTerminals[0])); + for (int i = 0; i < terminalCount; ++i) { + QString result = env.searchInPath(QLatin1String(knownTerminals[i].binary)); + if (!result.isEmpty()) { + result += QLatin1Char(' '); + result += QLatin1String(knownTerminals[i].options); + return result; + } + } + return QLatin1String("xterm -e"); +} + +QStringList ConsoleProcess::availableTerminalEmulators() +{ + if (Utils::HostOsInfo::isMacHost()) + return QStringList(defaultTerminalEmulator()); + + QStringList result; + const Environment env = Environment::systemEnvironment(); + const int terminalCount = int(sizeof(knownTerminals) / sizeof(knownTerminals[0])); + for (int i = 0; i < terminalCount; ++i) { + QString terminal = env.searchInPath(QLatin1String(knownTerminals[i].binary)); + if (!terminal.isEmpty()) { + terminal += QLatin1Char(' '); + terminal += QLatin1String(knownTerminals[i].options); + result.push_back(terminal); + } + } + result.sort(); + return result; } QString ConsoleProcess::terminalEmulator(const QSettings *settings) { - const QString dflt = defaultTerminalEmulator() + QLatin1String(" -e"); - if (!settings) - return dflt; - return settings->value(QLatin1String("General/TerminalEmulator"), dflt).toString(); + if (settings) { + const QString value = settings->value(QLatin1String("General/TerminalEmulator")).toString(); + if (!value.isEmpty()) + return value; + } + return defaultTerminalEmulator(); } void ConsoleProcess::setTerminalEmulator(QSettings *settings, const QString &term) |