summaryrefslogtreecommitdiff
path: root/src/libs/utils/consoleprocess_unix.cpp
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>2012-08-30 20:43:02 +0200
committerOswald Buddenhagen <oswald.buddenhagen@nokia.com>2012-08-30 20:43:02 +0200
commita32e243e6168d0cf329390e74e547fc6b2cc0460 (patch)
tree62b8955655cbaf0a58b18820ed440403e8fa91b1 /src/libs/utils/consoleprocess_unix.cpp
parente6270852a3a29dfa0afb9ad00d93504d7460598a (diff)
parent5fdb9f0df92e14c3ab92a0c34dfbbd0956131c2c (diff)
downloadqt-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.cpp60
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)