2013-03-19 9 views

Antwort

13

Das Emacs-Paket, das das unterstützt, ist mmm-mode. Stellen Sie sicher, das ist installiert, und dann Code wie diesen als Teil Ihrer Emacs Start sollte es tun:

(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) 

Getestet habe ich diese mit einigen Python-Programmen und es scheint, richtig zu arbeiten.

Beachten Sie, dass dies für jeden String mit drei Anführungszeichen in den ersten Modus wechselt, nicht nur für den Anfang einer Funktionsdefinition. Sie könnten es wahrscheinlich auf diejenigen am Anfang einer Funktionsdefinition mit einem komplexeren Front-Regex beschränken, aber ich bin mir nicht ganz sicher, wie ich damit umgehen soll, da mmmmode-Definitionen standardmäßig immer einer Linie entsprechen.

Bearbeiten: Meine ursprüngliche Version würde Emacs in den ersten Modus am Punkt einer einzelnen Zeile Docstring setzen und dann in diesem Modus bis zum Beginn des nächsten Docstring verlassen. Diese Version verhindert, dass Emacs in den ersten Modus versetzt wird, wenn in der gleichen Zeile wie der Anfang des Docstrings ein weiteres doppeltes Anführungszeichen steht, das immer noch nicht perfekt ist, aber näher sein sollte.

+0

Sie müssen 'include-back' auf' t' setzen. Andernfalls glaubt 'python-mode', dass der eigentliche Code in Docstrings liegt. – asmeurer

+0

Das funktioniert, aber manchmal scheinen die Docstring-Begrenzer zu "python-mode" zu "lecken", was dazu führt, dass Code zwischen Docstrings als Docstring interpretiert wird. Zum Beispiel wird [this] (https://github.com/sympy/sympy/blob/master/sympy/solvers/ode.py#L2688-2759) der ganze Block als Docstring gerendert. – asmeurer

+0

Wie schwierig ist es, die Flächen so einzurichten, dass in diesem Kontext eine andere Gruppe von "First-Mode" -Flächen verwendet wird als im regulären "First-Mode"? – asmeurer

0

Soweit für edit-Zwecke, Verengung rst-Modus Docstring und Aktivierung sollte der Weg zu gehen.

python-Modus el bietet py - docstring-p, die leicht für python.el angepasst werden könnten

als die ganze Sache zu einem gewissen Leerlauf-Timer zu binden, würde die Verengung/Schalt tun.

Bleibt ein Ausdruck, der den ersten Modus ausschaltet und erweitert.