diff --git a/python/src/META-INF/pycharm-core.xml b/python/src/META-INF/pycharm-core.xml
index f91b34a31078..4732ad084b32 100644
--- a/python/src/META-INF/pycharm-core.xml
+++ b/python/src/META-INF/pycharm-core.xml
@@ -26,7 +26,7 @@
- com.jetbrains.python.PythonConsoleToolWindow
+ com.jetbrains.python.console.PythonConsoleToolWindow
@@ -84,7 +84,7 @@
+ factoryClass="com.jetbrains.python.console.PythonConsoleToolWindowFactory" secondary="false"/>
diff --git a/python/src/META-INF/python-core.xml b/python/src/META-INF/python-core.xml
index 1ca4d81c3b88..292237aac6ac 100644
--- a/python/src/META-INF/python-core.xml
+++ b/python/src/META-INF/python-core.xml
@@ -654,7 +654,7 @@
diff --git a/python/src/com/jetbrains/python/actions/ExecuteInConsoleAction.java b/python/src/com/jetbrains/python/actions/PyExecuteSelectionAction.java
similarity index 79%
rename from python/src/com/jetbrains/python/actions/ExecuteInConsoleAction.java
rename to python/src/com/jetbrains/python/actions/PyExecuteSelectionAction.java
index be45f85163c3..cb5fbceb27d3 100644
--- a/python/src/com/jetbrains/python/actions/ExecuteInConsoleAction.java
+++ b/python/src/com/jetbrains/python/actions/PyExecuteSelectionAction.java
@@ -15,7 +15,12 @@
*/
package com.jetbrains.python.actions;
+import com.google.common.base.Function;
+import com.google.common.base.Predicates;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.Lists;
import com.intellij.execution.ExecutionHelper;
+import com.intellij.execution.console.LanguageConsoleView;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.openapi.actionSystem.*;
@@ -25,22 +30,28 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.openapi.wm.ToolWindow;
+import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
+import com.intellij.ui.content.Content;
import com.intellij.util.Consumer;
import com.intellij.util.NotNullFunction;
import com.jetbrains.python.console.PyCodeExecutor;
+import com.jetbrains.python.console.PydevConsoleRunner;
+import com.jetbrains.python.console.PythonConsoleToolWindow;
+import com.jetbrains.python.console.PythonConsoleToolWindowFactory;
import com.jetbrains.python.psi.PyFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
-public class ExecuteInConsoleAction extends AnAction {
+public class PyExecuteSelectionAction extends AnAction {
public static final String EXECUTE_SELECTION_IN_CONSOLE = "Execute Selection in Console";
- public ExecuteInConsoleAction() {
+ public PyExecuteSelectionAction() {
super(EXECUTE_SELECTION_IN_CONSOLE);
}
@@ -183,6 +194,21 @@ public class ExecuteInConsoleAction extends AnAction {
}
private static Collection getConsoles(Project project) {
+ PythonConsoleToolWindow toolWindow = PythonConsoleToolWindow.getInstance(project);
+
+ if (toolWindow != null) {
+ ToolWindow tw = toolWindow.getToolWindow();
+ return FluentIterable.from(Lists.newArrayList(tw.getContentManager().getContents()))
+ .transform(new Function() {
+ @Override
+ public RunContentDescriptor apply(@Nullable Content input) {
+ return input != null ? input.getUserData(PythonConsoleToolWindow.CONTENT_DESCRIPTOR) : null;
+ }
+ }).filter(
+ Predicates.notNull()).toList();
+ }
+
+
return ExecutionHelper.findRunningConsole(project, new NotNullFunction() {
@NotNull
@Override
@@ -211,16 +237,20 @@ public class ExecuteInConsoleAction extends AnAction {
private static void startConsole(final Project project,
final Consumer consumer,
Module context) {
- //TODO
- //PydevConsoleRunner runner = PydevConsoleRunner.runPythonConsole(project, context);
- //runner.addConsoleListener(new PydevConsoleRunner.ConsoleListener() {
- // @Override
- // public void handleConsoleInitialized(LanguageConsoleView consoleView) {
- // if (consoleView instanceof PyCodeExecutor) {
- // consumer.consume((PyCodeExecutor)consoleView);
- // }
- // }
- //});
+ ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow(PythonConsoleToolWindowFactory.ID);
+
+
+ PydevConsoleRunner runner = PydevConsoleRunner.runPythonConsole(project, context, toolWindow != null ? PythonConsoleToolWindow
+ .toolWindowConsole(toolWindow)
+ : PydevConsoleRunner.factory());
+ runner.addConsoleListener(new PydevConsoleRunner.ConsoleListener() {
+ @Override
+ public void handleConsoleInitialized(LanguageConsoleView consoleView) {
+ if (consoleView instanceof PyCodeExecutor) {
+ consumer.consume((PyCodeExecutor)consoleView);
+ }
+ }
+ });
}
private static boolean canFindConsole(AnActionEvent e) {
diff --git a/python/ide/src/com/jetbrains/python/PythonConsoleToolWindow.java b/python/src/com/jetbrains/python/console/PythonConsoleToolWindow.java
similarity index 95%
rename from python/ide/src/com/jetbrains/python/PythonConsoleToolWindow.java
rename to python/src/com/jetbrains/python/console/PythonConsoleToolWindow.java
index cca9913ffc11..53d3b14c114c 100644
--- a/python/ide/src/com/jetbrains/python/PythonConsoleToolWindow.java
+++ b/python/src/com/jetbrains/python/console/PythonConsoleToolWindow.java
@@ -1,9 +1,10 @@
-package com.jetbrains.python;
+package com.jetbrains.python.console;
import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.ui.SimpleToolWindowPanel;
+import com.intellij.openapi.util.Key;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
@@ -11,8 +12,6 @@ import com.intellij.openapi.wm.ex.ToolWindowManagerListener;
import com.intellij.openapi.wm.impl.content.ToolWindowContentUi;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentFactory;
-import com.jetbrains.python.console.PyConsoleType;
-import com.jetbrains.python.console.PydevConsoleRunner;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -25,6 +24,7 @@ import java.util.Map;
* @author traff
*/
public class PythonConsoleToolWindow {
+ public static final Key CONTENT_DESCRIPTOR = Key.create("CONTENT_DESCRIPTOR");
private final Project myProject;
@@ -119,10 +119,11 @@ public class PythonConsoleToolWindow {
private static void resetContent(RunContentDescriptor contentDescriptor, SimpleToolWindowPanel panel, Content content) {
panel.setContent(contentDescriptor.getComponent());
- //panel.addFocusListener(createFocusListener(toolWindow));
content.setComponent(panel);
content.setPreferredFocusableComponent(contentDescriptor.getComponent());
+
+ content.putUserData(CONTENT_DESCRIPTOR, contentDescriptor);
}
private static FocusListener createFocusListener(final ToolWindow toolWindow) {
diff --git a/python/ide/src/com/jetbrains/python/PythonConsoleToolWindowFactory.java b/python/src/com/jetbrains/python/console/PythonConsoleToolWindowFactory.java
similarity index 93%
rename from python/ide/src/com/jetbrains/python/PythonConsoleToolWindowFactory.java
rename to python/src/com/jetbrains/python/console/PythonConsoleToolWindowFactory.java
index ddf0c1e6cb13..0840976151c3 100644
--- a/python/ide/src/com/jetbrains/python/PythonConsoleToolWindowFactory.java
+++ b/python/src/com/jetbrains/python/console/PythonConsoleToolWindowFactory.java
@@ -13,13 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.jetbrains.python;
+package com.jetbrains.python.console;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowFactory;
-import com.jetbrains.python.console.PydevConsoleRunner;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/python/ide/src/com/jetbrains/python/PythonToolWindowConsoleRunner.java b/python/src/com/jetbrains/python/console/PythonToolWindowConsoleRunner.java
similarity index 96%
rename from python/ide/src/com/jetbrains/python/PythonToolWindowConsoleRunner.java
rename to python/src/com/jetbrains/python/console/PythonToolWindowConsoleRunner.java
index f9255c45c1e1..bcf805bc3dd1 100644
--- a/python/ide/src/com/jetbrains/python/PythonToolWindowConsoleRunner.java
+++ b/python/src/com/jetbrains/python/console/PythonToolWindowConsoleRunner.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.jetbrains.python;
+package com.jetbrains.python.console;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
@@ -26,8 +26,6 @@ import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.ui.content.Content;
-import com.jetbrains.python.console.PyConsoleType;
-import com.jetbrains.python.console.PydevConsoleRunner;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;