mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-25 18:05:33 +02:00
fix for remote windows shell
This commit is contained in:
parent
0ecce33193
commit
7f05ace5bd
2 changed files with 32 additions and 9 deletions
|
@ -292,8 +292,19 @@ public class CommandMinerThread extends MinerThread
|
||||||
args[1] = "/C ";
|
args[1] = "/C ";
|
||||||
}
|
}
|
||||||
args[2] = _invocation;
|
args[2] = _invocation;
|
||||||
_theProcess = Runtime.getRuntime().exec(args, getEnvironment(_subject), theDirectory);
|
System.out.println("getting env...");
|
||||||
System.out.println("started shell:"+args[0] + " " + args[1] + " " + args[2]);
|
String[] env = getEnvironment(_subject);
|
||||||
|
System.out.println("...got env");
|
||||||
|
if (_invocation.equals(theShell))
|
||||||
|
{
|
||||||
|
|
||||||
|
_theProcess = Runtime.getRuntime().exec(_invocation, env, theDirectory);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_theProcess = Runtime.getRuntime().exec(args, env, theDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -555,7 +566,7 @@ public class CommandMinerThread extends MinerThread
|
||||||
writer.flush();
|
writer.flush();
|
||||||
|
|
||||||
|
|
||||||
if (input.startsWith("cd ") || input.equals("cd"))
|
if (!_isWindows && (input.startsWith("cd ") || input.equals("cd")))
|
||||||
{
|
{
|
||||||
queryCWD();
|
queryCWD();
|
||||||
}
|
}
|
||||||
|
@ -612,12 +623,15 @@ public class CommandMinerThread extends MinerThread
|
||||||
DataElement projectEnv = null;
|
DataElement projectEnv = null;
|
||||||
if (projectEnvReference != null && (projectEnvReference.size() > 0))
|
if (projectEnvReference != null && (projectEnvReference.size() > 0))
|
||||||
projectEnv = (DataElement) projectEnvReference.get(0);
|
projectEnv = (DataElement) projectEnvReference.get(0);
|
||||||
|
|
||||||
|
|
||||||
String[] theEnv = mergeEnvironments(systemEnv, projectEnv);
|
String[] theEnv = mergeEnvironments(systemEnv, projectEnv);
|
||||||
return theEnv;
|
return theEnv;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String[] mergeEnvironments(DataElement systemEnv, DataElement projectEnv)
|
private String[] mergeEnvironments(DataElement systemEnv, DataElement projectEnv)
|
||||||
{
|
{
|
||||||
|
|
||||||
List prjVars = null;
|
List prjVars = null;
|
||||||
List sysVars = null;
|
List sysVars = null;
|
||||||
//Fill the ArrayLists with the environment variables
|
//Fill the ArrayLists with the environment variables
|
||||||
|
@ -633,8 +647,10 @@ public class CommandMinerThread extends MinerThread
|
||||||
//If we get here, then we have both system and project variables...to make merging the 2 lists easier, we'll
|
//If we get here, then we have both system and project variables...to make merging the 2 lists easier, we'll
|
||||||
//use a Hashtable (Variable Names are the keys, Variables Values are the values):
|
//use a Hashtable (Variable Names are the keys, Variables Values are the values):
|
||||||
Hashtable varTable = new Hashtable();
|
Hashtable varTable = new Hashtable();
|
||||||
|
|
||||||
//First fill the varTable with the sysVars
|
//First fill the varTable with the sysVars
|
||||||
varTable.putAll(mapVars(sysVars));
|
varTable.putAll(mapVars(sysVars));
|
||||||
|
|
||||||
//Now for every project variable, check to see if it already exists, and if the value contains other variables:
|
//Now for every project variable, check to see if it already exists, and if the value contains other variables:
|
||||||
for (int i = 0; i < prjVars.size(); i++)
|
for (int i = 0; i < prjVars.size(); i++)
|
||||||
{
|
{
|
||||||
|
@ -648,12 +664,14 @@ public class CommandMinerThread extends MinerThread
|
||||||
varTable.put(theKey, theValue);
|
varTable.put(theKey, theValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (_isTTY)
|
if (_isTTY)
|
||||||
{
|
{
|
||||||
varTable.put("PS1","$PWD/>");
|
varTable.put("PS1","$PWD/>");
|
||||||
varTable.put("COLUMNS","256");
|
varTable.put("COLUMNS","256");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* DKM: for some reason this isn't getting applied properly here
|
/* DKM: for some reason this isn't getting applied properly here
|
||||||
* but it works via export
|
* but it works via export
|
||||||
* */
|
* */
|
||||||
|
@ -700,7 +718,7 @@ public class CommandMinerThread extends MinerThread
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//If the current char is a $, then look for a { or just match alphanumerics
|
//If the current char is a $, then look for a { or just match alphanumerics
|
||||||
else if (c == '$')
|
else if (c == '$' && !_isWindows)
|
||||||
{
|
{
|
||||||
int nextIndex = index + 1;
|
int nextIndex = index + 1;
|
||||||
if (nextIndex < theValue.length())
|
if (nextIndex < theValue.length())
|
||||||
|
@ -721,9 +739,14 @@ public class CommandMinerThread extends MinerThread
|
||||||
{
|
{
|
||||||
if (Character.isJavaIdentifierStart(c))
|
if (Character.isJavaIdentifierStart(c))
|
||||||
{
|
{
|
||||||
while ((nextIndex < theValue.length()) && (Character.isJavaIdentifierPart(c)))
|
while (nextIndex + 1 < theValue.length() && (Character.isJavaIdentifierPart(c)))
|
||||||
c = theValue.charAt(++nextIndex);
|
{
|
||||||
String replacementValue = findValue(theValue.substring(index + 1, nextIndex), theTable, true);
|
nextIndex++;
|
||||||
|
c = theValue.charAt(nextIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
String v = theValue.substring(index + 1, nextIndex);
|
||||||
|
String replacementValue = findValue(v, theTable, true);
|
||||||
theValue.replace(index, nextIndex, replacementValue);
|
theValue.replace(index, nextIndex, replacementValue);
|
||||||
index += replacementValue.length() - 1;
|
index += replacementValue.length() - 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,7 +155,7 @@ public class EnvironmentMiner extends Miner
|
||||||
String theOS = System.getProperty("os.name").toLowerCase();
|
String theOS = System.getProperty("os.name").toLowerCase();
|
||||||
//If we're on windows, change the envCommand.
|
//If we're on windows, change the envCommand.
|
||||||
if (theOS.startsWith("win"))
|
if (theOS.startsWith("win"))
|
||||||
envCommand = "cmd /c set";
|
envCommand = "cmd /C set";
|
||||||
|
|
||||||
if (theOS.startsWith("os/400"))
|
if (theOS.startsWith("os/400"))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue