<application>Emacs</application> で <literal>sgml-mode</literal> を利用する 新しいバージョンの EmacsXEmacs (Ports Collection にあります)には、 PSGML と呼ばれる非常に便利なパッケージが附属しています。 これは拡張子がとなっている .sgml のファイルが読み込まれるか、 M-x sgml-mode と入力することで呼び出されます。 PSGML は、SGML ファイルやエレメント、属性を扱うためのメジャーモードです。 このモードで提供されているいくつかのコマンドを知っていれば、 ハンドブックなどの SGML 文書をより簡単に扱うことができるようになります。 C-c C-e sgml-insert-element を実行します。 実行すると、現在のカーソル位置に挿入すべきエレメント名が聞かれ、 TAB キーを使うことでエレメント名の補完ができます。また、 カーソル位置に挿入できないエレメント名は入力できないようになっています。 挿入は、指定したエレメントのスタートタグとエンドタグが両方行なわれます。 もし、そのエレメントが他の必須エレメントを含む場合は、 その必須エレメントも同じように挿入されます。 C-c = sgml-change-element-name を実行します。 カーソルをエレメントの内側に移動させてこのコマンドを実行して下さい。 変更するエレメント名が聞かれ、現在のエレメントのスタートタグとエンドタグが 入力した新しいエレメントのものに変更されます。 C-c C-r sgml-tag-region を実行します。 テキストを指定(テキストの開始点に移動して C-Space を押し、 終了点に移動して C-Space を押す)してから、このコマンドを実行して下さい。 利用するエレメント名が聞かれ、 マークが付けられた範囲(リージョン)のすぐ前後に指定したエレメントが挿入されます。 C-c - sgml-untag-element を実行します。 カーソルを削除したいエレメントのスタートタグか、エンドタグの上において このコマンドを実行して下さい。すると、エレメントのスタートタグ、 エンドタグが両方とも削除されます。 C-c C-q sgml-fill-element を実行します。 実行すると、カーソル位置のエレメントの内容に対して、 (整形する時のように)再帰的な文章の詰めが行なわれます。 この詰め作業は、含まれている空白文字が重要なもの、たとえば programlisting エレメントの中などでも効果がありますので、 利用の際は注意して下さい。 C-c C-a sgml-edit-attributes を実行します。 実行するともう一つバッファを開き、 最も近い閉じたエレメントのすべての属性のリストと、現在の値を表示します。 TAB を使って属性間を移動することができ、C-k を 押すことで、既存の値を新しいものに置き換えることができます。 また、C-c C-c を押すことで、バッファを閉じて 元の文書に戻ることができます。 C-c C-v sgml-validate を実行します。 実行すると(必要に応じて)現在編集中の文書をセーブするかどうか聞かれ、 次に SGML の正当性検査が行なわれます。 検査の出力は新しいバッファに表示されますので、 誤りのある部分へひとつひとつ移動してマークアップのミスを修正することができます。 もちろん、このモードには他にも有用な機能があります。 ここにあげたのは、その中でもわたしが非常に頻繁に利用しているものです。 ドキュメンテーションプロジェクトで作業するのに、 適切な空白、字下げ、コラム幅を設定するのに、 .emacs に以下のエントリを使うことができます。 (setq sgml-mode-hook '(lambda () (setq fill-column 70 indent-tabs-mode nil next-line-add-newlines nil standard-indent 2) (auto-fill-mode t)))