js-html-mode.el および js-html-indent.el の使い方 by OKA Toshiyuki ●対応する Emacs のバージョン XEmacs 21 でしか試していません。 ●ファイル js-html-mode.el は、HTML/JavaScript/JSP 用のメジャーモード (js-html-mode) を提供するファイルです。各種 HTML タグの入力や font-lock 用キーワードなど が定義されています。 一方、js-html-indent.el は、HTML/JavaScript/JSP ファイルにおけるインデン トの制御に特化したファイルです。関数を定義して少数のキーバインドを行って いるだけなので、js-html-mode.el 以外の他のファイルとの併用も可能です。 lei-utils.el は、おもにクォートで囲まれた文字列リテラルやコメント、カッコ で囲まれたブロックを解析するためのヘルパー関数を定義しています。 ●使い方 上記ファイルを load-path の通ったところに置いた上で、.emacs の中などに、 (load "lei-utils.el") (autoload 'js-html-mode "js-html-mode" nil t) (autoload 'js-html-indent "js-html-indent" nil t) (add-hook 'js-html-mode-hook 'js-html-indent) という記述を追加してください。font-lock モードも使用するのであれば、 (add-hook 'js-html-mode-hook 'font-lock-mode) も追加してください。 バッファを js-html-mode にするには、M-x js-html-mode を実行するか、 auto-mode-alist に (("\\.html?$" . js-html-mode)) (("\\.jsp?$" . js-html-mode)) を追加するとよいでしょう。 例: (setq auto-mode-alist (append '(("\\.html?$" . js-html-mode)) '(("\\.jsp?$" . js-html-mode)) auto-mode-alist)) ●キーバインド js-html-mode におけるキーバインドについては、js-html-mode.el の中の、 (defun js-html-mode () … を見てください (すげー手抜き)。基本的に、カー ソル位置に開始タグと終了タグを挿入するようになっています。領域が指定され ていると、その領域を囲むようにタグが配置されます。 一つだけ説明しておくと、\C-c\C-c にバインドされている js-html-insert-any-tag は、ミニバッファ上でタグ名の入力を求めてきます。 何も入力せずにリターンを返すと、前回に入力したタグ名が使われます。初期値 は code が設定されています。 js-html-indent におけるキーバインドについては、js-html-indent.el の中の、 (defun js-html-define-keys () … を見てください。基本的には、'<', '>', '}', TAB, DEL の 5つのキーだけがバインドされます。 領域を指定して TAB を打つと、その領域全体が 1インデント深くなります。逆 にDEL を打つと、1インデント浅くなります。まあ、VisualStudio などの IDE でのTAB および Shift+TAB の動作に近いかな。 デフォルトのバインドが気にくわないときは、ソースを適当に修正するか、自分 用のキーバインドを設定する関数を書いて (add-hook 'js-html-indent-hook …) してください。 ●変数 以下の変数が defvar されています。適当に setq して使ってください。 js-html-mode-hook: nil: js-html-mode のフック js-html-comment-column: 48: indent-for-comment (一行コメント)の開始位置 js-html-font-lock-keywords: font-lock 用のキーワード定義 js-html-indent-hook: nil: js-html-indent 用のフック js-html-indent-width: 2: インデント幅 js-html-indent-upcase-tag: nil: t が設定されていると、'>' でタグを閉じるときに、タグ名が大文字に 変換される。 js-html-indent-ignored-tagname-regexp: 次の行でインデントを深くしないタグ名を表す正規正現。 js-html-no-indent-tagname-regexp: "\\(p\\)": 必ず前の行にインデントを合わせるタグ。 ●インデント幅 デフォルトでは 2 になっています。自分の好みに応じて js-html-indent-width を setq してください。同時に tab-width も変えてやる とより幸せになれるかもしれません。(とくに Windows系での開発で) ●バグ いっぱいあります。たとえば、まだラベルに対応していません。また、jsp なプ ログラムで、<% 〜 %> の中で対応のとれていないカッコを使うとインデントの 深さがおかしくなる場合があります。要求があれば、随時対応予定です。 ----------------------------------------------------------------------- 使用・複製・修正・配布に関する許諾条件: 本ファイルは、以下の5条件が全て遵守される場合に限り、公序良俗に反しな い範囲で、商用・非商用を問わず、いかなる個人または組織に対しても対価を 支払うことなく、誰でも自由に、使用・複製・修正・配布の全部または一部の 行為を行うことができる。 (1) この「使用・複製・修正・配布に関する許諾条件」にある文言を一切修正 しないこと。 (2) ファイルの先頭部に記述してある author行および Copyright行または、 そのいずれかを削除したり修正したりしないこと。ただし、author行また は Copyright行で記述されている当の個人または組織 (以後、「著作者」 と呼ぶ) は、自身に関する記述に限り、削除したり修正したりすることが できる。 (3) ファイルに何らかの修正を加えた場合には、修正した個人または組織に関 する author行と Copyright 行を追加することができる。その場合、追加 された記述に対しても (2)項の規定が適用される。 (4) 本ファイルを使用、複製、修正または配布した結果として、いかなる種類 の損失、損害または不利益が発生しても、「著作者」がその責を一切負わ ないことに同意し、かつ「著作者」にその責を一切負わせないこと。 (5) 本ファイルをコンパイラに適用して得られたバイナリオブジェクトは、そ のコンパイルを実行した個人または組織の所有物であり、「著作者」との 間には、一切の権利・義務関係が存在しないことに同意する。 -----------------------------------------------------------------------