Merge branch 'traff/terminal-urls'
authorDmitry Trofimov <dmitry.trofimov@jetbrains.com>
Thu, 19 Jan 2017 15:59:36 +0000 (16:59 +0100)
committerDmitry Trofimov <dmitry.trofimov@jetbrains.com>
Thu, 19 Jan 2017 15:59:36 +0000 (16:59 +0100)
16 files changed:
.idea/libraries/jediterm_pty.xml [new file with mode: 0644]
lib/jediterm-pty-2.5.jar [moved from plugins/terminal/lib/jediterm-pty-2.2.1.jar with 77% similarity]
lib/src/jediterm-pty-2.5-src.jar [new file with mode: 0644]
platform/platform-impl/platform-impl.iml
platform/platform-impl/src/com/intellij/terminal/AppendableTerminalDataStream.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/terminal/JBTerminalPanel.java [moved from plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalPanel.java with 94% similarity]
platform/platform-impl/src/com/intellij/terminal/JBTerminalSchemeColorPalette.java [moved from plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalSchemeColorPalette.java with 85% similarity]
platform/platform-impl/src/com/intellij/terminal/JBTerminalStarter.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/terminal/JBTerminalSystemSettingsProviderBase.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/terminal/JBTerminalWidget.java [moved from plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalWidget.java with 66% similarity]
platform/platform-impl/src/com/intellij/terminal/TerminalSettingsListener.java [new file with mode: 0644]
plugins/terminal/src/org/jetbrains/plugins/terminal/JBTabbedTerminalWidget.java
plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalStarter.java [deleted file]
plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalSystemSettingsProvider.java
plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalSettingsListener.java [deleted file]
plugins/terminal/terminal.iml

diff --git a/.idea/libraries/jediterm_pty.xml b/.idea/libraries/jediterm_pty.xml
new file mode 100644 (file)
index 0000000..7101665
--- /dev/null
@@ -0,0 +1,11 @@
+<component name="libraryTable">
+  <library name="jediterm-pty">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/lib/jediterm-pty-2.5.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$PROJECT_DIR$/lib/src/jediterm-pty-2.5-src.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
similarity index 77%
rename from plugins/terminal/lib/jediterm-pty-2.2.1.jar
rename to lib/jediterm-pty-2.5.jar
index 5a6a71e586818e42adb013ca624d89e0f9c73246..a3b6f5256cfe2ff898217a0dfcd1fb554b660b4c 100644 (file)
Binary files a/plugins/terminal/lib/jediterm-pty-2.2.1.jar and b/lib/jediterm-pty-2.5.jar differ
diff --git a/lib/src/jediterm-pty-2.5-src.jar b/lib/src/jediterm-pty-2.5-src.jar
new file mode 100644 (file)
index 0000000..fea6e76
Binary files /dev/null and b/lib/src/jediterm-pty-2.5-src.jar differ
index 84f591598820df6d83aff3235983a085e8e5c5e3..05eeb9d959ad8f9c76f3c65e77329b894a92991d 100644 (file)
@@ -48,5 +48,6 @@
     <orderEntry type="library" name="pty4j" level="project" />
     <orderEntry type="module" module-name="credential-store" scope="RUNTIME" />
     <orderEntry type="library" exported="" name="StreamEx" level="project" />
+    <orderEntry type="library" name="jediterm-pty" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/platform/platform-impl/src/com/intellij/terminal/AppendableTerminalDataStream.java b/platform/platform-impl/src/com/intellij/terminal/AppendableTerminalDataStream.java
new file mode 100644 (file)
index 0000000..dbd072e
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.terminal;
+
+import com.jediterm.terminal.TerminalDataStream;
+
+import java.io.IOException;
+import java.util.concurrent.LinkedBlockingDeque;
+
+/**
+ * @author traff
+ */
+public class AppendableTerminalDataStream implements TerminalDataStream, Appendable {
+  private LinkedBlockingDeque<Character> myQueue = new LinkedBlockingDeque<>(10000000);
+
+  @Override
+  public char getChar() throws IOException {
+    try {
+      return myQueue.take();
+    }
+    catch (InterruptedException e) {
+      throw new IOException(e);
+    }
+  }
+
+  @Override
+  public void pushChar(char c) throws IOException {
+    myQueue.push(c);
+  }
+
+  @Override
+  public String readNonControlCharacters(int maxLength) throws IOException {
+    StringBuilder sb = new StringBuilder();
+    while (sb.length() < maxLength) {
+      Character c = myQueue.peek();
+      if (c == null || c.charValue() < 32) {
+        break;
+      }
+      sb.append(myQueue.poll());
+    }
+
+    return sb.toString();
+  }
+
+  @Override
+  public void pushBackBuffer(char[] chars, int length) throws IOException {
+    for (int i = 0; i < length; i++) {
+      myQueue.addFirst(chars[length - i - i]);
+    }
+  }
+
+  @Override
+  public Appendable append(CharSequence csq) throws IOException {
+    for (int i = 0; i<csq.length(); i++) {
+      append(csq.charAt(i));
+    }
+    return this;
+  }
+
+  @Override
+  public Appendable append(CharSequence csq, int start, int end) throws IOException {
+    for (int i = start; i<end; i++) {
+      append(csq.charAt(i));
+    }
+
+    return this;
+  }
+
+  @Override
+  public Appendable append(char c) throws IOException {
+    try {
+      myQueue.put(c);
+    }
+    catch (InterruptedException e) {
+      throw new IOException(e);
+    }
+    return this;
+  }
+}
similarity index 94%
rename from plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalPanel.java
rename to platform/platform-impl/src/com/intellij/terminal/JBTerminalPanel.java
index 72422034bea0748c399e273357a1a84e754a2bd2..5d90bc70352cb21575c4562ab9c4bbcadfdf3746 100644 (file)
@@ -17,9 +17,8 @@
 /* -*-mode:java; c-basic-offset:2; -*- */
 
 
-package org.jetbrains.plugins.terminal;
+package com.intellij.terminal;
 
-import com.google.common.base.Predicate;
 import com.google.common.collect.Lists;
 import com.intellij.ide.GeneralSettings;
 import com.intellij.ide.IdeEventQueue;
@@ -32,6 +31,7 @@ import com.intellij.openapi.editor.impl.FontInfo;
 import com.intellij.openapi.fileEditor.FileDocumentManager;
 import com.intellij.openapi.ide.CopyPasteManager;
 import com.intellij.openapi.project.DumbAwareAction;
+import com.intellij.openapi.vfs.LocalFileSystem;
 import com.intellij.util.JBHiDPIScaledImage;
 import com.intellij.util.RetinaImage;
 import com.intellij.util.ui.UIUtil;
@@ -90,25 +90,17 @@ public class JBTerminalPanel extends TerminalPanel implements FocusListener, Ter
     "Switcher"
   };
 
-  private final JBTerminalSystemSettingsProvider mySettingsProvider;
+  private final JBTerminalSystemSettingsProviderBase mySettingsProvider;
 
   private List<AnAction> myActionsToSkip;
 
