FreeBSD Documentation Project Primer for New Contributors
Prev |  | Next

# Chapter 11 Using `sgml-mode` with Emacs

Recent versions of Emacs or XEmacs (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)))

Prev | Home | Next
Word List |  | See Also