use of org.python.pydev.debug.newconsole.PydevConsoleInterpreter in project Pydev by fabioz.
the class ConsoleCompletionsPageParticipant method init.
/**
* When a console page is initialized,
*/
@Override
public void init(IPageBookViewPage page, final IConsole console) {
if (!(console instanceof ProcessConsole)) {
return;
}
ProcessConsole processConsole = (ProcessConsole) console;
IProcess process = processConsole.getProcess();
if (process == null) {
return;
}
if (!PyCodeCompletionPreferences.useCodeCompletion() || !PyCodeCompletionPreferences.useCodeCompletionOnDebug()) {
return;
}
String attribute = process.getAttribute(Constants.PYDEV_DEBUG_IPROCESS_ATTR);
if (!Constants.PYDEV_DEBUG_IPROCESS_ATTR_TRUE.equals(attribute)) {
// Only provide code-completion for pydev debug processes.
return;
}
Control control = page.getControl();
if (page instanceof IOConsolePage) {
// Note that completions on "all letters and '_'" are already activated just by installing
// the content assist, but the completions on the default keybinding is not, so, we have to
// call it ourselves here.
control.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
if (KeyBindingHelper.matchesContentAssistKeybinding(e)) {
contentAssist.showPossibleCompletions();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
final CurrentPyStackFrameForConsole currentPyStackFrameForConsole = new CurrentPyStackFrameForConsole(console);
IOConsolePage consolePage = (IOConsolePage) page;
TextConsoleViewer viewer = consolePage.getViewer();
PydevConsoleInterpreter interpreter = new PydevConsoleInterpreter();
interpreter.setLaunchAndRelatedInfo(process.getLaunch());
interpreter.setConsoleCommunication(new GetCompletionsInDebug(currentPyStackFrameForConsole));
contentAssist = new PyContentAssistant() {
@Override
public String showPossibleCompletions() {
// Only show completions if we're in a suspended console.
if (currentPyStackFrameForConsole.getLastSelectedFrame() == null) {
return null;
}
return super.showPossibleCompletions();
}
};
contentAssist.setInformationControlCreator(new PyInformationControlCreator());
contentAssist.install(new ScriptConsoleViewerWrapper(viewer, interpreter.getInterpreterInfo()));
IContentAssistProcessor processor = new PydevConsoleCompletionProcessor(interpreter, contentAssist);
contentAssist.setContentAssistProcessor(processor, IOConsolePartition.INPUT_PARTITION_TYPE);
contentAssist.setContentAssistProcessor(processor, IOConsolePartition.OUTPUT_PARTITION_TYPE);
contentAssist.enableAutoActivation(true);
contentAssist.enableAutoInsert(false);
contentAssist.setAutoActivationDelay(PyCodeCompletionPreferences.getAutocompleteDelay());
}
}
use of org.python.pydev.debug.newconsole.PydevConsoleInterpreter in project Pydev by fabioz.
the class DjangoShell method run.
@Override
public void run(IAction action) {
try {
// this.launchDjangoCommand("shell", false);
PythonNature nature = PythonNature.getPythonNature(selectedProject);
if (nature == null) {
MessageDialog.openError(EditorUtils.getShell(), "PyDev nature not found", "Unable to perform action because the Pydev nature is not properly set.");
return;
}
IPythonPathNature pythonPathNature = nature.getPythonPathNature();
String settingsModule = null;
Map<String, String> variableSubstitution = null;
try {
variableSubstitution = pythonPathNature.getVariableSubstitution();
settingsModule = variableSubstitution.get(DjangoConstants.DJANGO_SETTINGS_MODULE);
} catch (Exception e1) {
throw new RuntimeException(e1);
}
if (settingsModule == null) {
InputDialog d = new InputDialog(EditorUtils.getShell(), "Settings module", "Please enter the settings module to be used.\n" + "\n" + "Note that it can be edited later in:\np" + "roject properties > pydev pythonpath > string substitution variables.", selectedProject.getName() + ".settings", new IInputValidator() {
@Override
public String isValid(String newText) {
if (newText.length() == 0) {
return "Text must be entered.";
}
for (char c : newText.toCharArray()) {
if (c == ' ') {
return "Whitespaces not accepted";
}
if (c != '.' && !Character.isJavaIdentifierPart(c)) {
return "Invalid char: " + c;
}
}
return null;
}
});
int retCode = d.open();
if (retCode == InputDialog.OK) {
settingsModule = d.getValue();
variableSubstitution.put(DjangoConstants.DJANGO_SETTINGS_MODULE, settingsModule);
try {
pythonPathNature.setVariableSubstitution(variableSubstitution);
} catch (Exception e) {
Log.log(e);
}
}
if (settingsModule == null) {
return;
}
}
List<IPythonNature> natures = Collections.singletonList((IPythonNature) nature);
PydevConsoleFactory consoleFactory = new PydevConsoleFactory();
PydevConsoleLaunchInfo launchInfo = new PydevIProcessFactory().createLaunch(nature.getRelatedInterpreterManager(), nature.getProjectInterpreter(), nature.getPythonPathNature().getCompleteProjectPythonPath(nature.getProjectInterpreter(), nature.getRelatedInterpreterManager()), nature, natures);
PydevConsoleInterpreter interpreter = PydevConsoleFactory.createPydevInterpreter(launchInfo, natures, launchInfo.encoding);
String djangoAdditionalCommands = PydevDebugPlugin.getDefault().getPreferenceStore().getString(PydevConsoleConstants.DJANGO_INTERPRETER_CMDS);
djangoAdditionalCommands = djangoAdditionalCommands.replace("${" + DjangoConstants.DJANGO_SETTINGS_MODULE + "}", settingsModule);
// os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings")
consoleFactory.createConsole(interpreter, djangoAdditionalCommands);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Aggregations