mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge branch 'terminalProjectEnv' of https://github.com/sblundy/intellij-community into sblundy-terminalProjectEnv
This commit is contained in:
@@ -19,5 +19,6 @@
|
||||
<orderEntry type="library" scope="TEST" name="JUnit4" level="project" />
|
||||
<orderEntry type="module" module-name="intellij.platform.testFramework" scope="TEST" />
|
||||
<orderEntry type="library" name="jediterm-pty" level="project" />
|
||||
<orderEntry type="module" module-name="intellij.platform.lang.impl" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -17,11 +17,17 @@ package org.jetbrains.plugins.terminal;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.execution.TaskExecutor;
|
||||
|
||||
import com.intellij.execution.process.ProcessAdapter;
|
||||
import com.intellij.execution.process.ProcessEvent;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
import com.intellij.execution.process.ProcessWaitFor;
|
||||
import com.intellij.internal.statistic.service.fus.collectors.FUSUsageContext;
|
||||
import com.intellij.execution.configurations.EncodingEnvironmentUtil;
|
||||
import com.intellij.execution.process.*;
|
||||
import com.intellij.openapi.application.Application;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.PathMacroManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
@@ -46,6 +52,7 @@ import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
@@ -117,14 +124,29 @@ public class LocalTerminalDirectRunner extends AbstractTerminalRunner<PtyProcess
|
||||
return new LocalTerminalDirectRunner(project);
|
||||
}
|
||||
|
||||
|
||||
private Map<String, String> getTerminalEnvironment() {
|
||||
|
||||
|
||||
Map<String, String> envs = new HashMap<String, String>();
|
||||
|
||||
if (TerminalOptionsProvider.Companion.getInstance().passParentEnvs()) {
|
||||
envs.putAll(System.getenv());
|
||||
}
|
||||
|
||||
envs.put("TERM", "xterm-256color");
|
||||
EncodingEnvironmentUtil.setLocaleEnvironmentIfMac(envs, myDefaultCharset);
|
||||
|
||||
PathMacroManager macroManager = PathMacroManager.getInstance(myProject);
|
||||
for (Map.Entry<String, String> env : TerminalOptionsProvider.Companion.getInstance().getUserSpecifiedEnvs().entrySet()) {
|
||||
envs.put(env.getKey(), macroManager.expandPath(env.getValue()));
|
||||
}
|
||||
return envs;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PtyProcess createProcess(@Nullable String directory) throws ExecutionException {
|
||||
Map<String, String> envs = new THashMap<>(SystemInfo.isWindows ? CaseInsensitiveStringHashingStrategy.INSTANCE
|
||||
: ContainerUtil.canonicalStrategy());
|
||||
envs.putAll(System.getenv());
|
||||
if (!SystemInfo.isWindows) {
|
||||
envs.put("TERM", "xterm-256color");
|
||||
}
|
||||
Map<String, String> envs = getTerminalEnvironment();
|
||||
|
||||
if (SystemInfo.isMac) {
|
||||
EnvironmentUtil.setLocaleEnv(envs, myDefaultCharset);
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.intellij.openapi.components.State
|
||||
import com.intellij.openapi.components.Storage
|
||||
import com.intellij.openapi.util.SystemInfo
|
||||
import java.io.File
|
||||
import java.util.HashMap
|
||||
|
||||
/**
|
||||
* @author traff
|
||||
@@ -80,6 +81,8 @@ class TerminalOptionsProvider : PersistentStateComponent<TerminalOptionsProvider
|
||||
var myOverrideIdeShortcuts: Boolean = true
|
||||
var myShellIntegration: Boolean = true
|
||||
var myHighlightHyperlinks: Boolean = true
|
||||
var myUserSpecifiedEnvs: Map<String, String> = hashMapOf("PROJECT_DIR" to "\$PROJECT_DIR$")
|
||||
var myPassParentEnvs = true
|
||||
}
|
||||
|
||||
fun setCloseSessionOnLogout(closeSessionOnLogout: Boolean) {
|
||||
@@ -118,6 +121,22 @@ class TerminalOptionsProvider : PersistentStateComponent<TerminalOptionsProvider
|
||||
myState.myHighlightHyperlinks = highlight
|
||||
}
|
||||
|
||||
fun getUserSpecifiedEnvs(): Map<String, String> {
|
||||
return myState.myUserSpecifiedEnvs
|
||||
}
|
||||
|
||||
fun setUserSpecifiedEnvs(userSpecifiedEnvs: Map<String, String>) {
|
||||
myState.myUserSpecifiedEnvs = userSpecifiedEnvs
|
||||
}
|
||||
|
||||
fun setPassParentEnvs(passParentEnvs: Boolean) {
|
||||
myState.myPassParentEnvs = passParentEnvs
|
||||
}
|
||||
|
||||
fun passParentEnvs(): Boolean {
|
||||
return myState.myPassParentEnvs
|
||||
}
|
||||
|
||||
val defaultShellPath: String
|
||||
get() {
|
||||
val shell = System.getenv("SHELL")
|
||||
|
||||
@@ -14,9 +14,6 @@
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<clientProperties>
|
||||
<BorderFactoryClass class="java.lang.String" value=""/>
|
||||
</clientProperties>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<vspacer id="d777c">
|
||||
@@ -24,7 +21,7 @@
|
||||
<grid row="2" column="0" row-span="7" col-span="4" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<grid id="871ca" binding="myProjectSettingsPanel" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<grid id="871ca" binding="myProjectSettingsPanel" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="4" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
@@ -47,6 +44,22 @@
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
<component id="a7470" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Environment Variables"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="9454c" class="com.intellij.execution.configuration.EnvironmentVariablesTextFieldWithBrowseButton" binding="myEnvVarField">
|
||||
<constraints>
|
||||
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value=""/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="5c27f" binding="myGlobalSettingsPanel" layout-manager="GridLayoutManager" row-count="10" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
package org.jetbrains.plugins.terminal;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.execution.configuration.EnvironmentVariablesTextFieldWithBrowseButton;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.options.UnnamedConfigurable;
|
||||
@@ -32,12 +33,16 @@ public class TerminalSettingsPanel {
|
||||
private JBCheckBox myPasteOnMiddleButtonCheckBox;
|
||||
private JBCheckBox myCopyOnSelectionCheckBox;
|
||||
private JBCheckBox myOverrideIdeShortcuts;
|
||||
|
||||
private JBCheckBox myShellIntegration;
|
||||
private TextFieldWithBrowseButton myStartDirectoryField;
|
||||
private JPanel myProjectSettingsPanel;
|
||||
private JPanel myGlobalSettingsPanel;
|
||||
private JPanel myConfigurablesPanel;
|
||||
private JBCheckBox myHighlightHyperlinks;
|
||||
|
||||
private EnvironmentVariablesTextFieldWithBrowseButton myEnvVarField;
|
||||
|
||||
private TerminalOptionsProvider myOptionsProvider;
|
||||
private TerminalProjectOptionsProvider myProjectOptionsProvider;
|
||||
|
||||
@@ -113,7 +118,9 @@ public class TerminalSettingsPanel {
|
||||
|| (myOverrideIdeShortcuts.isSelected() != myOptionsProvider.overrideIdeShortcuts())
|
||||
|| (myShellIntegration.isSelected() != myOptionsProvider.shellIntegration())
|
||||
|| (myHighlightHyperlinks.isSelected() != myOptionsProvider.highlightHyperlinks()) ||
|
||||
myConfigurables.stream().anyMatch(c -> c.isModified());
|
||||
myConfigurables.stream().anyMatch(c -> c.isModified())
|
||||
|| !Comparing.equal(myEnvVarField.getEnvs(), myOptionsProvider.getUserSpecifiedEnvs())
|
||||
|| (myEnvVarField.isPassParentEnvs() != myOptionsProvider.passParentEnvs());
|
||||
}
|
||||
|
||||
public void apply() {
|
||||
@@ -136,6 +143,8 @@ public class TerminalSettingsPanel {
|
||||
//pass
|
||||
}
|
||||
});
|
||||
myOptionsProvider.setUserSpecifiedEnvs(myEnvVarField.getEnvs());
|
||||
myOptionsProvider.setPassParentEnvs(myEnvVarField.isPassParentEnvs());
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
@@ -151,6 +160,8 @@ public class TerminalSettingsPanel {
|
||||
myShellIntegration.setSelected(myOptionsProvider.shellIntegration());
|
||||
myHighlightHyperlinks.setSelected(myOptionsProvider.highlightHyperlinks());
|
||||
myConfigurables.forEach(c -> c.reset());
|
||||
myEnvVarField.setEnvs(myOptionsProvider.getUserSpecifiedEnvs());
|
||||
myEnvVarField.setPassParentEnvs(myOptionsProvider.passParentEnvs());
|
||||
}
|
||||
|
||||
public Color getDefaultValueColor() {
|
||||
|
||||
Reference in New Issue
Block a user