From 384e0f55da3fc14b72d4297da35a618b99aebba0 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Wed, 8 Mar 2023 16:43:17 +0100 Subject: [PATCH] terminal: migrate Cloud to new TerminalWidget API; use new terminal UI for local terminal only (IDEA-314771) GitOrigin-RevId: a017febc29f89fbb2002496b133dd9fd42706b6d --- .../terminal/AbstractTerminalRunner.java | 3 -- .../terminal/LocalTerminalDirectRunner.java | 11 +++++ .../terminal/cloud/TerminalHandlerImpl.java | 40 +++---------------- 3 files changed, 16 insertions(+), 38 deletions(-) diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java index 1d619a3b8e3c..fa29caf42611 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/AbstractTerminalRunner.java @@ -175,9 +175,6 @@ public abstract class AbstractTerminalRunner { } 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(); } diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java index 2c3e68a20f84..e0c6a94d9d8f 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/LocalTerminalDirectRunner.java @@ -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 userEnvs, @NotNull Map resultEnvs) { String wslEnv = userEnvs.keySet().stream().map(name -> name + "/u").collect(Collectors.joining(":")); if (wslEnv.isEmpty()) return; diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/cloud/TerminalHandlerImpl.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/cloud/TerminalHandlerImpl.java index 00cc575043c8..753f842f8d97 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/cloud/TerminalHandlerImpl.java +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/cloud/TerminalHandlerImpl.java @@ -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); - } - }); - } - } }