-  public JBTerminalPanel(@NotNull JBTerminalSystemSettingsProvider settingsProvider,
+  public JBTerminalPanel(@NotNull JBTerminalSystemSettingsProviderBase settingsProvider,
                          @NotNull TerminalTextBuffer backBuffer,
                          @NotNull StyleState styleState) {
     super(settingsProvider, backBuffer, styleState);
 
     mySettingsProvider = settingsProvider;
 
-    JBTabbedTerminalWidget.convertActions(this, getActions(), new Predicate<KeyEvent>() {
-      @Override
-      public boolean apply(KeyEvent input) {
-        JBTerminalPanel.this.handleKeyEvent(input);
-        return true;
-      }
-    });
-
     registerKeymapActions(this);
 
     addFocusListener(this);
@@ -255,7 +247,7 @@ public class JBTerminalPanel extends TerminalPanel implements FocusListener, Ter
   }
 
   private void installKeyDispatcher() {
-    if (TerminalOptionsProvider.Companion.getInstance().overrideIdeShortcuts()) {
+    if (mySettingsProvider.overrideIdeShortcuts()) {
       myActionsToSkip = setupActionsToSkip();
       IdeEventQueue.getInstance().addDispatcher(this, this);
     }
@@ -283,7 +275,7 @@ public class JBTerminalPanel extends TerminalPanel implements FocusListener, Ter
       IdeEventQueue.getInstance().removeDispatcher(this);
     }
 
-    JBTerminalStarter.refreshAfterExecution();
+    refreshAfterExecution();
   }
 
   @Override
@@ -307,5 +299,12 @@ public class JBTerminalPanel extends TerminalPanel implements FocusListener, Ter
     super.dispose();
     mySettingsProvider.removeListener(this);
   }
+
+  public static void refreshAfterExecution() {
+    if (GeneralSettings.getInstance().isSyncOnFrameActivation()) {
+      //we need to refresh local file system after a command has been executed in the terminal
+      LocalFileSystem.getInstance().refresh(true);
+    }
+  }
 }
 
similarity index 85%
rename from plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalSchemeColorPalette.java
rename to platform/platform-impl/src/com/intellij/terminal/JBTerminalSchemeColorPalette.java
index 340668a237dac4913f36a2228aabf95659c4ccad..4309a90fd9c618d5208d495d862d8474ce8fd8fb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.jetbrains.plugins.terminal;
+package com.intellij.terminal;
 
 import com.intellij.execution.process.ColoredOutputTypeRegistry;
-import com.intellij.execution.process.ConsoleHighlighter;
 import com.intellij.openapi.editor.colors.EditorColorsScheme;
 import com.jediterm.terminal.emulator.ColorPalette;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
 
 import java.awt.*;
 
