From 6a4821ff41d85c407d04eadc9990aa75c75f0dc7 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Wed, 12 Aug 2020 15:24:50 +0300 Subject: [PATCH] console: send \r on Enter key pressed for PTY based processes (GO-9805) GitOrigin-RevId: 2be730904ed44bd137d3e9848ef2b79da454faa8 --- .../lang-impl/intellij.platform.lang.impl.iml | 1 + .../impl/ConsoleViewRunningState.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/intellij.platform.lang.impl.iml b/platform/lang-impl/intellij.platform.lang.impl.iml index 9ea54984fbe5..ee24b60172a3 100644 --- a/platform/lang-impl/intellij.platform.lang.impl.iml +++ b/platform/lang-impl/intellij.platform.lang.impl.iml @@ -49,5 +49,6 @@ + \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewRunningState.java b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewRunningState.java index a0c5306a328d..6fcd42a0cc65 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewRunningState.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewRunningState.java @@ -1,11 +1,14 @@ // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.execution.impl; +import com.google.common.base.Ascii; import com.intellij.execution.ExecutionBundle; import com.intellij.execution.process.*; import com.intellij.execution.ui.ConsoleViewContentType; import com.intellij.openapi.util.Key; +import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.vfs.encoding.EncodingManager; +import com.pty4j.PtyProcess; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; @@ -106,10 +109,23 @@ public class ConsoleViewRunningState extends ConsoleState { if (myUserInputWriter == null) { throw new IOException(ExecutionBundle.message("no.user.process.input.error.message")); } - myUserInputWriter.write(input); + char enterKeyCode = getEnterKeyCode(); + String inputToSend = input.replace((char)Ascii.LF, enterKeyCode); + myUserInputWriter.write(inputToSend); myUserInputWriter.flush(); } + private char getEnterKeyCode() { + if (SystemInfo.isWindows && + myProcessHandler instanceof OSProcessHandler && + ((OSProcessHandler)myProcessHandler).getProcess() instanceof PtyProcess) { + // pty4j expects \r as Enter key code + // https://github.com/JetBrains/pty4j/blob/0.9.4/test/com/pty4j/PtyTest.java#L54 + return Ascii.CR; + } + return Ascii.LF; + } + @NotNull @Override public ConsoleState attachTo(@NotNull final ConsoleViewImpl console, final @NotNull ProcessHandler processHandler) { -- 2.32.0