mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
terminal: migrate Cloud to new TerminalWidget API; use new terminal UI for local terminal only (IDEA-314771)
GitOrigin-RevId: a017febc29f89fbb2002496b133dd9fd42706b6d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3a16fbea3d
commit
384e0f55da
@@ -175,9 +175,6 @@ public abstract class AbstractTerminalRunner<T extends Process> {
|
||||
}
|
||||
|
||||
protected @NotNull TerminalWidget createShellTerminalWidget(@NotNull Disposable parent, @NotNull ShellStartupOptions startupOptions) {
|
||||
if (Registry.is("ide.experimental.ui.new.terminal", false)) {
|
||||
return new TerminalWidgetImpl(myProject, mySettingsProvider, parent);
|
||||
}
|
||||
return new ShellTerminalWidget(myProject, mySettingsProvider, parent).asNewWidget();
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.intellij.execution.configuration.EnvironmentVariablesData;
|
||||
import com.intellij.execution.process.*;
|
||||
import com.intellij.execution.wsl.WslPath;
|
||||
import com.intellij.ide.impl.TrustedProjects;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.Application;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.PathMacroManager;
|
||||
@@ -15,6 +16,7 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectUtil;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -35,6 +37,7 @@ import kotlin.jvm.functions.Function0;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.terminal.exp.TerminalWidgetImpl;
|
||||
import org.jetbrains.plugins.terminal.util.TerminalEnvironment;
|
||||
|
||||
import java.io.File;
|
||||
@@ -158,6 +161,14 @@ public class LocalTerminalDirectRunner extends AbstractTerminalRunner<PtyProcess
|
||||
return envs;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @NotNull TerminalWidget createShellTerminalWidget(@NotNull Disposable parent, @NotNull ShellStartupOptions startupOptions) {
|
||||
if (Registry.is("ide.experimental.ui.new.terminal", false)) {
|
||||
return new TerminalWidgetImpl(myProject, getSettingsProvider(), parent);
|
||||
}
|
||||
return super.createShellTerminalWidget(parent, startupOptions);
|
||||
}
|
||||
|
||||
private static void setupWslEnv(@NotNull Map<String, String> userEnvs, @NotNull Map<String, String> resultEnvs) {
|
||||
String wslEnv = userEnvs.keySet().stream().map(name -> name + "/u").collect(Collectors.joining(":"));
|
||||
if (wslEnv.isEmpty()) return;
|
||||
|
||||
@@ -4,24 +4,18 @@ package org.jetbrains.plugins.terminal.cloud;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.remoteServer.agent.util.log.TerminalListener.TtyResizeHandler;
|
||||
import com.intellij.remoteServer.impl.runtime.log.TerminalHandlerBase;
|
||||
import com.intellij.terminal.JBTerminalPanel;
|
||||
import com.intellij.terminal.JBTerminalWidget;
|
||||
import com.intellij.terminal.ui.TerminalWidget;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.terminal.ShellStartupOptions;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Objects;
|
||||
|
||||
public class TerminalHandlerImpl extends TerminalHandlerBase {
|
||||
|
||||
private final JBTerminalWidget myTerminalWidget;
|
||||
private final JBTerminalPanel myTerminalPanel;
|
||||
private final KeyAdapter myCopyActionKeyListener;
|
||||
private final TerminalWidget myTerminalWidget;
|
||||
|
||||
public TerminalHandlerImpl(@NotNull String presentableName,
|
||||
@NotNull Project project,
|
||||
@@ -36,11 +30,8 @@ public class TerminalHandlerImpl extends TerminalHandlerBase {
|
||||
CloudTerminalRunner terminalRunner =
|
||||
new CloudTerminalRunner(project, presentableName, process, handlerBoundLater, deferTerminalSessionUntilFirstShown);
|
||||
|
||||
TerminalWidget widget = terminalRunner.startShellTerminalWidget(project, new ShellStartupOptions.Builder().build(),
|
||||
deferTerminalSessionUntilFirstShown);
|
||||
myTerminalWidget = Objects.requireNonNull(JBTerminalWidget.asJediTermWidget(widget));
|
||||
myTerminalPanel = myTerminalWidget.getTerminalPanel();
|
||||
myCopyActionKeyListener = new MyCopyActionKeyListener();
|
||||
myTerminalWidget = terminalRunner.startShellTerminalWidget(this, new ShellStartupOptions.Builder().build(),
|
||||
deferTerminalSessionUntilFirstShown);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -53,31 +44,10 @@ public class TerminalHandlerImpl extends TerminalHandlerBase {
|
||||
return myTerminalWidget.getPreferredFocusableComponent();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
super.dispose();
|
||||
myTerminalPanel.removeCustomKeyListener(myCopyActionKeyListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
myTerminalWidget.getTerminalDisplay().setCursorVisible(false);
|
||||
myTerminalWidget.stop();
|
||||
// workaround for unexpected removing key listener from terminal panel, even if panel not disposed
|
||||
myTerminalPanel.addCustomKeyListener(myCopyActionKeyListener);
|
||||
myTerminalWidget.setCursorVisible(false);
|
||||
Objects.requireNonNull(myTerminalWidget.getTtyConnector()).close();
|
||||
super.close();
|
||||
}
|
||||
|
||||
private class MyCopyActionKeyListener extends KeyAdapter {
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
var copyActionName = myTerminalWidget.getSettingsProvider().getCopyActionPresentation().getName();
|
||||
|
||||
myTerminalPanel.getActions().stream().filter(a -> a.getName().equals(copyActionName)).findFirst().ifPresent(a -> {
|
||||
if (a.matches(e) && a.isEnabled(e)) {
|
||||
a.actionPerformed(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user