次: Standard Abbrev Tables, 前: Abbrev Files, 上: Abbrevs
通常、略語は、self-insert-command
を含む特定の対話的なコマンドに
よって展開されます。
本節では、データのやりとりに使う変数に加えて、そのようなコマンドを書くために
使用するサブルーティンについて述べます。
この関数は、名前abbrevの略語を表すシンボルを返す。 そのような略語が定義されていなければ、戻り値は
nil
である。 省略可能な第2引数tableは、探索対象の略語表である。 tableがnil
であると、 この関数は、まずカレントバッファのローカルな略語表を試し、 つぎにグローバルな略語表を試す。
この関数は、abbrevが (カレントバッファで使用される略語表での定義どおりに) 展開されるであろう文字列を返す。 省略可能な引数tableは、
abbrev-symbol
と同様に、 使用する略語表を指定する。
このコマンドは、ポイントのまえの略語をあれば展開する。 略語の直後にポイントがない場合、このコマンドはなにもしない。 このコマンドは、展開を行えば
t
を返し、 さもなければnil
を返す。
現在のポイント位置を略語の開始位置としてマークする。 つぎに
expand-abbrev
を呼び出すと、 通常どおりにポイントのまえの単語を使うかわりに、 ここから(その時点での)ポイントまでのテキストを略語として展開する。
これが
nil
以外であると、 大文字だけで入力された略語を大文字だけで展開する。 さもなければ、大文字だけで入力された略語は、 展開形の各単語を大文字で始めるように展開される。
これは、
expand-abbrev
がつぎに展開する略語の開始位置として使う バッファ内位置である。 (nil
であると、そのかわりにポイントのまえの単語を使う意味である。)expand-abbrev
が呼び出されるたびに、abbrev-start-location
はnil
に設定される。 この変数は、abbrev-prefix-mark
でも設定される。
この変数の値は、
abbrev-start-location
が設定されたバッファである。 別のバッファで略語を展開しようとするとabbrev-start-location
は クリアされる。 この変数はabbrev-prefix-mark
が設定する。
これは、もっとも最近に略語展開された
abbrev-symbol
(略語を表すシンボル)である。 この情報は、コマンドunexpand-abbrev
向けにexpand-abbrev
が残す (see 略語展開の制御) 。
これは、もっとも最近に略語展開した箇所である。 これは、コマンド
unexpand-abbrev
向けにexpand-abbrev
が残した情報を保持する。
これは、もっとも最近に略語展開したときの(あれば)大文字小文字変換後の 展開形のテキストである。 略語展開を取り消すと、この値は
nil
である。 これは、コマンドunexpand-abbrev
向けにexpand-abbrev
が残した情報を保持する。
これは、任意の略語を展開する直前に順に実行される関数を 収めたノーマルフックである。 see Hooks。 ノーマルフックなので、フック関数は引数を受け取らない。 しかし、バッファでポイントのまえを調べることで 展開すべき略語をみつけることができる。
以下のコード例は、pre-abbrev-expand-hook
の使い方を示します。
ユーザーが略語を句読点文字で終えると、フック関数が確認を求めます。
したがって、このフックにより、ユーザーは展開の可否を決定でき、
了承しなかったときには展開を止められます。
(add-hook 'pre-abbrev-expand-hook 'query-if-not-space) ;; この関数は、pre-abbrev-expand-hook
が起動する ;; ユーザーが略語を空白で終えると、この関数はなにもしない ;; (つまり、略語を展開できるように戻る) ;; ユーザーがその他の文字を入力したら、 ;; この関数は展開するかどうかを問い合わせる ;; ユーザーがプロンプトにyで答えたら、 ;; (関数not
を使っているので)この関数はnil
を返すが ;; 問題ない。戻り値は展開には影響しない (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"))))