[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32. 省略形とその展開

省略あるいは省略形(abbrev)とは、さらに長い文字列へと展開できる 文字列のことです。ユーザは省略した文字列を入力し、それを省略の展開形によっ て自動的に置き換えることができます。このことによりタイプする量を減らせま す。

現在有効な省略形は、省略形テーブル(abbrev table)に保持されてい ます。各バッファはローカルな省略形テーブルを持っていますが、通常同じ主モー ドにあるバッファは一つの省略形テーブルを共有します。また、グローバルな省 略形テーブルも存在します。通常は両方のテーブルを使用します。

省略形テーブルは、各省略形のためのシンボルを含むobarrayとして表現さ れます。このシンボルの名前が省略形であり、シンボルの値が展開形、シンボル の関数定義が省略形を展開するときのフック関数です(see section 省略形の定義)。シンボルの属性リスト・セルには、省略形が展開された回数が入りま す。これらのシンボルは通常のobarrayにはinternされないため、Lisp式を読み 込んだ結果として現れることは決してありません。実際、普通は省略形を操作す るコード以外では決して使われません。そのため、これらのシンボルを極端に通 常とは違う方法で使用しても安全です。See section シンボルの作成と intern

ユーザレベルでの省略形に関するコマンドは(emacs)Abbrevs section `Abbrev Mode' in The GNU Emacs Manualをご覧ください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.1 Emacsで省略形が使えるように準備する

Abbrevモードは、abbrev-mode変数の値で制御される副モードです。

Variable: abbrev-mode

この変数の値が非nilのとき、省略形がバッファに入力されたときの自動 展開が有効になります。値がnilのときは、省略形が定義されていたとし ても、それは自動的に展開されません。

この変数はどのような方法で設定しても、自動的にバッファローカル変数になり ます。

Variable: default-abbrev-mode

これは、abbrev-modeの、その値が上書きされていないバッファにおける 値です。(default-value 'abbrev-mode)と同じです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.2 省略形テーブル

この節では、省略形テーブルをどのように作成し、操作するのかを説明します。

Function: make-abbrev-table

この関数は、新しい空の省略形テーブル、つまり、何もシンボルを含まない obarrayを作成して返します。これはゼロで埋められたベクトルです。

Function: clear-abbrev-table table

この関数は、tableのすべての省略形の定義を未定義化しますが、テーブ ルそのものは空にして残します。戻り値はnilです。

Function: define-abbrev-table tabname definitions

この関数は、tabname(シンボル)を省略形テーブルとして定義します。つまり、 値に省略形テーブルをもつ変数として定義します。この関数は、 definitionsにしたがって、テーブルのなかの省略形を定義します。 definitionsは、(abbrevname expansion hook usecount)形式の要素をもつリストです。戻り値は常にnilです。

Variable: abbrev-table-name-list

省略形テーブルを値にもつシンボルのリストです。define-abbrev-table は新しい省略形テーブルの名前をこのリストにつけ加えます。

Function: insert-abbrev-table-description name &optional human

この関数は、nameと名づけられた省略形テーブルの記述を、ポイントの前に挿 入します。引数nameは、省略形テーブルを値にもつシンボルです。戻り値は、 常にnilです。

もし、humanが非nilのとき、記述は人間が読みやすい形でおこなわ れます。それ以外のばあい、記述はLisp式となります。このLisp式は、現在定義 されているnameを正確に定義するdefine-abbrev-tableの呼び出し 式です。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.3 省略形の定義

以下の関数は、指定した省略形テーブルの中の省略形を定義します。 define-abbrevが低水準な基本関数であるのに対し、add-abbrev はユーザに情報を尋ねるコマンドによって使われます。

Function: add-abbrev table type arg

この関数は、ユーザからの情報に基づいて、省略形テーブルtableに省略形を 追加します。引数typeは、これから定義する省略形の種類に関して英語で記 述した文字列です(典型的な例は"global"あるいは "mode-specific")。これは、ユーザへのプロンプトに使われます。引数 argは、展開形に使用する単語数です。

戻り値は、新しい省略形を内部的に示すシンボルです。または、すでに存在する省 略形を上書きするかどうかの確認時にユーザが承諾しなかった場合には、 nilです。

Function: define-abbrev table name expansion hook

この関数は、tableに、nameという名前の、expansionへと展開さ れ、hookを呼び出す省略形を定義します。戻り値は、Emacs内部で省略形を 表現するinternされていないシンボルです。その名前は、nameです。

引数nameは、文字列であるべきです。引数expansionは、文字列か、あ るいは省略形を取り消す場合は、nilであるべきです。

引数hookは、関数またはnilです。もし、hookが非nilの ときは、省略形をexpansionで置き換えたあとに、引数なしでそれが呼ば れます。hookが呼ばれるとき、ポイントはexpansionの末尾です。

省略形の使用回数はゼロに初期化されます。

User Option: only-global-abbrevs

この変数の値が非nilの場合、ユーザはグローバル省略形だけを使うと決 めたことになります。このことはコマンドに、モード特有の省略形を定義するか わりに、グローバルな省略形を定義するよう示します。この変数は、この節の関数の機 能を変えることはなく、関数の呼びだし側でチェックされます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.4 省略形をファイルにセーブする

省略形の定義が保存されたファイルは、実際にはLispコードのファイルです。 省略形は、同じ内容の省略形テーブルを定義するLispプログラムの形で保存されます。 そのため、load (see section プログラムでロードする方法)でファイルを読み 込むことが可能です。しかしながら、関数quietly-read-abbrev-fileは、 より便利なインターフェースを提供します。

save-some-buffersのようなユーザレベルの機能は、以下に示すよう な変数の制御下で、自動的に省略形をファイルへ保存することがで きます。

User Option: abbrev-file-name

省略形を読み書きするファイル名のデフォルト値です。

Function: quietly-read-abbrev-file filename

この関数は、前にwrite-abbrev-fileで書き込まれたfilenameという 名前のファイルから、省略形の定義を読み込みます。もし、filenamenilのときは、abbrev-file-nameで指定されたファイルが使われ ます。あとで変更を保存するために、save-abbrevstにセットさ れます。

この関数は、メッセージを表示しません。nilを返します。

User Option: save-abbrevs

変数save-abbrevが非nilのとき、Emacsはファイルをセーブする時 に省略形もセーブします。abbrev-file-nameは、省略形をセーブするファ イル名を指定します。

Variable: abbrevs-changed

この変数は、省略形の定義や変更があったときに、非nilにセットされます。さま ざまなEmacsコマンドがあなたの省略形を保存するかどうかを判断するフラグの 役目を果たします。

Command: write-abbrev-file filename

全省略形テーブルのすべての省略形定義を、ファイルfilenameへ、ロードす ると元と同じ省略形を定義するLispプログラムの形でセーブします。この関数は nilを返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.5 省略形の参照と展開

省略形はたいてい、self-insert-commandを含む対話的に使われるコマ ンドによって展開されます。この節では、そのような関数を書く時に使うサブルーチン について説明します。同じく、関数同士がコミュニケーションするために使う変数 についても説明します。

Function: abbrev-symbol abbrev &optional table

この関数は、abbrevと名づけられた省略形を示すシンボルを返します。省略形 が定義されていない場合は、nilを返します。二つめのオプション引数 tableは、省略形を探すテーブル名です。tablenilのとき、この 関数は、まずカレント・バッファのローカル省略形テーブルを探し、その次にグロー バル省略形テーブルを探します。

Function: abbrev-expansion abbrev &optional table

この関数は、abbrevが(カレント・バッファで使われる省略形テーブルの定義に したがって)展開される文字列を返します。オプション引数tableは、 abbrev-symbolの場合と同じく、使用するテーブルを指定します。

Command: expand-abbrev

このコマンドは、ポイントの前の省略形を展開します。もし、ポイントが省略形の後 ろになければ、このコマンドはなにもしません。展開を行なった場合はt を返し、それ以外はnilを返します。

Command: abbrev-prefix-mark &optional arg

現在のポイントを、省略形の始まりとしてマークします。次の expand-abbrevの呼び出しでは、通常のようにポイント直前の単語ではな く、この場所から(そのときの)ポイントまでを、展開するべき省略形として使用 します。

User Option: abbrev-all-caps

nilのとき、すべて大文字で入力された省略形は、すべて大文字で展開さ れます。それ以外の場合、すべて大文字で入力された省略形は、各単語の先頭の 一文字が大文字で展開されます。

Variable: abbrev-start-location

これは、expand-abbrevのためのバッファ内位置で、次の省略形展開の始ま りの位置に使われます。(nilのときは、ポイントの前の単語を代わりに 使う意味になります)。 abbrev-start-locationは、expand-abbrev が呼び出されるたびにnilに初期化されます。この変数は、 abbrev-prefix-markによってもセットされます。

Variable: abbrev-start-location-buffer

この変数の値は、abbrev-start-locationがセットされたバッファです。ほ かのバッファで省略形展開を行なうと、abbrev-start-locationはクリアさ れます。この変数は、abbrev-prefix-markによってセットされます。

Variable: last-abbrev

これは、最新の省略形の展開のabbrev-symbolです。この情報は、 unexpand-abbrevコマンドのために、expand-abbrevによって設定 されます。

Variable: last-abbrev-location

最新の省略形展開が行なわれた場所を示します。この情報は、 unexpand-abbrevコマンドのために、expand-abbrevによって設定 されます。

Variable: last-abbrev-text

これは、大文字小文字の変換も(もしあった場合は)含めて、最新の省略形展開の正 確な展開形です。もし、展開がすでに逆展開さているならば、この値はnilと なります。この情報は、unexpand-abbrevコマンドのために、 expand-abbrevによって設定されます。

Variable: pre-abbrev-expand-hook

これは正規フックであり、省略形が展開される直前に、このフックが保持する関数が順番に実行さ れます。See section フック。 正規フックであるため、このフック関数は引数をとり ません。しかしながら、ポイントの直前を調べることで、展開される省略形を見つ けることができます。

以下の例は、pre-abbrev-expand-hookの簡単な使い方です。もしユー ザが省略形を句読点で終らせた場合、確認を行なうフック関数が実行されま す。このため、このフックはユーザに省略形を展開するかどうか決定させ、もし 確認がとれない場合はその展開を中止します。

 
(add-hook 'pre-abbrev-expand-hook 'query-if-not-space)

;; この関数はpre-abbrev-expand-hookから呼び出されます。

;; もしユーザがスペースで省略形を終らせた場合、この関数は何も
;; 行ないません(省略形の展開のために戻ります)。
;; もしユーザがそれ以外の文字を入力した場合、この関数は展開を行なうか
;; どうかを尋ねます。

;; 問い合わせに対して、ユーザがyを入力した時nilを
;; 返します(not関数のため)。
;; しかし戻り値は展開には影響ないので、これで問題ないでしょう。


(defun query-if-not-space ()
  (if (/= ?\  (preceding-char))
      (if (not (y-or-n-p "Do you want to expand this abbrev? "))
          (error "Not expanding this abbrev"))))

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

32.6 標準的な省略形テーブル

ここに示す変数は、Emacsでプリロードされる主モードのために用意してい る省略形テーブルです。

Variable: global-abbrev-table

モードに依存しない省略形テーブルです。ここで定義された省略形は、全バッファ で有効になります。各バッファは、ローカルな省略形テーブルももつことができ、 そこで定義された省略形は、このグローバル・テーブルのものよりも優先されます。

Variable: local-abbrev-table

このバッファローカル変数の値は、カレント・バッファの(モード特有の)省略形テー ブルです。

Variable: fundamental-mode-abbrev-table

Fundamentalモードで使われるローカルな省略形テーブルです。全Fundamentalモー ド・バッファのローカル省略形テーブルとなります。

Variable: text-mode-abbrev-table

Textモードで使われる省略形テーブルです。

Variable: c-mode-abbrev-table

Cモードで使われる省略形テーブルです。

Variable: lisp-mode-abbrev-table

LispモードとEmacs Lispモードで使われる省略形テーブルです。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Yasutaka SHINDOH on September, 29 2006 using texi2html 1.76.