diff --git a/platform/platform-impl/src/com/intellij/terminal/JBTerminalStarter.java b/platform/platform-impl/src/com/intellij/terminal/JBTerminalStarter.java
new file mode 100644 (file)
index 0000000..a1c1516
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.terminal;
+
+import com.jediterm.terminal.*;
+import com.jediterm.terminal.emulator.JediEmulator;
+
+/**
+ * @author traff
+ */
+public class JBTerminalStarter extends TerminalStarter {
+  public JBTerminalStarter(Terminal terminal, TtyConnector ttyConnector) {
+    super(terminal, ttyConnector, new TtyBasedArrayDataStream(ttyConnector));
+  }
+
+  @Override
+  protected JediEmulator createEmulator(TerminalDataStream dataStream, Terminal terminal) {
+    return new JediEmulator(dataStream, terminal) {
+      @Override
+      protected void unsupported(char... sequenceChars) {
+        if (sequenceChars[0] == 7) { //ESC BEL
+          JBTerminalPanel.refreshAfterExecution();
+        }
+        else {
+          super.unsupported();
+        }
+      }
+    };
+  }
+}
diff --git a/platform/platform-impl/src/com/intellij/terminal/JBTerminalSystemSettingsProviderBase.java b/platform/platform-impl/src/com/intellij/terminal/JBTerminalSystemSettingsProviderBase.java
new file mode 100644 (file)
index 0000000..f9e9a75
--- /dev/null
@@ -0,0 +1,482 @@
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.terminal;
+
+import com.intellij.execution.ui.ConsoleViewContentType;
+import com.intellij.ide.ui.UISettings;
+import com.intellij.ide.ui.UISettingsListener;
+import com.intellij.openapi.Disposable;
+import com.intellij.openapi.actionSystem.KeyboardShortcut;
+import com.intellij.openapi.actionSystem.Shortcut;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.editor.colors.*;
+import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
+import com.intellij.openapi.editor.markup.TextAttributes;
+import com.intellij.openapi.keymap.KeymapManager;
+import com.intellij.openapi.options.FontSize;
+import com.intellij.openapi.util.registry.Registry;
+import com.intellij.util.containers.HashMap;
+import com.intellij.util.containers.HashSet;
+import com.intellij.util.messages.MessageBusConnection;
+import com.jediterm.terminal.TerminalColor;
+import com.jediterm.terminal.TextStyle;
+import com.jediterm.terminal.emulator.ColorPalette;
+import com.jediterm.terminal.ui.settings.DefaultTabbedSettingsProvider;
+import org.jdom.Element;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.*;
+import java.util.List;
+
+/**
+ * @author traff
+ */
+public class JBTerminalSystemSettingsProviderBase extends DefaultTabbedSettingsProvider implements Disposable {
+  protected final MyColorSchemeDelegate myColorScheme;
+
+  public JBTerminalSystemSettingsProviderBase() {
+    myColorScheme = createBoundColorSchemeDelegate(null);
+
+    MessageBusConnection connection = ApplicationManager.getApplication().getMessageBus().connect(this);
+    connection.subscribe(UISettingsListener.TOPIC, new UISettingsListener() {
+      @Override
+      public void uiSettingsChanged(UISettings uiSettings) {
+        int size = consoleFontSize(JBTerminalSystemSettingsProviderBase.this.myColorScheme);
+
+        if (myColorScheme.getConsoleFontSize() != size) {
+          myColorScheme.setConsoleFontSize(size);
+          fireFontChanged();
+        }
+      }
+    });
+    connection.subscribe(EditorColorsManager.TOPIC, new EditorColorsListener() {
+      @Override
+      public void globalSchemeChange(EditorColorsScheme scheme) {
+        myColorScheme.updateGlobalScheme(scheme);
+        fireFontChanged();
+      }
+    });
+  }
+
+  private Set<TerminalSettingsListener> myListeners = new HashSet<>();
+
+  @Override
+  public KeyStroke[] getCopyKeyStrokes() {
+    return getKeyStrokesByActionId("$Copy");
+  }
+
+  @Override
+  public KeyStroke[] getPasteKeyStrokes() {
+    return getKeyStrokesByActionId("$Paste");
+  }
+
+  @Override
+  public KeyStroke[] getNextTabKeyStrokes() {
+    return getKeyStrokesByActionId("NextTab");
+  }
+
+  @Override
+  public KeyStroke[] getPreviousTabKeyStrokes() {
+    return getKeyStrokesByActionId("PreviousTab");
+  }
+
+  @Override
+  public KeyStroke[] getFindKeyStrokes() {
+    return getKeyStrokesByActionId("Find");
+  }
+
+  @Override
+  public ColorPalette getTerminalColorPalette() {
+    return new JBTerminalSchemeColorPalette(myColorScheme);
+  }
+
+  private KeyStroke[] getKeyStrokesByActionId(String actionId) {
+    java.util.List<KeyStroke> keyStrokes = new ArrayList<>();
+    Shortcut[] shortcuts = KeymapManager.getInstance().getActiveKeymap().getShortcuts(actionId);
+    for (Shortcut sc : shortcuts) {
+      if (sc instanceof KeyboardShortcut) {
+        KeyStroke ks = ((KeyboardShortcut)sc).getFirstKeyStroke();
+        keyStrokes.add(ks);
+      }
+    }
+
+    return keyStrokes.toArray(new KeyStroke[keyStrokes.size()]);
+  }
+
+  @Override
+  public void dispose() {
+
+  }
+
+  public void addListener(TerminalSettingsListener listener) {
+    myListeners.add(listener);
+  }
+
+  public void removeListener(TerminalSettingsListener listener) {
+    myListeners.remove(listener);
+  }
+
+  public void fireFontChanged() {
+    for (TerminalSettingsListener l : myListeners) {
+      l.fontChanged();
+    }
+  }
+
+  protected static int consoleFontSize(MyColorSchemeDelegate colorScheme) {
+    int size;
+    if (UISettings.getInstance().PRESENTATION_MODE) {
+      size = UISettings.getInstance().PRESENTATION_MODE_FONT_SIZE;
+    }
+    else {
+      size = colorScheme.getGlobal().getConsoleFontSize();
+    }
+    return size;
+  }
+
+  protected static class MyColorSchemeDelegate implements EditorColorsScheme {
+
+    private final FontPreferences myFontPreferences = new FontPreferences();
+    private final HashMap<TextAttributesKey, TextAttributes> myOwnAttributes = new HashMap<>();
+    private final HashMap<ColorKey, Color> myOwnColors = new HashMap<>();
+    private Map<EditorFontType, Font> myFontsMap = null;
+    private String myFaceName = null;
+    private EditorColorsScheme myGlobalScheme;
+
+    private int myConsoleFontSize;
+
+    protected MyColorSchemeDelegate(@Nullable final EditorColorsScheme globalScheme) {
+      updateGlobalScheme(globalScheme);
+      myConsoleFontSize = consoleFontSize(this);
+      initFonts();
+    }
+
+    private EditorColorsScheme getGlobal() {
+      return myGlobalScheme;
+    }
+
+    @NotNull
+    @Override
+    public String getName() {
+      return getGlobal().getName();
+    }
+
+
+    protected void initFonts() {
+      String consoleFontName = getConsoleFontName();
+      int consoleFontSize = getConsoleFontSize();
+      myFontPreferences.clear();
+      myFontPreferences.register(consoleFontName, consoleFontSize);
+
+      myFontsMap = new EnumMap<>(EditorFontType.class);
+
+      Font plainFont = new Font(consoleFontName, Font.PLAIN, consoleFontSize);
+      Font boldFont = new Font(consoleFontName, Font.BOLD, consoleFontSize);
+      Font italicFont = new Font(consoleFontName, Font.ITALIC, consoleFontSize);
+      Font boldItalicFont = new Font(consoleFontName, Font.BOLD | Font.ITALIC, consoleFontSize);
+
+      myFontsMap.put(EditorFontType.PLAIN, plainFont);
+      myFontsMap.put(EditorFontType.BOLD, boldFont);
+      myFontsMap.put(EditorFontType.ITALIC, italicFont);
+      myFontsMap.put(EditorFontType.BOLD_ITALIC, boldItalicFont);
+    }
+
+    @Override
+    public void setName(String name) {
+      getGlobal().setName(name);
+    }
+
+    @Override
+    public TextAttributes getAttributes(TextAttributesKey key) {
+      if (myOwnAttributes.containsKey(key)) return myOwnAttributes.get(key);
+      return getGlobal().getAttributes(key);
+    }
+
+    @Override
+    public void setAttributes(@NotNull TextAttributesKey key, TextAttributes attributes) {
+      myOwnAttributes.put(key, attributes);
+    }
+
+    @NotNull
+    @Override
+    public Color getDefaultBackground() {
+      Color color = getGlobal().getColor(ConsoleViewContentType.CONSOLE_BACKGROUND_KEY);
+      return color != null ? color : getGlobal().getDefaultBackground();
+    }
+
+    @NotNull
+    @Override
+    public Color getDefaultForeground() {
+      Color foregroundColor = getGlobal().getAttributes(ConsoleViewContentType.NORMAL_OUTPUT_KEY).getForegroundColor();
+      return foregroundColor != null ? foregroundColor : getGlobal().getDefaultForeground();
+    }
+
+    @Override
+    public Color getColor(ColorKey key) {
+      if (myOwnColors.containsKey(key)) return myOwnColors.get(key);
+      return getGlobal().getColor(key);
+    }
+
+    @Override
+    public void setColor(ColorKey key, Color color) {
+      myOwnColors.put(key, color);
+    }
+
+    @NotNull
+    @Override
+    public FontPreferences getFontPreferences() {
+      return myGlobalScheme.getFontPreferences();
+    }
+
+    @Override
+    public void setFontPreferences(@NotNull FontPreferences preferences) {
+      throw new IllegalStateException();
+    }
+
+    @Override
+    public int getEditorFontSize() {
+      return getGlobal().getEditorFontSize();
+    }
+
+    @Override
+    public void setEditorFontSize(int fontSize) {
+
+    }
+
+    @Override
+    public FontSize getQuickDocFontSize() {
+      return myGlobalScheme.getQuickDocFontSize();
+    }
+
+    @Override
+    public void setQuickDocFontSize(@NotNull FontSize fontSize) {
+      myGlobalScheme.setQuickDocFontSize(fontSize);
+    }
+
+    @Override
+    public String getEditorFontName() {
+      return getGlobal().getEditorFontName();
+    }
+
+    @Override
+    public void setEditorFontName(String fontName) {
+      throw new IllegalStateException();
+    }
+
+    @Override
+    public Font getFont(EditorFontType key) {
+      if (myFontsMap != null) {
+        Font font = myFontsMap.get(key);
+        if (font != null) return font;
+      }
+      return getGlobal().getFont(key);
+    }
+
+    @Override
+    public void setFont(EditorFontType key, Font font) {
+      if (myFontsMap == null) {
+        initFonts();
+      }
+      myFontsMap.put(key, font);
+    }
+
+    @Override
+    public float getLineSpacing() {
+      return getGlobal().getLineSpacing();
+    }
+
+    @Override
+    public void setLineSpacing(float lineSpacing) {
+      getGlobal().setLineSpacing(lineSpacing);
+    }
+
+    @Override
+    @Nullable
+    public Object clone() {
+      return null;
+    }
+
+    @Override
+    public void readExternal(Element element) {
+    }
+
+    public void updateGlobalScheme(EditorColorsScheme scheme) {
+      myFontsMap = null;
+      myGlobalScheme = scheme == null ? EditorColorsManager.getInstance().getGlobalScheme() : scheme;
+    }
+
+    @NotNull
+    @Override
+    public FontPreferences getConsoleFontPreferences() {
+      return myFontPreferences;
+    }
+
+    @Override
+    public void setConsoleFontPreferences(@NotNull FontPreferences preferences) {
+      preferences.copyTo(myFontPreferences);
+      initFonts();
+    }
+
+    @Override
+    public String getConsoleFontName() {
+      if (myFaceName == null) {
+        return getGlobal().getConsoleFontName();
+      }
+      else {
+        return myFaceName;
+      }
+    }
+
+    @Override
+    public void setConsoleFontName(String fontName) {
+      myFaceName = fontName;
+      initFonts();
+    }
+
+    @Override
+    public int getConsoleFontSize() {
+      if (myConsoleFontSize == -1) {
+        return getGlobal().getConsoleFontSize();
+      }
+      else {
+        return myConsoleFontSize;
+      }
+    }
+
+    @Override
+    public void setConsoleFontSize(int fontSize) {
+      myConsoleFontSize = fontSize;
+      initFonts();
+    }
+
+    @Override
+    public float getConsoleLineSpacing() {
+      return getGlobal().getConsoleLineSpacing();
+    }
+
+    @Override
+    public void setConsoleLineSpacing(float lineSpacing) {
+      getGlobal().setConsoleLineSpacing(lineSpacing);
+    }
+
+    @NotNull
+    @Override
+    public Properties getMetaProperties() {
+      return myGlobalScheme.getMetaProperties();
+    }
+  }
+
+  @NotNull
+  private static MyColorSchemeDelegate createBoundColorSchemeDelegate(@Nullable final EditorColorsScheme customGlobalScheme) {
+    return new MyColorSchemeDelegate(customGlobalScheme);
+  }
+
+  public EditorColorsScheme getColorScheme() {
+    return myColorScheme;
+  }
+
+  @Override
+  public float getLineSpace() {
+    return myColorScheme.getConsoleLineSpacing();
+  }
+
+  @Override
+  public TextStyle getSelectionColor() {
+    return new TextStyle(TerminalColor.awt(myColorScheme.getColor(EditorColors.SELECTION_FOREGROUND_COLOR)),
+                         TerminalColor.awt(myColorScheme.getColor(EditorColors.SELECTION_BACKGROUND_COLOR)));
+  }
+
+  @Override
+  public TextStyle getFoundPatternColor() {
+    return new TextStyle(TerminalColor.awt(myColorScheme.getAttributes(EditorColors.TEXT_SEARCH_RESULT_ATTRIBUTES).getForegroundColor()),
+                         TerminalColor.awt(myColorScheme.getAttributes(EditorColors.TEXT_SEARCH_RESULT_ATTRIBUTES).getBackgroundColor()));
+  }
+
+  @Override
+  public TextStyle getHyperlinkColor() {
+    return new TextStyle(TerminalColor.awt(myColorScheme.getAttributes(EditorColors.REFERENCE_HYPERLINK_COLOR).getForegroundColor()),
+                         TerminalColor.awt(myColorScheme.getAttributes(EditorColors.REFERENCE_HYPERLINK_COLOR).getBackgroundColor()));
+  }
+
+  @Override
+  public TextStyle getDefaultStyle() {
+    return new TextStyle(TerminalColor.awt(myColorScheme.getDefaultForeground()), TerminalColor.awt(
+      myColorScheme.getDefaultBackground()));
+  }
+
+  @Override
+  public Font getTerminalFont() {
+    Font normalFont = Font.decode(getFontName());
+
+    if (normalFont == null) {
+      normalFont = super.getTerminalFont();
+    }
+
+    normalFont = normalFont.deriveFont(getTerminalFontSize());
+
+    return normalFont;
+  }
+
+  public String getFontName() {
+    List<String> fonts = myColorScheme.getConsoleFontPreferences().getEffectiveFontFamilies();
+
+    if (fonts.size() > 0) {
+      return fonts.get(0);
+    }
+
+    return "Monospaced-14";
+  }
+
+  @Override
+  public float getTerminalFontSize() {
+    return (float)myColorScheme.getConsoleFontSize();
+  }
+
+  @Override
+  public boolean useAntialiasing() {
+    return true; // we return true here because all the settings are checked again in UiSettings.setupAntialiasing
+  }
+
+  @Override
+  public int caretBlinkingMs() {
+    if (!EditorSettingsExternalizable.getInstance().isBlinkCaret()) {
+      return 0;
+    }
+    return EditorSettingsExternalizable.getInstance().getBlinkPeriod();
+  }
+
+  @Override
+  public int getBufferMaxLinesCount() {
+    final int linesCount = Registry.get("terminal.buffer.max.lines.count").asInteger();
+    if (linesCount > 0) {
+      return linesCount;
+    }
+    else {
+      return super.getBufferMaxLinesCount();
+    }
+  }
+
+  public boolean overrideIdeShortcuts() {
+    return false;
+  }
+
+  @Override
+  public boolean useInverseSelectionColor() {
+    return false;
+  }
+}
similarity index 66%
rename from plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalWidget.java
rename to platform/platform-impl/src/com/intellij/terminal/JBTerminalWidget.java
index d765ab98e57dc2fd0f657905c0cbddf8647f162f..83c24a1ce5c8959858bdc423b3d23c540ab283bc 100644 (file)
@@ -1,6 +1,22 @@
-package org.jetbrains.plugins.terminal;
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.terminal;
 
 import com.google.common.base.Predicate;
