Using external code beautifiers with Emacs
The following Lisp code is a convenient wrapper to the
Lindent
script provided with the Linux kernel:
(defun dzu-lindent-region (start end replace)
"Call Lindent on region. Specifying a prefix arg replaces the region."
(interactive (list (region-beginning) (region-end)
current-prefix-arg))
(unless c-indentation-style
(error "Not editing a C file"))
;; Lindent presumes linux style so adjust if neccessary
(unless (eq c-indentation-style 'linux)
(c-set-style "linux"))
(shell-command-on-region start end "Lindent" nil replace)
;; When we beautify only partially at an indent level we have to add that
;; manually afterwards. Fortunately cc-mode can take care of that.
(when replace
(indent-region start end)))
You could for example bind this to the
f8
key:
(global-set-key [f8] 'dzu-lindent-region)
To use it, simply mark the piece of code in question and call it
(e.g. press
f8
when you have bound it to that key). Without a
prefix argument, the beautified code will be displayed in the echo
area so you can visually compare the original with the resulting code.
Providing a prefix argument with
C-u
before pressing
f8
replaces
the original code with the output of
Lindent
. Note that it is
ok
only to indent chunks from a source file. In this case the
indentation at that point is used for the result.
--
DetlevZundel - 11 Sep 2007