I have been trying to configure Emacs to use the proper Python mode. To this end I have read a few tutorials. Most importantly this one. The tutorial uses the python-mode package. However, when I install it through the package manager (M-x package-install RET python-mode RET) I can not use the shortcuts that are available for that package.

I opened up a Python file to test some shortcuts such as C-c |, which should evaluate the selected expression. However, to my surprise these did not work so I decided to find out other tutorials on the topic. However, in my mode-line I do see Python, so there is some python-mode enabled.

On the emacs wiki I found the following snippet to add to my init.el file:

 (autoload 'python-mode "python-mode" "Python Mode." t)
 (add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
 (add-to-list 'interpreter-mode-alist '("python" . python-mode))

When I add this the python-mode actually works and the aforementioned shortcuts work as well.

I do not understand properly what this does more than manually executing M-x python-mode in a python file buffer.

When I removed every trace of python-mode in my .emacs folder and opened up a python file I noticed that I still have a python-mode. So my guess is that there are two python-modes?

I think I want the python-mode from https://launchpad.net/python-mode. It seems that it is present in the package repository, but I am unsure how to remove the other Python mode.

Could somebody elaborate please?

  • 1
    If you want to use Ipython, ein is an excellent package. It gives you the equivalent of Ipython notebook in Emacs. Demos here.There are also old demos from the original repo now unmaintained. – Tu Do May 29 '15 at 14:04
  • That's a whole lotta text for a pretty simple question. ;-) Would be nice to trim it down a bit. – Malabarba May 29 '15 at 14:39
  • I agree. I was being thorough as other SE sites have thought me. I will trim it a bit asap. – Christophe De Troyer May 29 '15 at 15:19

Well yes there are two python modes: the one which ships with emacs is python.el and the other one is python-mode.el which is indeed this one: https://launchpad.net/python-mode

Your tutorial has been referencing the later one.

Your python-mode setup snippet does the following:

;; by default, the function 'python-mode is associated with
;; the package python.el. The following changes that to python-mode.el:
(autoload 'python-mode "python-mode" "Python Mode." t)

;; open py files with python-mode
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))

;; sets python interpreter mode to be python-mode
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
|improve this answer|||||
  • So do I remove python.el or do I have to combine them? Or is there a specific name for the latter python mode? I want my init.el to be portable so removing python.el might not be an option. – Christophe De Troyer May 29 '15 at 13:22
  • Just install python-mode.el and set it up with the snippet you posted. (or read its README) – Adobe May 29 '15 at 13:28
  • I understand what the command does, in combination with this answer: superuser.com/questions/108233/… Thank you for elaborating. – Christophe De Troyer May 29 '15 at 13:30

As a maintainer of python-mode.el and in addition to answer by @Adobe: python-mode.el does not unload commands from python.el - both are available. Due to name of python-mode-map --which is used by both and can't be changed without breaking a lot of things-- keybindings and menu are delivered from the last one loaded.

C-c | calls py-execute-region and works nicely here. Maybe python.el was loaded afterwards and the binding gone. Calling the command via M-x might be an option than. In case of trouble, please consider a bug-report at https://bugs.launchpad.net/python-mode

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.