guide - emacs python
En el modo Python de emacs, ¿cómo configuro un ancho de autocompletar diferente para las cadenas de documentos y el código? (4)
Con el modo python.el
actual como dstributed con Emacs 24.3 puede redefinir el python-fill-string
siguiente manera (en este ejemplo, también configuro el fill-column
en 85 y cambio el 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)
))
Me gustaría tener el autocompletar configurado en 79 columnas para las secciones de códigos y 72 para las cadenas de documentos para obtener el cumplimiento automático de PEP8. Parece que hay una opción para hacer esto para el modo Lisp (emacs-lisp-docstring-fill-column) pero no para Python.
¿Hay un python-mode.el mejorado en algún lugar que incluya esto?
El actual python-mode.el proporciona
(defcustom py-docstring-fill-column 72 [...]
(defcustom py-comment-fill-column 79 [...]
mientras que para el valor de código de fill-column
se usa.
No sé cómo hacer eso, pero nunca sentí la necesidad. Es muy fácil usar Cx f para cambiar la columna de relleno. Y puede presionar Mp para reutilizar el último valor que ingresó. Solo Cx f Mp --- 3 pulsaciones de teclas.
Solo ligeramente probado:
(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)))
Esto depende de que font-lock-mode esté habilitado para detectar las cadenas de documentos.