abbrevは通常はself-insert-command
を含む特定のinteractiveなコマンドにより展開されます。このセクションではそのようなコマンドの記述に使用されるサブルーチン、並びに通信のために使用される変数について説明します。
この関数はabbrevという名前のabbrevを表すシンボルをリターンする。そのabbrevが定義されていなければnil
をリターンする。オプションの2つ目の引数tableはそれを照合するためのabbrevテーブル。tableがnil
ならこの関数はまずカレントバッファーのローカルabbrevテーブル、次にグローバルabbrevテーブルを試みる。
この関数はabbrevが展開されるであろう文字列(カレントバッファーにたいして使用されるabbrevテーブルで定義される文字列)をリターンする。これはabbrevが有効なabbrevでなければnil
をリターンする。オプション引数tableはabbrev-symbol
の場合と同じように使用するabbrevテーブルを指定する。
このコマンドは、(もしあれば)ポイントの前のabbrevを展開する。ポイントがabbrevの後になければこのコマンドは何もしない。展開を行うためにこれは変数abbrev-expand-function
の値となっている関数を引数なしで呼び出して、何であれその関数がリターンしたものをリターンする。
デフォルトの展開関数は展開を行ったらabbrevのシンボル、それ以外はnil
をリターンする。そのabbrevシンボルがno-self-insert
プロパティが非nil
のシンボルであるようなフック関数をもち、そのフック関数が値としてnil
をリターンした場合には、たとえ展開が行われたとしてもデフォルト展開関数はnil
をリターンする。
この関数はstart
とend
の間のテキストを置換することによりabbrev
のabbrev展開形を挿入する。start
が省略された場合のデフォルトはポイント。name
が非nil
なら、それはこのabbrevが見つかった名前(文字列)であること。これは展開形のcapitalizationを調整するかどうかを判断するために使用される。この関数はabbrevの挿入に成功したらabbrev
、それ以外はnil
をリターンする。
このコマンドはポイントのカレント位置をabbrevの開始としてマークする。expand-abbrev
の次回呼び出しでは、通常のように以前の単語ではなく、ここからポイント(その時点での位置)にあるテキストが展開するべきabbrevとして使用される。
このコマンドは、まずargがnil
ならポイントの前の任意のabbrevを展開する(インタラクティブな呼び出しではargはプレフィクス引数)。それから展開する次のabbrevの開始を示すためにポイントの前にハイフンを挿入する。実際の展開ではハイフンは削除される。
これが非nil
にセットされているときは、すべて大文字で入力されたabbrevはすべて大文字を使用して展開される。それ以外ならすべて大文字で入力されたabbrevは、展開形の単語ごとにcapitalizeして展開される。
この変数の値は次にabbrevを展開する開始位置としてexpand-abbrev
に使用されるバッファー位置。値はnil
も可能であり、それはかわりにポイントの前の単語を使用することを意味する。abbrev-start-location
はexpand-abbrev
の呼び出しごとに毎回nil
にセットされる。この変数はabbrev-prefix-mark
からもセットされる。
この変数の値はabbrev-start-location
がセットされたバッファー。他のバッファーでabbrev展開を試みることによりabbrev-start-location
はクリアーされる。この変数はabbrev-prefix-mark
によりセットされる。
これは直近のabbrev展開のabbrev-symbol
。これはunexpand-abbrev
コマンド(Expanding Abbrevs in The GNU Emacs
Manualを参照)のためにexpand-abbrev
により残された情報である。
これは直近の.abbrev展開の場所。これにはunexpand-abbrev
コマンドのためにexpand-abbrev
により残された情報が含まれる。
これは直近のabbrev展開の正確な展開形を、(もしあれば)大文字小文字変換した後のテキストである。そのabbrevがすでに非展開されていれば値はnil
。これにはunexpand-abbrev
コマンドのためにexpand-abbrev
ga残sita情報が含まれる。
この変数の値は展開を行うためにexpand-abbrev
が引数なしで呼び出すであろう関数。この関数では展開を行う前後に行いたいことを行うことができる。展開が行われた場合にはそのabbrevシンボルをリターンすること。
以下のサンプルコードではabbrev-expand-function
のシンプルな使い方を示します。このサンプルではfoo-mode
が‘#’で始まる行がコメントであるような特定のファイルを編集するためのモードであるとします。それらコメント行にたいしてはTextモードのabbrevの使用が望ましく、その他すべての行にたいしては正規のローカルabbrevテーブルfoo-mode-abbrev-table
が適しています。local-abbrev-table
とtext-mode-abbrev-table
の定義については、標準abbrevテーブルを参照してください。add-function
についての詳細はEmacs Lisp関数にたいするアドバイスを参照してください。
(defun foo-mode-abbrev-expand-function (expand) (if (not (save-excursion (forward-line 0) (eq (char-after) ?#))) ;; 通常の展開を行う (funcall expand) ;; コメント内はtext-modeのabbrevを使用 (let ((local-abbrev-table text-mode-abbrev-table)) (funcall expand)))) (add-hook 'foo-mode-hook (lambda () (add-function :around (local 'abbrev-expand-function) #'foo-mode-abbrev-expand-function)))