indent-region-as
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.
Trackbacks
Use the following link to trackback from your own site:
http://journal.dedasys.com/trackbacks?article_id=1875
about {{count}} hours later:
Hey thanks a lot for this! :)
I happened to do something like that (well, the article was in docbook, but it's the same problem) and wondered why there wasn't an easy way... well now there is, thanks :)
{{count}} days later:
I'd use ``make-indirect-buffer'' for this; that way, you can have all the bells and whistles of the programming language in question (syntax highlighting, etc) while the text ends up in the HTML buffer.