tags:

views:

116

answers:

1

You know under SGML mode (PSGML) Emacs could indent the XML buffer automatically.

C-x-h ;; Select all
M-C-\ ;; Indent

But all the indent was 2 spaces. How can I set to make auto indent to 4 spaces?

I tried (setq-default sgml-indent-step 4), but it doesn't work.

Current view is:

<TESTCASE>
  <NAME>00001<NAME>
  <TIMEOUT>600000</TIMEOUT>

My expectation is

<TESTCASE>
    <NAME>00001<NAME>
    <TIMEOUT>600000</TIMEOUT>

Thanks!

Using GNU Emacs 22.2.1 (i386-mingw-nt5.1.2600)
of 2008-03-26 on RELEASE

+6  A: 

You're looking for sgml-basic-offset

Edit: Actually, I should add how I figured that out. No one should understate the power that a self-documented editor provides:

Open an sgml document

C-h k tab says it's bound to a function that looks at variable indent-line-function.

C-h v indent-line-function told me to look at function sgml-indent-line

C-h f sgml-indent-line told me very little. Nothing really. But it also provided where it was implemented.

Well, looking at the implementation, I found that it's using sgml-calculate-indent. That's the meat of the algorithm... Go down and you can find the tag case, where the last element does

(+ (current-column) sgml-basic-offset)

A quick C-h v sgml-basic-offset will make sure we're looking at the one variable that is supposed to be customized. It indeed is.

Bahbar
Good story! Thanks for adding the extra detail.
Brandon Craig Rhodes
Thanks! You told me not only answers, but also methods. It's an very effective way to follow for any issues on Emacs! I tried, and it works. Thanks! (setq sgml-basic-offset 4)
Buzz