2012-01-11 11 views
13

Mi piacerebbe avere il riempimento automatico impostato su 79 colonne per le sezioni di codice e 72 per le docstrings per ottenere la conformità automatica PEP8. Sembra esserci un'opzione per fare questo per la modalità Lisp (emacs-lisp-docstring-fill-column) ma non per Python.In modalità Python emacs, come posso impostare una diversa larghezza di riempimento automatico per docstring e codice?

C'è un python-mode.el avanzato da qualche parte che include questo?

+0

ha presentato una richiesta di funzionalità su https://bugs.launchpad.net/python-mode/+bug/1028055 –

+0

Grazie per intervenire. –

risposta

1

python-mode Corrente .el fornisce

(defcustom py-docstring-fill-column 72 [...] 

(defcustom py-comment-fill-column 79 [...] 

mentre per valore di codice di fill-column viene utilizzato.

+0

@Drew In effetti ha pubblicato solo l'inizio delle definizioni, sperando che trasmetta tutte le informazioni necessarie. Aggiunti alcuni puntini di sospensione per renderlo chiaro. –

+0

@Drew Hmm, non capisco la tua preoccupazione. Detto: python-mode.el fornisce, cioè è una copia da lì. La domanda riguardava la conformità. –

+0

Scusa, ho frainteso. Pensavo avessi detto all'OP di mettere quei 'defcustom's nel suo file di init. – Drew

4

Non so come farlo, ma non ne ho mai sentito il bisogno. È così facile usare C-x f per cambiare la colonna di riempimento. E puoi semplicemente premere M-p per riutilizzare l'ultimo valore inserito. Solo C-x f M-p --- 3 sequenze di tasti.

3

Solo leggermente testato:

(defadvice current-fill-column (around handle-docstring activate) 
    (flet ((docp (p) (let ((q (get-text-property p 'face)) 
         (r 'font-lock-string-face)) 
        (or (eq r q) (memq r q))))) 
    (if (or (docp (point)) (docp (point-at-bol)) (docp (point-at-eol))) 
     (setq ad-return-value 72) 
     ad-do-it))) 

Questo dipende font-lock-mode essendo consentito di rilevare docstrings.

+0

Vorrei inserire questo nel mio python-mode.el? –

+0

Puoi metterlo nel tuo [file init] (http://www.gnu.org/savannah-checkouts/gnu/emacs/manual/html_node/emacs/Init-File.html). – huaiyuan

+0

Ricevo un errore: "Argomento di tipo errato: listp, font-lock-keyword-face" con modalità di blocco font abilitata o disabilitata. –

2

Con la modalità corrente python.el come dstributed con Emacs 24.3 si può ridefinire il python-fill-string come segue (in questo esempio, ho anche impostato il fill-column-85 e cambiare il python-fill-docstring-style):

;; Python customizations 
(defun my-python-fill-string (&optional justify) 
    (let ((old-fill-column fill-column)) 
    (setq fill-column 72) 
    (python-fill-string justify) 
    (setq fill-column old-fill-column) 
)) 

(add-hook 'python-mode-hook 
      (lambda() (interactive) 
      (setq python-fill-docstring-style 'pep-257-nn) 
      (set-fill-column 85) 
      (setq python-fill-string-function my-python-fill-string) 
      ))