Using sgml-mode with
Emacs
Recent versions of Emacs (available
from the Ports Collection) contain a very useful package called
PSGML (can be installed from editors/psgml).
Automatically invoked when a file with the
.xml extension is loaded, or by typing
M-x sgml-mode, it is a major mode for dealing
with SGML files, elements and attributes.
An understanding of some of the commands provided by this mode
can make working with SGML documents such as the Handbook much
easier.
C-c C-e
Runs sgml-insert-element. You will
be prompted for the name of the element to insert at the
current point. You can use the Tab key to
complete the element. Elements that are not valid at the
current point will be disallowed.
The start and end tags for the element will be inserted.
If the element contains other, mandatory, elements then
these will be inserted as well.
C-c =
Runs sgml-change-element-name.
Place the point within an element and run this command. You
will be prompted for the name of the element to change to.
Both the start and end tags of the current element will be
changed to the new element.
C-c C-r
Runs sgml-tag-region. Select some
text (move to start of text, C-space,
move to end of text, C-space) and then
run this command. You will be prompted for the element to
use. This element will then be inserted immediately before
and after your marked region.
C-c -
Runs sgml-untag-element. Place the
point within the start or end tag of an element you want to
remove, and run this command. The element's start and end
tags will be removed.
C-c C-q
Runs sgml-fill-element. Will
recursively fill (i.e., reformat) content from the current
element in. The filling will affect
content in which whitespace is significant, such as within
programlisting elements, so run this
command with care.
C-c C-a
Runs sgml-edit-attributes. Opens a
second buffer containing a list of all the attributes for
the closest enclosing element, and their current values.
Use Tab to navigate between attributes,
C-k to remove an existing value and
replace it with a new one, C-c C-c to
close this buffer and return to the main document.
C-c C-v
Runs sgml-validate. Prompts you to
save the current document (if necessary) and then runs an
SGML validator. The output from the validator is captured
into a new buffer, and you can then navigate from one
troublespot to the next, fixing markup errors as you
go.
C-c /
Runs sgml-insert-end-tag. Inserts
the end tag for the current open element.
Doubtless there are other useful functions of this mode, but
those are the ones I use most often.
You can also use the following entries in
.emacs to set proper spacing, indentation,
and column width for working with the Documentation
Project.
(defun local-sgml-mode-hook
(setq fill-column 70
indent-tabs-mode nil
next-line-add-newlines nil
standard-indent 4
sgml-indent-data t)
(auto-fill-mode t)
(setq sgml-catalog-files '("/usr/local/share/xml/catalog")))
(add-hook 'psgml-mode-hook
'(lambda () (local-psgml-mode-hook)))