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
- 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 as
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.