ipython: IPython 5 breaks Emacs behaviour on Windows

Hi all, I have successfully used IPython from within an Emacs buffer in the past, usually by using the jupyter console command. My basic config uses the following:

(setq-default python-shell-interpreter "C:/Python34/Scripts/jupyter.exe"
              python-shell-interpreter-args "console")

The problem seems to be that the latest version of IPython breaks this integration, as the following error message / traceback appears:

Traceback (most recent call last):
  File "c:\python34\lib\runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\python34\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "c:\Python34\Scripts\ipython.exe\__main__.py", line 9, in <module>
  File "c:\python34\lib\site-packages\IPython\__init__.py", line 119, in start_ipython
    return launch_new_instance(argv=argv, **kwargs)
  File "c:\python34\lib\site-packages\traitlets\config\application.py", line 595, in launch_instance
    app.initialize(argv)
  File "<decorator-gen-110>", line 2, in initialize
  File "c:\python34\lib\site-packages\traitlets\config\application.py", line 74, in catch_config_error
    return method(app, *args, **kwargs)
  File "c:\python34\lib\site-packages\IPython\terminal\ipapp.py", line 300, in initialize
    super(TerminalIPythonApp, self).initialize(argv)
  File "<decorator-gen-7>", line 2, in initialize
  File "c:\python34\lib\site-packages\traitlets\config\application.py", line 74, in catch_config_error
    return method(app, *args, **kwargs)
  File "c:\python34\lib\site-packages\IPython\core\application.py", line 446, in initialize
    self.parse_command_line(argv)
  File "c:\python34\lib\site-packages\IPython\terminal\ipapp.py", line 295, in parse_command_line
    return super(TerminalIPythonApp, self).parse_command_line(argv)
  File "<decorator-gen-4>", line 2, in parse_command_line
  File "c:\python34\lib\site-packages\traitlets\config\application.py", line 74, in catch_config_error
    return method(app, *args, **kwargs)
  File "c:\python34\lib\site-packages\traitlets\config\application.py", line 488, in parse_command_line
    return self.initialize_subcommand(subc, subargv)
  File "c:\python34\lib\site-packages\IPython\core\application.py", line 236, in initialize_subcommand
    return super(BaseIPythonApplication, self).initialize_subcommand(subc, argv)
  File "<decorator-gen-3>", line 2, in initialize_subcommand
  File "c:\python34\lib\site-packages\traitlets\config\application.py", line 74, in catch_config_error
    return method(app, *args, **kwargs)
  File "c:\python34\lib\site-packages\traitlets\config\application.py", line 426, in initialize_subcommand
    self.subapp.initialize(argv)
  File "<decorator-gen-114>", line 2, in initialize
  File "c:\python34\lib\site-packages\traitlets\config\application.py", line 74, in catch_config_error
    return method(app, *args, **kwargs)
  File "c:\python34\lib\site-packages\jupyter_console\app.py", line 137, in initialize
    self.init_shell()
  File "c:\python34\lib\site-packages\jupyter_console\app.py", line 110, in init_shell
    client=self.kernel_client,
  File "c:\python34\lib\site-packages\traitlets\config\configurable.py", line 412, in instance
    inst = cls(*args, **kwargs)
  File "c:\python34\lib\site-packages\jupyter_console\ptshell.py", line 252, in __init__
    self.init_prompt_toolkit_cli()
  File "c:\python34\lib\site-packages\jupyter_console\ptshell.py", line 404, in init_prompt_toolkit_cli
    self.pt_cli = CommandLineInterface(app, eventloop=self._eventloop)
  File "c:\python34\lib\site-packages\prompt_toolkit\interface.py", line 80, in __init__
    self.output = output or create_output()
  File "c:\python34\lib\site-packages\prompt_toolkit\shortcuts.py", line 114, in create_output
    return Win32Output(stdout)
  File "c:\python34\lib\site-packages\prompt_toolkit\terminal\win32_output.py", line 80, in __init__
    info = self.get_win32_screen_buffer_info()
  File "c:\python34\lib\site-packages\prompt_toolkit\terminal\win32_output.py", line 150, in get_win32_screen_buffer_info
    raise NoConsoleScreenBufferError
prompt_toolkit.terminal.win32_output.NoConsoleScreenBufferError: No Windows console found. Are you running cmd.exe?

It seems even though it should load, prompt_toolkit does not like that Emacs is 1) on Windows and 2) is not in a known shell. I imagine this isn’t anything to do with Emacs, as this shouldn’t be any different than starting any other type of console from within the editor. Is this fixable? It seems to just be that prompt_toolkit doesn’t know what it is executing inside.

Anyways, thanks for the IPython 5 release, I really like the new REPL and completion, but being able to use it with Emacs as I have been is important to me as well. Hopefully the fix is as simple as adding some sort of Emacs clause to get_win32_screen_buffer_info.

About this issue

  • Original URL
  • State: open
  • Created 8 years ago
  • Comments: 15 (8 by maintainers)

Most upvoted comments

for me, %matplotlib does not solve the plotting freezing on windows + emacs. to get everything work, i have to use emacs + ipython<=4.1.0 + jupyter-console<=4.1.0