My Emacs setup

Some notes on my emacs setup. Maybe this should go in README for my dotemacs.


Which mode?

There is python-mode.el, and python.el. I have settled on python-mode from the elpa repositories.


I tried ropemacs, and really like it when it works. For simple refactorings it can be very convenient, eg. M-x rope-rename.

But the problem is, it tends to choke on large codebases. At work our largest repo is about 300k lines of Python. Open a file with a lot of imports from that codebase and watch emacs hang. It suddenly becomes nearly impossible to do anything in that buffer.

So, I can live without the nice refactoring feautures.



Without doubt the single biggest productivity boost in my entire python config is this keybinding that takes me to the definition of the method or function invocation I'm looking at:

(add-hook 'python-mode-hook
  (lambda ()
    (define-key python-mode-map (kbd "C-c g") 'jedi:goto-definition)
    ;; ... other stuff ...

(The same feature is in Rope as rope-goto-definition, but the jedi version seems to work just as well.)


Jedi completion works reasonably well with no special tweaks.


For realtime linting, I currently use the flymake-python-pyflakes package from melpa. I also use flymake-cursor (also from melpa) which shows flymake errors appear in the minibuffer, so I don't have to move the mouse around to see them.

Menu navigation

To have a dropdown menu for jumping to function and class definitions in the current buffer:

(add-hook 'python-mode-hook 'imenu-add-menubar-index)