Come ottenere Emacs per utilizzare rst-mode
all'interno di docstrings nei file Python? Ricordo vagamente che sono possibili diverse modalità all'interno di certe regioni di un file, ma non ricordo come è stato fatto.Hanno Emacs modificare le docstring Python utilizzando la modalità rst
risposta
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.
Troverete un'altra installazione che controlla che la docstring sia un'istruzione stessa. Questo evita prima di tutto in altri heredoc.
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.
È necessario impostare 'include-back' su' t'. Altrimenti, 'python-mode' pensa che il codice attuale sia in docstring. – asmeurer
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
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