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: ")

(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)))

To use it:

  1. Put it in your .emacs file.
  2. Select the region to indent according to the other mode.
  3. 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 tcl-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.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s