+import com.intellij.execution.filters.Filter;
 import com.intellij.openapi.Disposable;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Disposer;
@@ -12,8 +28,8 @@ import com.intellij.util.ui.JBSwingUtilities;
 import com.intellij.util.ui.RegionPainter;
 import com.jediterm.terminal.SubstringFinder;
 import com.jediterm.terminal.TerminalStarter;
-import com.jediterm.terminal.TtyBasedArrayDataStream;
 import com.jediterm.terminal.TtyConnector;
+import com.jediterm.terminal.model.HyperlinkFilter;
 import com.jediterm.terminal.model.JediTerminal;
 import com.jediterm.terminal.model.StyleState;
 import com.jediterm.terminal.model.TerminalTextBuffer;
@@ -28,25 +44,69 @@ import java.awt.*;
 import java.awt.event.KeyEvent;
 import java.awt.event.KeyListener;
 import java.util.List;
+import java.util.stream.Collectors;
 
-public class JBTerminalWidget extends JediTermWidget implements Disposable{
+public class JBTerminalWidget extends JediTermWidget implements Disposable {
 
   private final Project myProject;
+  private final JBTerminalSystemSettingsProviderBase mySettingsProvider;
 
-  public JBTerminalWidget(Project project, JBTerminalSystemSettingsProvider settingsProvider, Disposable parent) {
-    super(settingsProvider);
+  public JBTerminalWidget(Project project, JBTerminalSystemSettingsProviderBase settingsProvider, Disposable parent) {
+    this(project, 80, 24, settingsProvider, parent);
+  }
+
+  public JBTerminalWidget(Project project, int columns, int lines, JBTerminalSystemSettingsProviderBase settingsProvider, Disposable parent) {
+    super(columns, lines, settingsProvider);
     myProject = project;
+    mySettingsProvider = settingsProvider;
+
     setName("terminal");
-    JBTabbedTerminalWidget.convertActions(this, getActions());
 
     Disposer.register(parent, this);
   }
 
+  public void addMessageFilter(Project project, Filter filter) {
+    addHyperlinkFilter(new HyperlinkFilter() {
+      @Override
+      public Result apply(String line) {
+        Filter.Result r = filter.applyFilter(line, line.length());
+        if (r != null) {
+          return new Result() {
+
+            @Override
+            public List<ResultItem> getResultItems() {
+              return r.getResultItems().stream().map((item -> new ResultItem() {
+                @Override
+                public int getStartOffset() {
+                  return item.getHighlightStartOffset();
+                }
+
+                @Override
+                public int getEndOffset() {
+                  return item.getHighlightEndOffset();
+                }
+
+                @Override
+                public void navigate() {
+                  item.getHyperlinkInfo().navigate(project);
+                }
+              })).collect(Collectors.toList());
+            }
+          };
+        }
+        else {
+          return null;
+        }
+      }
+    });
+  }
+
   @Override
   protected JBTerminalPanel createTerminalPanel(@NotNull SettingsProvider settingsProvider,
                                                 @NotNull StyleState styleState,
                                                 @NotNull TerminalTextBuffer textBuffer) {
-    JBTerminalPanel panel = new JBTerminalPanel((JBTerminalSystemSettingsProvider)settingsProvider, textBuffer, styleState);
+    JBTerminalPanel panel = new JBTerminalPanel((JBTerminalSystemSettingsProviderBase)settingsProvider, textBuffer, styleState);
+
     Disposer.register(this, panel);
     return panel;
   }
@@ -58,7 +118,7 @@ public class JBTerminalWidget extends JediTermWidget implements Disposable{
 
   @Override
   protected TerminalStarter createTerminalStarter(JediTerminal terminal, TtyConnector connector) {
-    return new JBTerminalStarter(terminal, connector, new TtyBasedArrayDataStream(connector));
+    return new JBTerminalStarter(terminal, connector);
   }
 
   @Override
@@ -89,7 +149,7 @@ public class JBTerminalWidget extends JediTermWidget implements Disposable{
   @Override
   public List<TerminalAction> getActions() {
      List<TerminalAction> actions = super.getActions();
-     if (!TerminalOptionsProvider.Companion.getInstance().overrideIdeShortcuts()) {
+     if (!mySettingsProvider.overrideIdeShortcuts()) {
        actions
          .add(new TerminalAction("EditorEscape", new KeyStroke[]{KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)}, new Predicate<KeyEvent>() {
            @Override
@@ -115,6 +175,7 @@ public class JBTerminalWidget extends JediTermWidget implements Disposable{
   protected SearchComponent createSearchComponent() {
     return new SearchComponent() {
       private final SearchTextField myTextField = new SearchTextField(false);
+
       @Override
       public String getText() {
         return myTextField.getText();
diff --git a/platform/platform-impl/src/com/intellij/terminal/TerminalSettingsListener.java b/platform/platform-impl/src/com/intellij/terminal/TerminalSettingsListener.java
new file mode 100644 (file)
index 0000000..eba0ca6
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.terminal;
+
+/**
+ * @author traff
+ */
+public interface TerminalSettingsListener {
+  void fontChanged();
+}
index 92aa38c26c9ef4865f213c55e445b405cad41ed4..eecb8bb6026f79765dfd586f9b5e4dfafa53a9f8 100644 (file)
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2000-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.jetbrains.plugins.terminal;
 
 import com.google.common.base.Predicate;
@@ -20,6 +35,8 @@ import com.intellij.openapi.wm.IdeFocusManager;
 import com.intellij.psi.PsiDirectory;
 import com.intellij.psi.PsiFile;
 import com.intellij.psi.PsiFileSystemItem;
+import com.intellij.terminal.JBTerminalSystemSettingsProviderBase;
+import com.intellij.terminal.JBTerminalWidget;
 import com.intellij.ui.SimpleColoredComponent;
 import com.intellij.ui.components.JBTextField;
 import com.intellij.ui.docking.DockManager;
@@ -48,11 +65,11 @@ import java.util.concurrent.CopyOnWriteArraySet;
 public class JBTabbedTerminalWidget extends TabbedTerminalWidget implements Disposable {
 
   private Project myProject;
-  private final JBTerminalSystemSettingsProvider mySettingsProvider;
+  private final JBTerminalSystemSettingsProviderBase mySettingsProvider;
   private Disposable myParent;
 
   public JBTabbedTerminalWidget(@NotNull Project project,
-                                @NotNull JBTerminalSystemSettingsProvider settingsProvider,
+                                @NotNull JBTerminalSystemSettingsProviderBase settingsProvider,
                                 final @NotNull Predicate<Pair<TerminalWidget, String>> createNewSessionAction, @NotNull Disposable parent) {
     super(settingsProvider, new Predicate<TerminalWidget>() {
       @Override
@@ -71,22 +88,22 @@ public class JBTabbedTerminalWidget extends TabbedTerminalWidget implements Disp
     Disposer.register(this, settingsProvider);
 
     DnDSupport.createBuilder(this).setDropHandler(new DnDDropHandler() {
-      @Override
-      public void drop(DnDEvent event) {
-        if (event.getAttachedObject() instanceof TransferableWrapper) {
-          TransferableWrapper ao = (TransferableWrapper)event.getAttachedObject();
-          if (ao != null &&
-              ao.getPsiElements() != null &&
-              ao.getPsiElements().length == 1 &&
-              ao.getPsiElements()[0] instanceof PsiFileSystemItem) {
-            PsiFileSystemItem element = (PsiFileSystemItem)ao.getPsiElements()[0];
-            PsiDirectory dir = element instanceof PsiFile ? ((PsiFile)element).getContainingDirectory() : (PsiDirectory)element;
-
-            createNewSessionAction.apply(Pair.<TerminalWidget, String>create(JBTabbedTerminalWidget.this, dir.getVirtualFile().getPath()));
-          }
-        }
-      }
-    }
+                                                    @Override
+                                                    public void drop(DnDEvent event) {
+                                                      if (event.getAttachedObject() instanceof TransferableWrapper) {
+                                                        TransferableWrapper ao = (TransferableWrapper)event.getAttachedObject();
+                                                        if (ao != null &&
+                                                            ao.getPsiElements() != null &&
+                                                            ao.getPsiElements().length == 1 &&
+                                                            ao.getPsiElements()[0] instanceof PsiFileSystemItem) {
+                                                          PsiFileSystemItem element = (PsiFileSystemItem)ao.getPsiElements()[0];
+                                                          PsiDirectory dir = element instanceof PsiFile ? ((PsiFile)element).getContainingDirectory() : (PsiDirectory)element;
+
+                                                          createNewSessionAction.apply(Pair.<TerminalWidget, String>create(JBTabbedTerminalWidget.this, dir.getVirtualFile().getPath()));
+                                                        }
+                                                      }
+                                                    }
+                                                  }
 
     ).install();
   }
@@ -120,7 +137,17 @@ public class JBTabbedTerminalWidget extends TabbedTerminalWidget implements Disp
 
   @Override
   protected JediTermWidget createInnerTerminalWidget(TabbedSettingsProvider settingsProvider) {
-    return new JBTerminalWidget(myProject, mySettingsProvider, myParent);
+    JBTerminalWidget widget = new JBTerminalWidget(myProject, mySettingsProvider, myParent);
+    convertActions(widget, widget.getActions());
+    convertActions(widget.getTerminalPanel(), widget.getTerminalPanel().getActions(), new Predicate<KeyEvent>() {
+      @Override
+      public boolean apply(KeyEvent input) {
+        widget.getTerminalPanel().handleKeyEvent(input);
+        return true;
+      }
+    });
+
+    return widget;
   }
 
   @Override
@@ -180,12 +207,12 @@ public class JBTabbedTerminalWidget extends TabbedTerminalWidget implements Disp
 
     @Override
     public int indexOfComponent(Component component) {
-      for (int i = 0; i<myTabs.getTabCount(); i++) {
+      for (int i = 0; i < myTabs.getTabCount(); i++) {
         if (component.equals(myTabs.getTabAt(i).getComponent())) {
           return i;
         }
       }
-      
+
       return -1;
     }
 
diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalStarter.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalStarter.java
deleted file mode 100644 (file)
index ef97d16..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.jetbrains.plugins.terminal;
-
-import com.intellij.ide.GeneralSettings;
-import com.intellij.openapi.vfs.LocalFileSystem;
-import com.jediterm.terminal.Terminal;
-import com.jediterm.terminal.TerminalDataStream;
-import com.jediterm.terminal.TerminalStarter;
-import com.jediterm.terminal.TtyConnector;
-import com.jediterm.terminal.emulator.JediEmulator;
-
-/**
- * @author traff
- */
-public class JBTerminalStarter extends TerminalStarter {
-
-  public JBTerminalStarter(Terminal terminal, TtyConnector ttyConnector, TerminalDataStream dataStream) {
-    super(terminal, ttyConnector, dataStream);
-  }
-
-  @Override
-  protected JediEmulator createEmulator(TerminalDataStream dataStream, Terminal terminal) {
-    return new JediEmulator(dataStream, terminal) {
-      @Override
-      protected void unsupported(char... sequenceChars) {
-        if (sequenceChars[0] == 7) { //ESC BEL
-          refreshAfterExecution();
-        }
-        else {
-          super.unsupported();
-        }
-      }
-    };
-  }
-
-  public static void refreshAfterExecution() {
-    if (GeneralSettings.getInstance().isSyncOnFrameActivation()) {
-      //we need to refresh local file system after a command has been executed in the terminal
-      LocalFileSystem.getInstance().refresh(true);
-    }
-  }
-}
index 5f452eb0bdb30f8ad34af82cc3de2627b6ceb3b8..5e028eb5e29a8904037b4da4b1df3287816af709 100644 (file)
  */
 package org.jetbrains.plugins.terminal;
 
-import com.google.common.collect.Sets;
-import com.intellij.execution.ui.ConsoleViewContentType;
-import com.intellij.ide.ui.UISettings;
-import com.intellij.ide.ui.UISettingsListener;
-import com.intellij.openapi.Disposable;
-import com.intellij.openapi.actionSystem.KeyboardShortcut;
-import com.intellij.openapi.actionSystem.Shortcut;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.editor.colors.*;
-import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
-import com.intellij.openapi.editor.markup.TextAttributes;
-import com.intellij.openapi.keymap.KeymapManager;
-import com.intellij.openapi.options.FontSize;
-import com.intellij.openapi.util.registry.Registry;
-import com.intellij.util.containers.HashMap;
-import com.intellij.util.messages.MessageBusConnection;
+import com.intellij.terminal.JBTerminalSystemSettingsProviderBase;
 import com.jediterm.pty.PtyProcessTtyConnector;
-import com.jediterm.terminal.TerminalColor;
-import com.jediterm.terminal.TextStyle;
 import com.jediterm.terminal.TtyConnector;
-import com.jediterm.terminal.emulator.ColorPalette;
-import com.jediterm.terminal.ui.settings.DefaultTabbedSettingsProvider;
-import org.jdom.Element;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.*;
-import java.awt.*;
-import java.util.*;
-import java.util.List;
 
 /**
  * @author traff
  */
-public class JBTerminalSystemSettingsProvider extends DefaultTabbedSettingsProvider implements Disposable {
-  private Set<TerminalSettingsListener> myListeners = Sets.newHashSet();
-
-  private final MyColorSchemeDelegate myColorScheme;
-
-  public JBTerminalSystemSettingsProvider() {
-    myColorScheme = createBoundColorSchemeDelegate(null);
-
-    MessageBusConnection connection = ApplicationManager.getApplication().getMessageBus().connect(this);
-    connection.subscribe(UISettingsListener.TOPIC, new UISettingsListener() {
-      @Override
-      public void uiSettingsChanged(UISettings uiSettings) {
-        int size = consoleFontSize(JBTerminalSystemSettingsProvider.this.myColorScheme);
-
-        if (myColorScheme.getConsoleFontSize() != size) {
-          myColorScheme.setConsoleFontSize(size);
-          fireFontChanged();
-        }
-      }
-    });
-    connection.subscribe(EditorColorsManager.TOPIC, new EditorColorsListener() {
-      @Override
-      public void globalSchemeChange(EditorColorsScheme scheme) {
-        myColorScheme.updateGlobalScheme(scheme);
-        fireFontChanged();
-      }
-    });
-  }
-
-  private static int consoleFontSize(MyColorSchemeDelegate colorScheme) {
-    int size;
-    if (UISettings.getInstance().PRESENTATION_MODE) {
-      size = UISettings.getInstance().PRESENTATION_MODE_FONT_SIZE;
-    }
-    else {
-      size = colorScheme.getGlobal().getConsoleFontSize();
-    }
-    return size;
-  }
-
-  @Override
-  public KeyStroke[] getCopyKeyStrokes() {
-    return getKeyStrokesByActionId("$Copy");
-  }
-
-  @Override
-  public KeyStroke[] getPasteKeyStrokes() {
-    return getKeyStrokesByActionId("$Paste");
-  }
-
-  @Override
-  public KeyStroke[] getNextTabKeyStrokes() {
-    return getKeyStrokesByActionId("NextTab");
-  }
-
-  @Override
-  public KeyStroke[] getPreviousTabKeyStrokes() {
-    return getKeyStrokesByActionId("PreviousTab");
-  }
-
-  @Override
-  public KeyStroke[] getFindKeyStrokes() {
-    return getKeyStrokesByActionId("Find");
-  }
-
-  @Override
-  public ColorPalette getTerminalColorPalette() {
-    return new JBTerminalSchemeColorPalette(myColorScheme);
-  }
-
-  private KeyStroke[] getKeyStrokesByActionId(String actionId) {
-    List<KeyStroke> keyStrokes = new ArrayList<>();
-    Shortcut[] shortcuts = KeymapManager.getInstance().getActiveKeymap().getShortcuts(actionId);
-    for (Shortcut sc : shortcuts) {
-      if (sc instanceof KeyboardShortcut) {
-        KeyStroke ks = ((KeyboardShortcut)sc).getFirstKeyStroke();
-        keyStrokes.add(ks);
-      }
-    }
-
-    return keyStrokes.toArray(new KeyStroke[keyStrokes.size()]);
-  }
-
+public class JBTerminalSystemSettingsProvider extends JBTerminalSystemSettingsProviderBase {
   @Override
   public boolean shouldCloseTabOnLogout(TtyConnector ttyConnector) {
     return TerminalOptionsProvider.Companion.getInstance().closeSessionOnLogout();
@@ -147,90 +38,6 @@ public class JBTerminalSystemSettingsProvider extends DefaultTabbedSettingsProvi
     }
   }
 
-  @Override
-  public float getLineSpace() {
-    return myColorScheme.getConsoleLineSpacing();
-  }
-
-  @Override
-  public boolean useInverseSelectionColor() {
-    return false;
-  }
-
-  @Override
-  public TextStyle getSelectionColor() {
-    return new TextStyle(TerminalColor.awt(myColorScheme.getColor(EditorColors.SELECTION_FOREGROUND_COLOR)),
-                         TerminalColor.awt(myColorScheme.getColor(EditorColors.SELECTION_BACKGROUND_COLOR)));
-  }
-
-  @Override
-  public TextStyle getFoundPatternColor() {
-    return new TextStyle(TerminalColor.awt(myColorScheme.getAttributes(EditorColors.TEXT_SEARCH_RESULT_ATTRIBUTES).getForegroundColor()),
-                         TerminalColor.awt(myColorScheme.getAttributes(EditorColors.TEXT_SEARCH_RESULT_ATTRIBUTES).getBackgroundColor()));
-  }
-
-  @Override
-  public TextStyle getDefaultStyle() {
-    return new TextStyle(TerminalColor.awt(myColorScheme.getDefaultForeground()), TerminalColor.awt(
-      myColorScheme.getDefaultBackground()));
-  }
-
-  @Override
-  public Font getTerminalFont() {
-    Font normalFont = Font.decode(getFontName());
-
-    if (normalFont == null) {
-      normalFont = super.getTerminalFont();
-    }
-
-    normalFont = normalFont.deriveFont(getTerminalFontSize());
-
-    return normalFont;
-  }
-
-  public String getFontName() {
-    List<String> fonts = myColorScheme.getConsoleFontPreferences().getEffectiveFontFamilies();
-
-    if (fonts.size() > 0) {
-      return fonts.get(0);
-    }
-
-    return "Monospaced-14";
-  }
-
-  @Override
-  public float getTerminalFontSize() {
-    return (float)myColorScheme.getConsoleFontSize();
-  }
-
-
-  @Override
-  public boolean useAntialiasing() {
-    return true; // we return true here because all the settings are checked again in UiSettings.setupAntialiasing
-  }
-
-  @Override
-  public int caretBlinkingMs() {
-    if (!EditorSettingsExternalizable.getInstance().isBlinkCaret()) {
-      return 0;
-    }
-    return EditorSettingsExternalizable.getInstance().getBlinkPeriod();
-  }
-
-  @Override
-  public int getBufferMaxLinesCount() {
-    final int linesCount = Registry.get("terminal.buffer.max.lines.count").asInteger();
-    if (linesCount > 0) {
-      return linesCount;
-    }
-    else {
-      return super.getBufferMaxLinesCount();
-    }
-  }
-
-  public EditorColorsScheme getColorScheme() {
-    return myColorScheme;
-  }
 
   @Override
   public boolean audibleBell() {
@@ -252,264 +59,13 @@ public class JBTerminalSystemSettingsProvider extends DefaultTabbedSettingsProvi
     return TerminalOptionsProvider.Companion.getInstance().pasteOnMiddleMouseButton();
   }
 
-  @NotNull
-  private static MyColorSchemeDelegate createBoundColorSchemeDelegate(@Nullable final EditorColorsScheme customGlobalScheme) {
-    return new MyColorSchemeDelegate(customGlobalScheme);
-  }
-
   @Override
   public boolean forceActionOnMouseReporting() {
     return true;
   }
 
   @Override
-  public void dispose() {
-
-  }
-
-  private static class MyColorSchemeDelegate implements EditorColorsScheme {
-
-    private final FontPreferences myFontPreferences = new FontPreferences();
-    private final HashMap<TextAttributesKey, TextAttributes> myOwnAttributes = new HashMap<>();
-    private final HashMap<ColorKey, Color> myOwnColors = new HashMap<>();
-    private Map<EditorFontType, Font> myFontsMap = null;
-    private String myFaceName = null;
-    private EditorColorsScheme myGlobalScheme;
-
-    private int myConsoleFontSize;
-
-    private MyColorSchemeDelegate(@Nullable final EditorColorsScheme globalScheme) {
-      updateGlobalScheme(globalScheme);
-      myConsoleFontSize = consoleFontSize(this);
-      initFonts();
-    }
-
-    private EditorColorsScheme getGlobal() {
-      return myGlobalScheme;
-    }
-
-    @NotNull
-    @Override
-    public String getName() {
-      return getGlobal().getName();
-    }
-
-
-    protected void initFonts() {
-      String consoleFontName = getConsoleFontName();
-      int consoleFontSize = getConsoleFontSize();
-      myFontPreferences.clear();
-      myFontPreferences.register(consoleFontName, consoleFontSize);
-
-      myFontsMap = new EnumMap<>(EditorFontType.class);
-
-      Font plainFont = new Font(consoleFontName, Font.PLAIN, consoleFontSize);
-      Font boldFont = new Font(consoleFontName, Font.BOLD, consoleFontSize);
-      Font italicFont = new Font(consoleFontName, Font.ITALIC, consoleFontSize);
-      Font boldItalicFont = new Font(consoleFontName, Font.BOLD | Font.ITALIC, consoleFontSize);
-
-      myFontsMap.put(EditorFontType.PLAIN, plainFont);
-      myFontsMap.put(EditorFontType.BOLD, boldFont);
-      myFontsMap.put(EditorFontType.ITALIC, italicFont);
-      myFontsMap.put(EditorFontType.BOLD_ITALIC, boldItalicFont);
-    }
-
-    @Override
-    public void setName(String name) {
-      getGlobal().setName(name);
-    }
-
-    @Override
-    public TextAttributes getAttributes(TextAttributesKey key) {
-      if (myOwnAttributes.containsKey(key)) return myOwnAttributes.get(key);
-      return getGlobal().getAttributes(key);
-    }
-
-    @Override
-    public void setAttributes(@NotNull TextAttributesKey key, TextAttributes attributes) {
-      myOwnAttributes.put(key, attributes);
-    }
-
-    @NotNull
-    @Override
-    public Color getDefaultBackground() {
-      Color color = getGlobal().getColor(ConsoleViewContentType.CONSOLE_BACKGROUND_KEY);
-      return color != null ? color : getGlobal().getDefaultBackground();
-    }
-
-    @NotNull
-    @Override
-    public Color getDefaultForeground() {
-      Color foregroundColor = getGlobal().getAttributes(ConsoleViewContentType.NORMAL_OUTPUT_KEY).getForegroundColor();
-      return foregroundColor != null ? foregroundColor : getGlobal().getDefaultForeground();
-    }
-
-    @Override
-    public Color getColor(ColorKey key) {
-      if (myOwnColors.containsKey(key)) return myOwnColors.get(key);
-      return getGlobal().getColor(key);
-    }
-
-    @Override
-    public void setColor(ColorKey key, Color color) {
-      myOwnColors.put(key, color);
-    }
-
-    @NotNull
-    @Override
-    public FontPreferences getFontPreferences() {
-      return myGlobalScheme.getFontPreferences();
-    }
-
-    @Override
-    public void setFontPreferences(@NotNull FontPreferences preferences) {
-      throw new IllegalStateException();
-    }
-
-    @Override
-    public int getEditorFontSize() {
-      return getGlobal().getEditorFontSize();
-    }
-
-    @Override
-    public void setEditorFontSize(int fontSize) {
-
-    }
-
-    @Override
-    public FontSize getQuickDocFontSize() {
-      return myGlobalScheme.getQuickDocFontSize();
-    }
-
-    @Override
-    public void setQuickDocFontSize(@NotNull FontSize fontSize) {
-      myGlobalScheme.setQuickDocFontSize(fontSize);
-    }
-
-    @Override
-    public String getEditorFontName() {
-      return getGlobal().getEditorFontName();
-    }
-
-    @Override
-    public void setEditorFontName(String fontName) {
-      throw new IllegalStateException();
-    }
-
-    @Override
-    public Font getFont(EditorFontType key) {
-      if (myFontsMap != null) {
-        Font font = myFontsMap.get(key);
-        if (font != null) return font;
-      }
-      return getGlobal().getFont(key);
-    }
-
-    @Override
-    public void setFont(EditorFontType key, Font font) {
-      if (myFontsMap == null) {
-        initFonts();
-      }
-      myFontsMap.put(key, font);
-    }
-
-    @Override
-    public float getLineSpacing() {
-      return getGlobal().getLineSpacing();
-    }
-
-    @Override
-    public void setLineSpacing(float lineSpacing) {
-      getGlobal().setLineSpacing(lineSpacing);
-    }
-
-    @Override
-    @Nullable
-    public Object clone() {
-      return null;
-    }
-
-    @Override
-    public void readExternal(Element element) {
-    }
-
-    public void updateGlobalScheme(EditorColorsScheme scheme) {
-      myFontsMap = null;
-      myGlobalScheme = scheme == null ? EditorColorsManager.getInstance().getGlobalScheme() : scheme;
-    }
-
-    @NotNull
-    @Override
-    public FontPreferences getConsoleFontPreferences() {
-      return myFontPreferences;
-    }
-
-    @Override
-    public void setConsoleFontPreferences(@NotNull FontPreferences preferences) {
-      preferences.copyTo(myFontPreferences);
-      initFonts();
-    }
-
-    @Override
-    public String getConsoleFontName() {
-      if (myFaceName == null) {
-        return getGlobal().getConsoleFontName();
-      }
-      else {
-        return myFaceName;
-      }
-    }
-
-    @Override
-    public void setConsoleFontName(String fontName) {
-      myFaceName = fontName;
-      initFonts();
-    }
-
-    @Override
-    public int getConsoleFontSize() {
-      if (myConsoleFontSize == -1) {
-        return getGlobal().getConsoleFontSize();
-      }
-      else {
-        return myConsoleFontSize;
-      }
-    }
-
-    @Override
-    public void setConsoleFontSize(int fontSize) {
-      myConsoleFontSize = fontSize;
-      initFonts();
-    }
-
-    @Override
-    public float getConsoleLineSpacing() {
-      return getGlobal().getConsoleLineSpacing();
-    }
-
-    @Override
-    public void setConsoleLineSpacing(float lineSpacing) {
-      getGlobal().setConsoleLineSpacing(lineSpacing);
-    }
-
-    @NotNull
-    @Override
-    public Properties getMetaProperties() {
-      return myGlobalScheme.getMetaProperties();
-    }
-  }
-
-  public void addListener(TerminalSettingsListener listener) {
-    myListeners.add(listener);
-  }
-
-  public void removeListener(TerminalSettingsListener listener) {
-    myListeners.remove(listener);
-  }
-
-  public void fireFontChanged() {
-    for (TerminalSettingsListener l : myListeners) {
-      l.fontChanged();
-    }
+  public boolean overrideIdeShortcuts() {
+    return TerminalOptionsProvider.Companion.getInstance().overrideIdeShortcuts();
   }
 }
diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalSettingsListener.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalSettingsListener.java
deleted file mode 100644 (file)
index 7569880..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.jetbrains.plugins.terminal;
-
-/**
- * @author traff
- */
-public interface TerminalSettingsListener {
-  void fontChanged();
-}
index 16af80f79fc3d0af10d785115f023eed1e10f2f5..f88a4835f6904c3b81103ec09f259fc014e44741 100644 (file)
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="module" module-name="lang-api" />
     <orderEntry type="module" module-name="platform-impl" />
-    <orderEntry type="module-library" exported="">
-      <library name="jediterm-pty">
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/jediterm-pty-2.2.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
     <orderEntry type="library" name="Guava" level="project" />
     <orderEntry type="library" name="pty4j" level="project" />
     <orderEntry type="library" name="jna" level="project" />
@@ -27,5 +18,7 @@
     <orderEntry type="module" module-name="remote-servers-api" />
     <orderEntry type="module" module-name="remote-servers-impl" />
     <orderEntry type="library" scope="TEST" name="JUnit4" level="project" />
+    <orderEntry type="module" module-name="testFramework" scope="TEST" />
+    <orderEntry type="library" name="jediterm-pty" level="project" />
   </component>
 </module>
\ No newline at end of file