summaryrefslogtreecommitdiff
path: root/src/libs/utils/consoleprocess_unix.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-08-29 09:13:42 +0200
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-08-30 15:49:40 +0200
commit5c4fddc6a5d766fd62a4d3b89b49d5e4ffdee6ba (patch)
tree90c5eadaec375912e3280069e56f36fd1d7433ec /src/libs/utils/consoleprocess_unix.cpp
parent813539a70a45ba04ec982d4ad9aabb0842c00df5 (diff)
downloadqt-creator-5c4fddc6a5d766fd62a4d3b89b49d5e4ffdee6ba.tar.gz
Detect Linux terminal by checking a number of known terminals.
Change the behaviour of defaultTerminalEmulator() to already return the run option in line with terminalEmulator(). Change the QLineEdit in settings to an editable combo offering the available terminals. Change-Id: I333ef08ad06934bcd9fcafb50ff1eced1af6293a Reviewed-by: Nikolai Kosjar <nikolai.kosjar@nokia.com>
Diffstat (limited to 'src/libs/utils/consoleprocess_unix.cpp')
-rw-r--r--src/libs/utils/consoleprocess_unix.cpp62
1 files changed, 56 insertions, 6 deletions
diff --git a/src/libs/utils/consoleprocess_unix.cpp b/src/libs/utils/consoleprocess_unix.cpp
index 4c51445567..c2f88cf1f9 100644
--- a/src/libs/utils/consoleprocess_unix.cpp
+++ b/src/libs/utils/consoleprocess_unix.cpp
@@ -277,21 +277,71 @@ 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()
{
#ifdef Q_OS_MAC
- return QLatin1String("/usr/X11/bin/xterm");
+ return QLatin1String("/usr/X11/bin/xterm -e");
+#else
+ 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");
+#endif
+}
+
+QStringList ConsoleProcess::availableTerminalEmulators()
+{
+#ifdef Q_OS_MAC
+ return QStringList(defaultTerminalEmulator());
#else
- return QLatin1String("xterm");
+ 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;
#endif
}
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)