Fix handling enter in 'Emulate terminal' mode (PY-22610)
authorDmitry Trofimov <dmitry.trofimov@jetbrains.com>
Wed, 22 Feb 2017 17:37:55 +0000 (18:37 +0100)
committerDmitry Trofimov <dmitry.trofimov@jetbrains.com>
Wed, 22 Feb 2017 17:43:23 +0000 (18:43 +0100)
platform/platform-impl/src/com/intellij/terminal/ProcessHandlerTtyConnector.java
platform/platform-impl/src/com/intellij/terminal/TerminalExecutionConsole.java

index c103f0092a2b727b6ee430f15e63e148606f8901..9a4812216b426164c36126821f09df68e463f91a 100644 (file)
@@ -51,7 +51,6 @@ public class ProcessHandlerTtyConnector implements TtyConnector {
     myCharset = charset;
   }
 
-
   @Override
   public boolean init(Questioner q) {
     return true;
@@ -85,6 +84,7 @@ public class ProcessHandlerTtyConnector implements TtyConnector {
   @Override
   public void write(byte[] bytes) throws IOException {
     myProcessHandler.getProcessInput().write(bytes);
+    myProcessHandler.getProcessInput().flush();
   }
 
   @Override
@@ -95,6 +95,7 @@ public class ProcessHandlerTtyConnector implements TtyConnector {
   @Override
   public void write(String string) throws IOException {
     myProcessHandler.getProcessInput().write(string.getBytes(myCharset));
+    myProcessHandler.getProcessInput().flush();
   }
 
   @Override
index c99a3773602f093973d90cf36177a97008494ad0..d7b40d521fc0bff5d9acc1a113b210061f21ca73 100644 (file)
@@ -28,6 +28,7 @@ import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Key;
 import com.intellij.openapi.vfs.encoding.EncodingProjectManager;
 import com.jediterm.terminal.HyperlinkStyle;
+import com.jediterm.terminal.TerminalKeyEncoder;
 import com.jediterm.terminal.TerminalStarter;
 import com.jediterm.terminal.TtyConnector;
 import com.jediterm.terminal.model.JediTerminal;
@@ -48,6 +49,12 @@ public class TerminalExecutionConsole implements ConsoleView {
   private Project myProject;
   private final AppendableTerminalDataStream myDataStream;
 
+  private final TerminalKeyEncoder myKeyEncoder = new TerminalKeyEncoder();
+
+  {
+    myKeyEncoder.setAutoNewLine(true);
+  }
+
   public TerminalExecutionConsole(@NotNull Project project, @NotNull ProcessHandler processHandler) {
     myProject = project;
     final JBTerminalSystemSettingsProviderBase provider = new JBTerminalSystemSettingsProviderBase() {
@@ -63,7 +70,16 @@ public class TerminalExecutionConsole implements ConsoleView {
     myTerminalWidget = new JBTerminalWidget(project, 200, 24, provider, this) {
       @Override
       protected TerminalStarter createTerminalStarter(JediTerminal terminal, TtyConnector connector) {
-        return new TerminalStarter(terminal, connector, myDataStream);
+        return new TerminalStarter(terminal, connector, myDataStream) {
+          @Override
+          public byte[] getCode(int key, int modifiers) {
+            if (key == 10) {
+              return myKeyEncoder.getCode(key, modifiers);
+            } else {
+              return super.getCode(key, modifiers);
+            }
+          }
+        };
       }
     };
 
@@ -102,7 +118,7 @@ public class TerminalExecutionConsole implements ConsoleView {
       }
     });
   }
-  
+
   private void printText(@NotNull String text, @Nullable ConsoleViewContentType contentType) throws IOException {
     if (contentType != null) {
       myDataStream.append(encodeColor(contentType.getAttributes().getForegroundColor()));