Bazı insanlar bunu istediğinden, bu cevabı
bir pakete dönüştürdüm .
Melpa'yı yapılandırdıysanız,
M-x package-install RET aggressive-indent
Tüm seçenekler için Benioku dosyasına bakın , ancak açmanın en basit yolu:
(add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode)
Eski Cevap
Aşağıdakiler yalnızca elisp arabelleklerinde otomatik girinti yapar. Bir şeyleri sildiğinizde veya sorduğunuzda da (yalnızca yazmak yerine) çalışmanın avantajı vardır. Diğer modlara da eklemek kolaydır.
Bu işlev, noktanın içinde bulunduğu s ifadesini girintili kılacaktır. İsterseniz bir anahtara bağlayabilirsiniz, ancak önce aşağıya bakın.
(require 'cl-lib)
(defun endless/indent-defun ()
"Indent current defun.
Do nothing if mark is active (to avoid deactivating it), or if
buffer is not modified (to avoid creating accidental
modifications)."
(interactive)
(ignore-errors
(unless (or (region-active-p)
buffer-read-only
(null (buffer-modified-p)))
(let ((l (save-excursion (beginning-of-defun 1) (point)))
(r (save-excursion (end-of-defun 1) (point))))
(cl-letf (((symbol-function 'message) #'ignore))
(indent-region l r))))))
Bu kanca, herhangi bir şey yazdıktan sonra, ancak elisp arabelleklerinde bu işlevin çalışmasını sağlayacak şekilde yapar. Bu, her şeyi her zaman girintili tutmalıdır.
(add-hook
'emacs-lisp-mode-hook
(lambda ()
(add-hook 'post-command-hook
#'endless/indent-defun nil 'local)))
Dene! Oldukça iyi çalışıyor.
Ayrıca, @ holocronweaver'ın yorumlardaki önerisini izleyerek, c benzeri diller için aşağıdakine benzer bir şey kullanabilirsiniz:
(define-key c++-mode-map ";"
(lambda () (interactive)
(insert ";")
(endless/indent-defun)))