diff --git a/python/src/com/jetbrains/python/console/PyConsoleUtil.java b/python/src/com/jetbrains/python/console/PyConsoleUtil.java index a2218e70270e..064b4186dabb 100644 --- a/python/src/com/jetbrains/python/console/PyConsoleUtil.java +++ b/python/src/com/jetbrains/python/console/PyConsoleUtil.java @@ -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; + } } diff --git a/python/src/com/jetbrains/python/console/PydevConsoleRunnerImpl.java b/python/src/com/jetbrains/python/console/PydevConsoleRunnerImpl.java index 119a5db33531..ac650a4456ba 100644 --- a/python/src/com/jetbrains/python/console/PydevConsoleRunnerImpl.java +++ b/python/src/com/jetbrains/python/console/PydevConsoleRunnerImpl.java @@ -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)); diff --git a/python/src/com/jetbrains/python/console/PythonDebugLanguageConsoleView.java b/python/src/com/jetbrains/python/console/PythonDebugLanguageConsoleView.java index d2d5257c3e5c..4a64d5f8e671 100644 --- a/python/src/com/jetbrains/python/console/PythonDebugLanguageConsoleView.java +++ b/python/src/com/jetbrains/python/console/PythonDebugLanguageConsoleView.java @@ -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 actions = ContainerUtil.newArrayList(PyConsoleUtil.createTabCompletionAction(getPydevConsoleView())); + AbstractConsoleRunnerWithHistory.registerActionShortcuts(actions, getPydevConsoleView().getEditor().getComponent()); } public PythonDebugLanguageConsoleView(final Project project, Sdk sdk) {