mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Highlight python stacktraces in terminal by default (IDEA-118566)
This commit is contained in:
-2
@@ -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);
|
||||
|
||||
+8
@@ -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)};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user