At times, when I’m working with an HTML file – an article about programming, for instance – I need to include a snippet of code inside a <pre>
tag or a <code>
tag. It’s very annoying to have to indent that code by hand, and since the language may be anything from Hecl, to Erlang, to Java to C, I don’t want to use something like two-mode-mode for Emacs, so I threw the following elisp together:
(defun indent-region-as (other-mode)
"Indent selected region as some other mode. Used in order to indent source code contained within HTML."
(interactive "aMode to use: ")
(save-excursion
(let ((old-mode major-mode))
(narrow-to-region (region-beginning) (region-end))
(funcall other-mode)
(indent-region (region-beginning) (region-end) nil)
(funcall old-mode)))
(widen))
To use it:
- Put it in your
.emacs
file. - Select the region to indent according to the other mode.
M-x indent-region-as
– which will prompt you for the other mode to use. You need to give the function for that mode, such astcl-mode
,java-mode
,ruby-mode
or whatever.
My elisp is a bit rusty, so I’m sure it’s possible to improve the code above, but it does the job for me.