diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java index b9dc3207f3ed..a106ae05c316 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java @@ -102,7 +102,7 @@ public class LocalTerminalDirectRunner extends AbstractTerminalRunner envs) { - String shellPath = TerminalOptionsProvider.getInstance().getShellPath(); + String shellPath = getShellPath(); - return getCommand(shellPath); + return getCommand(shellPath, envs, TerminalOptionsProvider.getInstance().shellIntegration()); + } + + private String getShellPath() { + return TerminalOptionsProvider.getInstance().getShellPath(); } @NotNull - public static String[] getCommand(String shellPath) { + public static String[] getCommand(String shellPath, Map envs, boolean shellIntegration) { if (SystemInfo.isUnix) { List command = Lists.newArrayList(shellPath.split(" ")); @@ -182,10 +186,18 @@ public class LocalTerminalDirectRunner extends AbstractTerminalRunner= 0) { + command.remove(idx); + if (idx < command.size()) { + envs.put("JEDITERM_SOURCE", command.get(idx)); + command.remove(idx); + } + } } if (!loginOrInteractive(command)) { diff --git a/plugins/terminal/tests/org/jetbrains/plugins/terminal/TerminalShellCommandTest.java b/plugins/terminal/tests/org/jetbrains/plugins/terminal/TerminalShellCommandTest.java index 1a18339186be..4c2446380c91 100644 --- a/plugins/terminal/tests/org/jetbrains/plugins/terminal/TerminalShellCommandTest.java +++ b/plugins/terminal/tests/org/jetbrains/plugins/terminal/TerminalShellCommandTest.java @@ -15,51 +15,56 @@ */ package org.jetbrains.plugins.terminal; +import com.google.common.collect.Maps; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.text.StringUtil; import junit.framework.TestCase; import java.util.Arrays; import java.util.List; +import java.util.Map; /** * @author traff */ public class TerminalShellCommandTest extends TestCase { public void testDontAddAnything() { - doTest(new String[]{"myshell", "someargs", "-i"}, "myshell someargs -i"); - doTest(new String[]{"myshell", "someargs", "--login"}, "myshell someargs --login"); + doTest(new String[]{"myshell", "someargs", "-i"}, "myshell someargs -i", Maps.newHashMap()); + doTest(new String[]{"myshell", "someargs", "--login"}, "myshell someargs --login", Maps.newHashMap()); } public void testAddInteractiveOrLogin() { if (SystemInfo.isLinux) { - contains("bash someargs", "-i", "someargs", "bash"); + contains("bash someargs", Maps.newHashMap(), "-i", "someargs", "bash"); } else if (SystemInfo.isMac) { - contains("bash someargs", "--login", "someargs", "bash"); + contains("bash someargs", Maps.newHashMap(), "--login", "someargs", "bash"); } } public void testAddRcConfig() { - hasRcConfig("bash -i", "jediterm-sh.in"); - hasRcConfig("sh --login", "jediterm-sh.in"); + hasRcConfig("bash -i", "jediterm-sh.in", Maps.newHashMap()); + hasRcConfig("sh --login", "jediterm-sh.in", Maps.newHashMap()); + Map envs = Maps.newHashMap(); + hasRcConfig("sh --rcfile ~/.bashrc", "jediterm-sh.in", envs); + assertEquals("~/.bashrc", envs.get("JEDITERM_SOURCE")); } - private static void hasRcConfig(String path, String configName) { + private static void hasRcConfig(String path, String configName, Map envs) { List res = Arrays.asList( - LocalTerminalDirectRunner.getCommand(path)); + LocalTerminalDirectRunner.getCommand(path, envs, true)); assertEquals("--rcfile", res.get(1)); assertTrue(res.get(2).contains(configName)); } - private static void doTest(String[] expected, String path) { + private static void doTest(String[] expected, String path, Map envs) { assertEquals(Arrays.asList(expected), Arrays.asList( - LocalTerminalDirectRunner.getCommand(path))); + LocalTerminalDirectRunner.getCommand(path, envs, true))); } - private static void contains(String path, String... item) { + private static void contains(String path, Map envs, String... item) { List result = Arrays.asList( - LocalTerminalDirectRunner.getCommand(path)); + LocalTerminalDirectRunner.getCommand(path, envs, true)); for (String i : item) { assertTrue(i + " isn't in " + StringUtil.join(result, " "), result.contains(i));