略語(abbrev)とは、より長い文字列へ展開される文字の列のことです。 ユーザーが略語の文字列を挿入すると、その展開形に自動的に置換されます。 これにより打鍵量を省けます。
現在有効な略語の集まりは、略語表(abbrev table)に記録されています。 各バッファにはローカルな略語表がありますが、 通常、同じメジャーモードのすべてのバッファは1つの略語表を共有します。 グローバルな略語表もあります。 通常、両方を使います。
略語表は、各略語に対するシンボルを収めたオブジェクト配列として表現されます。 シンボルの名前が略語です。 その値は展開形であり、その関数定義は展開を行うフック関数です。 その属性リストのセルには略語を展開した回数である利用回数が入ります。 それらのシンボルは、通常のオブジェクト配列にはインターンされませんから、 Lisp式を読み取った結果には、それらはけっして現れません。 実際、略語を扱うコード以外では、それらはけっして使われません。 したがって、それらをかなり非標準的に使っても安全です。 See section シンボルの作成とインターン。
ユーザーレベルの略語コマンドについては、 section `略語の利用法' in GNU Emacs マニュアルを参照してください。
略語(abbrev)モードは、変数abbrev-modeの値で制御される
マイナモードです。
nil以外であると、
バッファに略語が挿入されると自動的に展開するようになる。
値がnilであると、略語を定義することはできるが、
自動的には展開されない。
この変数は設定されると自動的にバッファローカルになる。
abbrev-modeを上書きしていないバッファ向けの
abbrev-modeの値である。
これは(default-value 'abbrev-mode)と同じである。
本節では、略語表の作成方法と扱い方について述べます。
nilを返す。
(abbrevname expansion hook usecount)の形の
要素から成るリストである。
戻り値はつねにnilである。
define-abbrev-tableは、新たな略語表の名前をこのリストに追加する。
nilである。
humanがnil以外であると、この記述は人間向けである。
さもなければ、この記述はLisp式、つまり、
nameの現在の定義どおりにnameを定義するような
define-abbrev-tableの呼び出しである。
これらの関数は、指定した略語表に略語を定義します。
define-abbrevは下位レベルの基本的な関数ですが、
add-abbrevはユーザーに情報を問い合わせるコマンドが使います。
"global"や"mode-specific"。)
この文字列はユーザーへのプロンプトに使われる。
引数argは、展開形の単語数である。
戻り値は、新たな略語を内部的に表現するシンボルであるか、
既存の略語を再定義することをユーザーが拒否したときにはnilである。
引数nameは文字列であること。
引数expansionは、普通は、目的の展開形(文字列)であるが、
略語を未定義にするにはnilである。
これが文字列でもnilでもなければ、
略語を『展開する』ときにはhookだけを実行する。
引数hookは、関数かnilである。
hookがnil以外であると、
略語をexpansionに置換し終えてから引数なしで呼ばれる。
hookが呼ばれるときには、
ポイントはexpansionの直後に置かれる。
略語の利用回数は0に初期化される。
nil以外であると、
ユーザーはグローバルな略語だけを使う意図があることを表す。
モード固有の略語を定義するコマンドに対して、
グローバルな略語を定義するように指示する。
この変数は本節の関数のふるまいを変えることはないが、
それらを呼び出す側でこの変数を検査している。
略語定義を保存したファイルは、実際には、Lispコードのファイルです。
略語は、同じ内容の同じ略語表を定義するLispプログラムの形で保存されます。
したがって、ファイルはload(see section プログラムからのロード方法)で
ロードできます。
しかし、関数quietly-read-abbrev-fileがより便利なインターフェイスを
提供します。
save-some-buffersなどのユーザーレベルの機能では、
ここに述べた変数の制御のもとで、略語をファイルに自動的に保存できます。
write-abbrev-fileで書いておいた
ファイルfilenameから、略語定義を読み取る。
filenameがnilであると、
abbrev-file-nameで指定されるファイルを使う。
save-abbrevsにtを設定して、変更は保存されるようにする。
この関数はいっさいメッセージを表示しない。
nilを返す。
save-abbrevがnil以外の値であると、
Emacsはファイルを保存するときに略語も保存する。
abbrev-file-nameが略語を保存するファイルを指定する。
nil以外に設定される。
これは、読者の略語を保存する機会を与えるために、
Emacsのさまざまなコマンドに対するフラグとして働く。
nilを返す。
通常、略語は、self-insert-commandを含む特定の対話的なコマンドに
よって展開されます。
本節では、データのやりとりに使う変数に加えて、そのようなコマンドを書くために
使用するサブルーティンについて述べます。
nilである。
省略可能な第2引数tableは、探索対象の略語表である。
tableがnilであると、
この関数は、まずカレントバッファのローカルな略語表を試し、
つぎにグローバルな略語表を試す。
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 section `略語展開の制御' in GNU Emacs マニュアル)
。
unexpand-abbrev向けに
expand-abbrevが残した情報を保持する。
nilである。
これは、コマンドunexpand-abbrev向けに
expand-abbrevが残した情報を保持する。
以下のコード例は、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"))))
Emacsにあらかじめロードされるメジャーモード向けの 略語表を保持する変数一覧を示します。
Go to the first, previous, next, last section, table of contents.