2013-03-19 8 views

risposta

13

Il pacchetto Emacs che supporta è mmm-mode. Assicurarsi che è installato, e quindi il codice come questo come parte della vostra partenza di Emacs dovrebbe farlo:

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

Ho provato questo con alcuni programmi Python e sembra funzionare correttamente.

Si noti che passerà alla modalità rst per ogni stringa con quotatura tripla, non solo a quelli all'inizio di una definizione di funzione. Probabilmente potresti limitarlo solo a quelli all'inizio di una definizione di funzione con una regex anteriore più complessa, ma non sono completamente sicuro su come gestirlo poiché penso che le definizioni della modalità mmm corrispondano di default a una riga alla volta.

Edit: La mia versione originale avrebbe messo Emacs in prima modalità al punto di una singola linea docstring e poi lasciarlo in quel modo fino all'inizio della prossima docstring. Questa versione evita di mettere Emacs in rst-mode se c'è un'altra frase doppia sulla stessa riga dell'inizio della docstring, che non è ancora perfetta ma dovrebbe essere più vicina.

+0

È necessario impostare 'include-back' su' t'. Altrimenti, 'python-mode' pensa che il codice attuale sia in docstring. – asmeurer

+0

Funziona, ma a volte i delimitatori di docstring sembrano "perdere" in 'python-mode', causando l'interpretazione del codice tra docstring come docstring. Ad esempio, [questo] (https://github.com/sympy/sympy/blob/master/sympy/solvers/ode.py#L2688-2759) l'intero blocco viene visualizzato come docstring. – asmeurer

+0

Quanto è difficile impostare i volti in modo che in questo contesto venga utilizzato un diverso set di facce 'rst-mode' rispetto al normale' rst-mode'? – asmeurer

0

Per quanto riguarda per Edit-fini, restringimento di stringa di documentazione e l'attivazione di primo-mode dovrebbe essere la strada da percorrere.

pitone modalità el fornisce py - docstring-p, che può essere facilmente adattato per python.el

Rispetto vincolante il tutto a qualche minimo-temporizzatore, farebbe il restringimento/commutazione.

Rimane qualche espressione che commuta in modalità rst e si allarga.