Mercurial > octave-nkf
annotate gui/konsole/ShellCommand.cpp @ 14242:637675470c58 gui
Added OctaveDEs konsole sources.
author | Jacob Dawid <jacob.dawid@googlemail.com> |
---|---|
date | Sun, 22 Jan 2012 14:18:05 +0100 |
parents | |
children |
rev | line source |
---|---|
14242
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
1 /* |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
2 Copyright 2007-2008 by Robert Knight <robertknight@gmail.com> |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
3 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
4 This program is free software; you can redistribute it and/or modify |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
5 it under the terms of the GNU General Public License as published by |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
6 the Free Software Foundation; either version 2 of the License, or |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
7 (at your option) any later version. |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
8 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
9 This program is distributed in the hope that it will be useful, |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
10 but WITHOUT ANY WARRANTY; without even the implied warranty of |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
12 GNU General Public License for more details. |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
13 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
14 You should have received a copy of the GNU General Public License |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
15 along with this program; if not, write to the Free Software |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
17 02110-1301 USA. |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
18 */ |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
19 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
20 // Own |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
21 #include "ShellCommand.h" |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
22 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
23 // Qt |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
24 //#include <KShell> |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
25 //#include <KDebug> |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
26 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
27 using namespace Konsole; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
28 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
29 // expands environment variables in 'text' |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
30 // function copied from kdelibs/kio/kio/kurlcompletion.cpp |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
31 static bool expandEnv(QString& text); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
32 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
33 ShellCommand::ShellCommand(const QString& fullCommand) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
34 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
35 //_arguments = KShell::splitArgs(fullCommand); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
36 bool inQuotes = false; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
37 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
38 QString builder; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
39 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
40 for ( int i = 0 ; i < fullCommand.count() ; i++ ) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
41 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
42 QChar ch = fullCommand[i]; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
43 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
44 const bool isLastChar = ( i == fullCommand.count() - 1 ); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
45 const bool isQuote = ( ch == '\'' || ch == '\"' ); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
46 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
47 if ( !isLastChar && isQuote ) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
48 inQuotes = !inQuotes; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
49 else |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
50 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
51 if ( (!ch.isSpace() || inQuotes) && !isQuote ) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
52 builder.append(ch); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
53 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
54 if ( (ch.isSpace() && !inQuotes) || ( i == fullCommand.count()-1 ) ) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
55 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
56 _arguments << builder; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
57 builder.clear(); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
58 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
59 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
60 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
61 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
62 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
63 ShellCommand::ShellCommand(const QString& command , const QStringList& arguments) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
64 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
65 _arguments = arguments; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
66 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
67 if ( !_arguments.isEmpty() ) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
68 _arguments[0] == command; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
69 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
70 QString ShellCommand::fullCommand() const |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
71 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
72 QStringList quotedArgs(_arguments); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
73 for (int i=0;i<quotedArgs.count();i++) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
74 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
75 QString arg = quotedArgs.at(i); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
76 bool hasSpace = false; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
77 for (int j=0;j<arg.count();j++) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
78 if (arg[j].isSpace()) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
79 hasSpace = true; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
80 if (hasSpace) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
81 quotedArgs[i] = '\"' + arg + '\"'; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
82 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
83 return quotedArgs.join(QChar(' ')); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
84 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
85 QString ShellCommand::command() const |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
86 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
87 if ( !_arguments.isEmpty() ) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
88 return _arguments[0]; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
89 else |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
90 return QString(); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
91 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
92 QStringList ShellCommand::arguments() const |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
93 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
94 return _arguments; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
95 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
96 bool ShellCommand::isRootCommand() const |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
97 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
98 Q_ASSERT(0); // not implemented yet |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
99 return false; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
100 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
101 bool ShellCommand::isAvailable() const |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
102 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
103 Q_ASSERT(0); // not implemented yet |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
104 return false; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
105 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
106 QStringList ShellCommand::expand(const QStringList& items) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
107 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
108 QStringList result; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
109 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
110 foreach( const QString &item , items ) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
111 result << expand(item); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
112 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
113 return result; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
114 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
115 QString ShellCommand::expand(const QString& text) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
116 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
117 QString result = text; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
118 expandEnv(result); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
119 return result; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
120 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
121 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
122 /* |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
123 * expandEnv |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
124 * |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
125 * Expand environment variables in text. Escaped '$' characters are ignored. |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
126 * Return true if any variables were expanded |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
127 */ |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
128 static bool expandEnv( QString &text ) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
129 { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
130 // Find all environment variables beginning with '$' |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
131 // |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
132 int pos = 0; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
133 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
134 bool expanded = false; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
135 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
136 while ( (pos = text.indexOf(QLatin1Char('$'), pos)) != -1 ) { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
137 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
138 // Skip escaped '$' |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
139 // |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
140 if ( pos > 0 && text.at(pos-1) == QLatin1Char('\\') ) { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
141 pos++; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
142 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
143 // Variable found => expand |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
144 // |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
145 else { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
146 // Find the end of the variable = next '/' or ' ' |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
147 // |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
148 int pos2 = text.indexOf( QLatin1Char(' '), pos+1 ); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
149 int pos_tmp = text.indexOf( QLatin1Char('/'), pos+1 ); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
150 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
151 if ( pos2 == -1 || (pos_tmp != -1 && pos_tmp < pos2) ) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
152 pos2 = pos_tmp; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
153 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
154 if ( pos2 == -1 ) |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
155 pos2 = text.length(); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
156 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
157 // Replace if the variable is terminated by '/' or ' ' |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
158 // and defined |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
159 // |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
160 if ( pos2 >= 0 ) { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
161 int len = pos2 - pos; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
162 QString key = text.mid( pos+1, len-1); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
163 QString value = |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
164 QString::fromLocal8Bit( qgetenv(key.toLocal8Bit()) ); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
165 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
166 if ( !value.isEmpty() ) { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
167 expanded = true; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
168 text.replace( pos, len, value ); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
169 pos = pos + value.length(); |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
170 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
171 else { |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
172 pos = pos2; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
173 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
174 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
175 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
176 } |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
177 |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
178 return expanded; |
637675470c58
Added OctaveDEs konsole sources.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
179 } |