From 749159be56e1b335016075525cd4d322ea6fa848 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Sat, 3 Feb 2018 21:47:08 +0100 Subject: [PATCH] Highlight python stacktraces in terminal by default (IDEA-118566) --- .../JBTerminalSystemSettingsProviderBase.java | 2 -- .../intellij/terminal/JBTerminalWidget.java | 7 +++++ .../terminal/JBTabbedTerminalWidget.java | 3 -- .../JBTerminalSystemSettingsProvider.java | 8 +++++ .../terminal/TerminalOptionsProvider.kt | 10 +++++++ .../terminal/TerminalSettingsPanel.form | 29 +++++++++++++++++-- .../terminal/TerminalSettingsPanel.java | 6 +++- python/src/META-INF/python-core-common.xml | 2 ++ .../python/run/PyMessageFilterProvider.java | 18 ++++++++++++ 9 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 python/src/com/jetbrains/python/run/PyMessageFilterProvider.java diff --git a/platform/platform-impl/src/com/intellij/terminal/JBTerminalSystemSettingsProviderBase.java b/platform/platform-impl/src/com/intellij/terminal/JBTerminalSystemSettingsProviderBase.java index 2ba11f6cb95e..56cad9172cbb 100644 --- a/platform/platform-impl/src/com/intellij/terminal/JBTerminalSystemSettingsProviderBase.java +++ b/platform/platform-impl/src/com/intellij/terminal/JBTerminalSystemSettingsProviderBase.java @@ -28,8 +28,6 @@ import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.options.FontSize; import com.intellij.openapi.util.registry.Registry; -import java.util.HashMap; - import com.intellij.util.messages.MessageBusConnection; import com.jediterm.terminal.TerminalColor; import com.jediterm.terminal.TextStyle; diff --git a/platform/platform-impl/src/com/intellij/terminal/JBTerminalWidget.java b/platform/platform-impl/src/com/intellij/terminal/JBTerminalWidget.java index 8b8e567684a1..ecb42a7285a8 100644 --- a/platform/platform-impl/src/com/intellij/terminal/JBTerminalWidget.java +++ b/platform/platform-impl/src/com/intellij/terminal/JBTerminalWidget.java @@ -15,6 +15,7 @@ */ package com.intellij.terminal; +import com.intellij.execution.filters.ConsoleFilterProvider; import com.intellij.execution.filters.Filter; import com.intellij.openapi.Disposable; import com.intellij.openapi.project.Project; @@ -69,6 +70,12 @@ public class JBTerminalWidget extends JediTermWidget implements Disposable { setName("terminal"); Disposer.register(parent, this); + + for (ConsoleFilterProvider eachProvider : ConsoleFilterProvider.FILTER_PROVIDERS.getExtensions()) { + for (Filter filter: eachProvider.getDefaultFilters(project)) { + addMessageFilter(project, filter); + } + } } @Override diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTabbedTerminalWidget.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTabbedTerminalWidget.java index e147cfcef4b8..9a859f1fce56 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTabbedTerminalWidget.java +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTabbedTerminalWidget.java @@ -16,7 +16,6 @@ package org.jetbrains.plugins.terminal; import com.google.common.base.Predicate; -import com.intellij.execution.filters.UrlFilter; import com.intellij.ide.dnd.DnDDropHandler; import com.intellij.ide.dnd.DnDEvent; import com.intellij.ide.dnd.DnDSupport; @@ -129,8 +128,6 @@ public class JBTabbedTerminalWidget extends TabbedTerminalWidget implements Disp protected JediTermWidget createInnerTerminalWidget(TabbedSettingsProvider settingsProvider) { JBTerminalWidget widget = new JBTerminalWidget(myProject, mySettingsProvider, myParent); - widget.addMessageFilter(myProject, new UrlFilter()); - convertActions(widget, widget.getActions()); convertActions(widget.getTerminalPanel(), widget.getTerminalPanel().getActions(), input -> { widget.getTerminalPanel().handleKeyEvent(input); diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalSystemSettingsProvider.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalSystemSettingsProvider.java index 5e028eb5e29a..64f12d8ebb79 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalSystemSettingsProvider.java +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/JBTerminalSystemSettingsProvider.java @@ -17,6 +17,7 @@ package org.jetbrains.plugins.terminal; import com.intellij.terminal.JBTerminalSystemSettingsProviderBase; import com.jediterm.pty.PtyProcessTtyConnector; +import com.jediterm.terminal.HyperlinkStyle; import com.jediterm.terminal.TtyConnector; /** @@ -68,4 +69,11 @@ public class JBTerminalSystemSettingsProvider extends JBTerminalSystemSettingsPr public boolean overrideIdeShortcuts() { return TerminalOptionsProvider.Companion.getInstance().overrideIdeShortcuts(); } + + @Override + public HyperlinkStyle.HighlightMode getHyperlinkHighlightingMode() { + return TerminalOptionsProvider.Companion.getInstance().highlightHyperlinks() + ? HyperlinkStyle.HighlightMode.ALWAYS + : HyperlinkStyle.HighlightMode.HOVER; + } } diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalOptionsProvider.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalOptionsProvider.kt index aaee01441908..c9fa0ff15c79 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalOptionsProvider.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalOptionsProvider.kt @@ -46,6 +46,7 @@ class TerminalOptionsProvider : PersistentStateComponent - + @@ -49,7 +49,7 @@ - + @@ -262,12 +262,35 @@ - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalSettingsPanel.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalSettingsPanel.java index 143a62e132b2..8055f930406e 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalSettingsPanel.java +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/TerminalSettingsPanel.java @@ -51,6 +51,7 @@ public class TerminalSettingsPanel { private JPanel myProjectSettingsPanel; private JPanel myGlobalSettingsPanel; private JPanel myConfigurablesPanel; + private JBCheckBox myHighlightHyperlinks; private TerminalOptionsProvider myOptionsProvider; private TerminalProjectOptionsProvider myProjectOptionsProvider; @@ -124,7 +125,8 @@ public class TerminalSettingsPanel { || (myCopyOnSelectionCheckBox.isSelected() != myOptionsProvider.copyOnSelection()) || (myPasteOnMiddleButtonCheckBox.isSelected() != myOptionsProvider.pasteOnMiddleMouseButton()) || (myOverrideIdeShortcuts.isSelected() != myOptionsProvider.overrideIdeShortcuts()) - || (myShellIntegration.isSelected() != myOptionsProvider.shellIntegration()) || + || (myShellIntegration.isSelected() != myOptionsProvider.shellIntegration()) + || (myHighlightHyperlinks.isSelected() != myOptionsProvider.highlightHyperlinks()) || myConfigurables.stream().anyMatch(c -> c.isModified()); } @@ -139,6 +141,7 @@ public class TerminalSettingsPanel { myOptionsProvider.setPasteOnMiddleMouseButton(myPasteOnMiddleButtonCheckBox.isSelected()); myOptionsProvider.setOverrideIdeShortcuts(myOverrideIdeShortcuts.isSelected()); myOptionsProvider.setShellIntegration(myShellIntegration.isSelected()); + myOptionsProvider.setHighlightHyperlinks(myHighlightHyperlinks.isSelected()); myConfigurables.forEach(c -> { try { c.apply(); @@ -160,6 +163,7 @@ public class TerminalSettingsPanel { myPasteOnMiddleButtonCheckBox.setSelected(myOptionsProvider.pasteOnMiddleMouseButton()); myOverrideIdeShortcuts.setSelected(myOptionsProvider.overrideIdeShortcuts()); myShellIntegration.setSelected(myOptionsProvider.shellIntegration()); + myHighlightHyperlinks.setSelected(myOptionsProvider.highlightHyperlinks()); myConfigurables.forEach(c -> c.reset()); } diff --git a/python/src/META-INF/python-core-common.xml b/python/src/META-INF/python-core-common.xml index a07bb8dc0fb0..0674591086d1 100644 --- a/python/src/META-INF/python-core-common.xml +++ b/python/src/META-INF/python-core-common.xml @@ -631,6 +631,8 @@ + + diff --git a/python/src/com/jetbrains/python/run/PyMessageFilterProvider.java b/python/src/com/jetbrains/python/run/PyMessageFilterProvider.java new file mode 100644 index 000000000000..8edc85aaf37e --- /dev/null +++ b/python/src/com/jetbrains/python/run/PyMessageFilterProvider.java @@ -0,0 +1,18 @@ +// Copyright 2000-2018 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.jetbrains.python.run; + +import com.intellij.execution.filters.ConsoleFilterProvider; +import com.intellij.execution.filters.Filter; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; + +/** + * @author traff + */ +public class PyMessageFilterProvider implements ConsoleFilterProvider { + @NotNull + @Override + public Filter[] getDefaultFilters(@NotNull Project project) { + return new Filter[]{new PythonTracebackFilter(project)}; + } +}