tweak(emacs-lisp): elisp indentation for data/plists
This was adapted from https://www.reddit.com/r/emacs/comments/d7x7x8/finally_fixing_indentation_of_quoted_lists/. It fixes the indentation of quoted data (and plist keywords) so they're indented like data, rather than function arguments, like so: BEFORE: `(foo bar baz doom emacs) '(:foo 1 :bar 2 :baz 3) '(:foo 1 2 3 :bar 4) (:foo 1 :bar 2) (:foo 1 ;; test comment :bar 2) (:foo 1 2 :bar 3) AFTER: `(foo bar baz doom emacs) '(:foo 1 :bar 2 :baz 3) '(:foo 1 2 3 :bar 4) ;; only align unquoted keywords if keywords start each line: (:foo 1 :bar 2) (:foo 1 ;; test comment :bar 2) (:foo 1 2 :bar 3) Also, I added a way to declare that plists in an macro's arguments should be indented like data: (put 'map! 'indent-plists-as-data t) BEFORE: (map! :localleader :map emacs-lisp-mode-map (:prefix ("d" . "debug") "f" #'+emacs-lisp/edebug-instrument-defun-on "F" #'+emacs-lisp/edebug-instrument-defun-off)) AFTER: (map! :localleader :map emacs-lisp-mode-map (:prefix ("d" . "debug") "f" #'+emacs-lisp/edebug-instrument-defun-on "F" #'+emacs-lisp/edebug-instrument-defun-off)) There was a third improvement I was hoping to include, namely, proper indentation of interpolated forms: BEFORE: `(foo bar ,(if t 'baz 'boo)) `(foo bar (if t baz boo)) AFTER: `(foo bar ,(if t 'baz 'boo)) `(foo bar (if t baz boo)) But this was removed because it breaks indentation for quoted macro forms (or dynamic elisp programming): BEFORE: (good) `(with-temp-buffer (if (always) (message "Hello %s" user-login-name) (message "Goodbye %s" user-login-name))) AFTER: (bad) `(with-temp-buffer (if (always) (message "Hello %s" user-login-name) (message "Goodbye %s" user-login-name))) Ref: https://www.reddit.com/r/emacs/comments/d7x7x8/finally_fixing_indentation_of_quoted_lists/'
This commit is contained in:
parent
3fe1641937
commit
e71daf5cc3
2 changed files with 219 additions and 9 deletions
|
@ -60,9 +60,10 @@ See `+emacs-lisp-non-package-mode' for details.")
|
|||
mode-name "Elisp"
|
||||
;; Don't treat autoloads or sexp openers as outline headers, we have
|
||||
;; hideshow for that.
|
||||
outline-regexp +emacs-lisp-outline-regexp
|
||||
;; Fixed indenter that intends plists sensibly.
|
||||
lisp-indent-function #'+emacs-lisp-indent-function)
|
||||
outline-regexp +emacs-lisp-outline-regexp)
|
||||
|
||||
;; Fixed indenter that intends plists sensibly.
|
||||
(advice-add #'calculate-lisp-indent :override #'+emacs-lisp--calculate-lisp-indent-a)
|
||||
|
||||
;; variable-width indentation is superior in elisp. Otherwise, `dtrt-indent'
|
||||
;; and `editorconfig' would force fixed indentation on elisp.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue