Highlight python stacktraces in terminal by default (IDEA-118566)

This commit is contained in:
Dmitry Trofimov
2018-02-03 21:47:08 +01:00
parent a006621678
commit 749159be56
9 changed files with 76 additions and 9 deletions
@@ -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;
@@ -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
@@ -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);
@@ -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;
}
}
@@ -46,6 +46,7 @@ class TerminalOptionsProvider : PersistentStateComponent<TerminalOptionsProvider
myState.myOverrideIdeShortcuts = state.myOverrideIdeShortcuts
myState.myShellIntegration = state.myShellIntegration
myState.myShellPath = state.myShellPath
myState.myHighlightHyperlinks = state.myHighlightHyperlinks
}
fun closeSessionOnLogout(): Boolean {
@@ -92,6 +93,7 @@ class TerminalOptionsProvider : PersistentStateComponent<TerminalOptionsProvider
var myPasteOnMiddleMouseButton = true
var myOverrideIdeShortcuts = true
var myShellIntegration = true
var myHighlightHyperlinks = true
}
fun setCloseSessionOnLogout(closeSessionOnLogout: Boolean) {
@@ -122,6 +124,14 @@ class TerminalOptionsProvider : PersistentStateComponent<TerminalOptionsProvider
myState.myPasteOnMiddleMouseButton = pasteOnMiddleMouseButton
}
fun highlightHyperlinks(): Boolean {
return myState.myHighlightHyperlinks;
}
fun setHighlightHyperlinks(highlight: Boolean) {
myState.myHighlightHyperlinks = highlight
}
val defaultShellPath: String
get() {
val shell = System.getenv("SHELL")
@@ -3,7 +3,7 @@
<grid id="27dc6" binding="myWholePanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="500" height="496"/>
<xy x="20" y="20" width="500" height="553"/>
</constraints>
<properties/>
<border type="none"/>
@@ -49,7 +49,7 @@
</component>
</children>
</grid>
<grid id="5c27f" binding="myGlobalSettingsPanel" layout-manager="GridLayoutManager" row-count="9" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<grid id="5c27f" binding="myGlobalSettingsPanel" layout-manager="GridLayoutManager" row-count="10" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<grid row="1" column="0" row-span="1" col-span="4" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -262,12 +262,35 @@
</grid>
<grid id="5fc56" binding="myConfigurablesPanel" layout-manager="BorderLayout" hgap="0" vgap="0">
<constraints>
<grid row="8" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
<grid row="9" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
<border type="none"/>
<children/>
</grid>
<grid id="25854" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<grid row="8" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
<border type="none"/>
<children>
<component id="b2e66" class="com.intellij.ui.components.JBCheckBox" binding="myHighlightHyperlinks">
<constraints>
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Highlight hyperlinks"/>
</properties>
</component>
<hspacer id="b3197">
<constraints>
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
</hspacer>
</children>
</grid>
</children>
</grid>
</children>
@@ -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());
}
@@ -631,6 +631,8 @@
<projectService serviceInterface="com.jetbrains.python.debugger.containerview.PyDataView" serviceImplementation="com.jetbrains.python.debugger.containerview.PyDataView"/>
<createFromTemplateHandler implementation="com.jetbrains.python.packaging.setupPy.PyCreateSetupPyFromTemplateHandler"/>
<consoleHistoryModelProvider implementation="com.jetbrains.python.console.PyConsoleHistoryModelProvider"/>
<consoleFilterProvider implementation="com.jetbrains.python.run.PyMessageFilterProvider"/>
</extensions>
<extensionPoints>
@@ -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)};
}
}