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
.emacsfile. - 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-modeor 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.