mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Tab completion does not work in Debugger Python Console (PY-21504)
Reuse tab completion from integrated Python console
This commit is contained in:
@@ -15,17 +15,26 @@
|
||||
*/
|
||||
package com.jetbrains.python.console;
|
||||
|
||||
import com.google.common.base.CharMatcher;
|
||||
import com.intellij.codeInsight.lookup.LookupManager;
|
||||
import com.intellij.execution.console.LanguageConsoleView;
|
||||
import com.intellij.execution.ui.ConsoleViewContentType;
|
||||
import com.intellij.openapi.actionSystem.ActionManager;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.ex.ActionUtil;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.jetbrains.python.console.parsing.PythonConsoleData;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
/**
|
||||
* @author traff
|
||||
*/
|
||||
@@ -146,6 +155,42 @@ public class PyConsoleUtil {
|
||||
PythonConsoleData consoleData = getOrCreateIPythonData(file);
|
||||
consoleData.setIndentSize(indentSize);
|
||||
}
|
||||
|
||||
public static AnAction createTabCompletionAction(PythonConsoleView consoleView) {
|
||||
final AnAction runCompletions = new AnAction() {
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
Editor editor = consoleView.getConsoleEditor();
|
||||
if (LookupManager.getActiveLookup(editor) != null) {
|
||||
AnAction replace = ActionManager.getInstance().getAction("EditorChooseLookupItemReplace");
|
||||
ActionUtil.performActionDumbAware(replace, e);
|
||||
return;
|
||||
}
|
||||
AnAction completionAction = ActionManager.getInstance().getAction("CodeCompletion");
|
||||
if (completionAction != null) {
|
||||
ActionUtil.performActionDumbAware(completionAction, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(AnActionEvent e) {
|
||||
Editor editor = consoleView.getConsoleEditor();
|
||||
if (LookupManager.getActiveLookup(editor) != null) {
|
||||
e.getPresentation().setEnabled(false);
|
||||
}
|
||||
int offset = editor.getCaretModel().getOffset();
|
||||
Document document = editor.getDocument();
|
||||
int lineStart = document.getLineStartOffset(document.getLineNumber(offset));
|
||||
String textToCursor = document.getText(new TextRange(lineStart, offset));
|
||||
e.getPresentation().setEnabled(!CharMatcher.WHITESPACE.matchesAllOf(textToCursor));
|
||||
}
|
||||
};
|
||||
|
||||
runCompletions
|
||||
.registerCustomShortcutSet(KeyEvent.VK_TAB, 0, consoleView.getConsoleEditor().getComponent());
|
||||
runCompletions.getTemplatePresentation().setVisible(false);
|
||||
return runCompletions;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ package com.jetbrains.python.console;
|
||||
|
||||
import com.google.common.base.CharMatcher;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.codeInsight.lookup.LookupManager;
|
||||
import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.ExecutionHelper;
|
||||
import com.intellij.execution.ExecutionManager;
|
||||
@@ -42,14 +41,12 @@ import com.intellij.ide.CommonActionsManager;
|
||||
import com.intellij.ide.errorTreeView.NewErrorTreeViewPanel;
|
||||
import com.intellij.internal.statistic.UsageTrigger;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.ex.ActionUtil;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.application.TransactionGuard;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Caret;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.actionSystem.EditorAction;
|
||||
import com.intellij.openapi.editor.actionSystem.EditorWriteActionHandler;
|
||||
@@ -69,7 +66,6 @@ import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.Couple;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.io.StreamUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.CharsetToolkit;
|
||||
@@ -211,7 +207,7 @@ public class PydevConsoleRunnerImpl implements PydevConsoleRunner {
|
||||
actions.add(0, createRerunAction());
|
||||
|
||||
actions.add(createInterruptAction());
|
||||
actions.add(createTabCompletionAction());
|
||||
actions.add(PyConsoleUtil.createTabCompletionAction(myConsoleView));
|
||||
|
||||
actions.add(createSplitLineAction());
|
||||
|
||||
@@ -711,45 +707,6 @@ public class PydevConsoleRunnerImpl implements PydevConsoleRunner {
|
||||
return anAction;
|
||||
}
|
||||
|
||||
private AnAction createTabCompletionAction() {
|
||||
final AnAction runCompletions = new AnAction() {
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
|
||||
Editor editor = myConsoleView.getConsoleEditor();
|
||||
if (LookupManager.getActiveLookup(editor) != null) {
|
||||
AnAction replace = ActionManager.getInstance().getAction("EditorChooseLookupItemReplace");
|
||||
ActionUtil.performActionDumbAware(replace, e);
|
||||
return;
|
||||
}
|
||||
AnAction completionAction = ActionManager.getInstance().getAction("CodeCompletion");
|
||||
if (completionAction == null) {
|
||||
return;
|
||||
}
|
||||
ActionUtil.performActionDumbAware(completionAction, e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(AnActionEvent e) {
|
||||
Editor editor = myConsoleView.getConsoleEditor();
|
||||
if (LookupManager.getActiveLookup(editor) != null) {
|
||||
e.getPresentation().setEnabled(false);
|
||||
}
|
||||
int offset = editor.getCaretModel().getOffset();
|
||||
Document document = editor.getDocument();
|
||||
int lineStart = document.getLineStartOffset(document.getLineNumber(offset));
|
||||
String textToCursor = document.getText(new TextRange(lineStart, offset));
|
||||
e.getPresentation().setEnabled(!CharMatcher.WHITESPACE.matchesAllOf(textToCursor));
|
||||
}
|
||||
};
|
||||
|
||||
runCompletions
|
||||
.registerCustomShortcutSet(KeyEvent.VK_TAB, 0, myConsoleView.getConsoleEditor().getComponent());
|
||||
runCompletions.getTemplatePresentation().setVisible(false);
|
||||
return runCompletions;
|
||||
}
|
||||
|
||||
|
||||
private boolean isIndentSubstring(String text) {
|
||||
int indentSize = myConsoleExecuteActionHandler.getPythonIndent();
|
||||
return text.length() >= indentSize && CharMatcher.WHITESPACE.matchesAllOf(text.substring(text.length() - indentSize));
|
||||
|
||||
@@ -19,16 +19,21 @@ import com.intellij.execution.console.DuplexConsoleView;
|
||||
import com.intellij.execution.filters.TextConsoleBuilderFactory;
|
||||
import com.intellij.execution.impl.ConsoleViewImpl;
|
||||
import com.intellij.execution.process.ProcessOutputTypes;
|
||||
import com.intellij.execution.runners.AbstractConsoleRunnerWithHistory;
|
||||
import com.intellij.execution.ui.ConsoleView;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.wm.IdeFocusManager;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.PyBundle;
|
||||
import icons.PythonIcons;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author traff
|
||||
*/
|
||||
@@ -44,6 +49,9 @@ public class PythonDebugLanguageConsoleView extends DuplexConsoleView<ConsoleVie
|
||||
|
||||
getSwitchConsoleActionPresentation().setIcon(PythonIcons.Python.Debug.CommandLine);
|
||||
getSwitchConsoleActionPresentation().setText(PyBundle.message("run.configuration.show.command.line.action.name"));
|
||||
|
||||
List<AnAction> actions = ContainerUtil.newArrayList(PyConsoleUtil.createTabCompletionAction(getPydevConsoleView()));
|
||||
AbstractConsoleRunnerWithHistory.registerActionShortcuts(actions, getPydevConsoleView().getEditor().getComponent());
|
||||
}
|
||||
|
||||
public PythonDebugLanguageConsoleView(final Project project, Sdk sdk) {
|
||||
|
||||
Reference in New Issue
Block a user