Подтвердить что ты не робот

В режиме emacs Python, как мне установить другую ширину автозаполнения для docstrings и кода?

Я хотел бы, чтобы автозаполнение устанавливалось в 79 столбцов для разделов кода и 72 для docstrings, чтобы получить автоматическое соответствие PEP8. Кажется, есть возможность сделать это для режима Lisp (emacs- lisp -docstring-fill-column), но не для Python.

Есть ли расширенный python-mode.el где-нибудь, который включает это?

4b9b3361

Ответ 1

Текущий python-mode.el предоставляет

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

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

тогда как для кода используется значение fill-column.

Ответ 2

Я не знаю, как это сделать, но я никогда не чувствовал нужды. Это так просто использовать C-x f, чтобы изменить столбец заполнения. И вы можете просто нажать M-p, чтобы повторно использовать последнее введенное значение. Просто C-x f M-p --- 3 нажатия клавиш.

Ответ 3

Только слегка протестировано:

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

Это зависит от того, включен ли режим блокировки шрифта для обнаружения докстрон.

Ответ 4

С текущим режимом python.el как dstributed с Emacs 24.3 вы можете переопределить python-fill-string следующим образом (в этом примере я также установил fill-column в 85 и изменил 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)
            ))