Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Have Emacs edit Python docstrings using rst-mode

How to I get Emacs to use rst-mode inside of docstrings in Python files? I vaguely remember that different modes within certain regions of a file is possible, but I don't remember how it's done.

like image 256
asmeurer Avatar asked Mar 19 '13 06:03

asmeurer


1 Answers

The Emacs package that supports that is mmm-mode. Ensure that's installed, and then code like this as part of your Emacs startup should do it:

(require 'mmm-mode)
(setq mmm-global-mode 'maybe)
(mmm-add-classes
 '((python-rst
    :submode rst-mode
    :front "^ *[ru]?\"\"\"[^\"]*$"
    :back "^ *\"\"\""
    :include-front t
    :include-back t
    :end-not-begin t)))
(mmm-add-mode-ext-class 'python-mode nil 'python-rst)

I tested this with some Python programs and it seems to work properly.

Note that this will switch to rst-mode for every triple-quoted string, not just the ones at the start of a function definition. You could probably restrict it to just the ones at the start of a function definition with a more complex front regex, but I'm not completely sure how to handle it since I think mmm-mode definitions by default match a line at a time.

Edit: My original version would put Emacs into rst-mode at the point of a single line docstring and then leave it in that mode up until the start of the next docstring. This version avoids putting Emacs into rst-mode if there is another double quote on the same line as the start of the docstring, which still isn't perfect but should be closer.

like image 181
rra Avatar answered Oct 05 '22 23:10

rra