AnAction (PythonConsoleView consoleView) { final AnAction runCompletions = new AnAction() { @Override public void actionPerformed(@NotNull AnActionEvent e) { Editor editor = consoleView.getConsoleEditor(); if (LookupManager.getActiveLookup(editor) != null) { AnAction replace = ActionManager.getInstance().getAction(IdeActions.ACTION_CHOOSE_LOOKUP_ITEM_REPLACE); ActionUtil.performActionDumbAwareWithCallbacks(replace, e); return; } AnAction completionAction = ActionManager.getInstance().getAction(IdeActions.ACTION_CODE_COMPLETION); if (completionAction != null) { ActionUtil.performActionDumbAwareWithCallbacks(completionAction, e); } } @Override public void update(@NotNull AnActionEvent e) { e.getPresentation().setVisible(false); 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)); } @Override public @NotNull ActionUpdateThread getActionUpdateThread() { return ActionUpdateThread.EDT; } }; runCompletions.registerCustomShortcutSet(KeyEvent.VK_TAB, 0, consoleView.getConsoleEditor().getComponent()); return runCompletions; }