| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
略語(abbrev)とは, より長い文字列へ展開される文字の列のことです. ユーザーが略語の文字列を挿入すると, その展開形に自動的に置換されます. これにより打鍵量を省けます.
現在有効な略語の集まりは, 略語表(abbrev table)に記録されています. 各バッファにはローカルな略語表がありますが, 通常, 同じメジャーモードのすべてのバッファは1つの略語表を共有します. グローバルな略語表もあります. 通常, 両方を使います.
略語表は, 各略語に対するシンボルを収めたオブジェクト配列として表現されます. シンボルの名前が略語です. その値は展開形であり, その関数定義は展開を行うフック関数です. その属性リストのセルには略語を展開した回数である利用回数が入ります. それらのシンボルは, 通常のオブジェクト配列にはインターンされませんから, Lisp式を読み取った結果には, それらはけっして現れません. 実際, 略語を扱うコード以外では, それらはけっして使われません. したがって, それらをかなり非標準的に使っても安全です. See section シンボルの作成とインターン.
ユーザーレベルの略語コマンドについては, (emacs-ja)Abbrevs section ‘略語の利用法’ in GNU Emacs マニュアルを参照してください.
| 35.1 略語(abbrev)モードの設定 | Setting up Emacs for abbreviation. | |
| 35.2 略語表 | Creating and working with abbrev tables. | |
| 35.3 略語を定義する | Specifying abbreviations and their expansions. | |
| 35.4 略語をファイルに保存する | Saving abbrevs in files. | |
| 35.5 略語の探索と展開 | Controlling expansion; expansion subroutines. | |
| 35.6 標準の略語表 | Abbrev tables used by various major modes. |
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
略語(abbrev)モードは, 変数abbrev-modeの値で制御される
マイナモードです.
この変数の値がnil以外であると,
バッファに略語が挿入されると自動的に展開するようになる.
値がnilであると, 略語を定義することはできるが,
自動的には展開されない.
この変数は設定されると自動的にバッファローカルになる.
これは, abbrev-modeを上書きしていないバッファ向けの
abbrev-modeの値である.
これは(default-value 'abbrev-mode)と同じである.
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
本節では, 略語表の作成方法と扱い方について述べます.
この関数は, 新たな空の略語表, つまり, シンボルを含まないオブジェクト配列を作成して返す. ベクトルはゼロで埋められる.
この関数は, 略語表table内のすべての略語を未定義にして略語表を空にする.
関数はnilを返す.
この関数は, tabname(シンボル)を略語表の名前として定義する.
つまり, この変数としての値は略語表になる.
definitionsに従って略語表に略語を定義する.
ここで, definitionsは
(abbrevname expansion hook usecount)の形の
要素から成るリストである.
戻り値はつねにnilである.
その値が略語表であるシンボルのリストである.
define-abbrev-tableは, 新たな略語表の名前をこのリストに追加する.
この関数は, nameで指名される略語表の記述をポイントのまえに挿入する.
引数nameは, その値が略語表であるシンボルである.
戻り値はつねにnilである.
humanがnil以外であると, この記述は人間向けである.
さもなければ, この記述はLisp式, つまり,
nameの現在の定義どおりにnameを定義するような
define-abbrev-tableの呼び出しである.
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
これらの関数は, 指定した略語表に略語を定義します.
define-abbrevは下位レベルの基本的な関数ですが,
add-abbrevはユーザーに情報を問い合わせるコマンドが使います.
この関数は, ユーザーからの情報に基づいて
略語表tableに略語を追加する.
引数typeは, この略語の種類を英語で表した文字列である
(典型的には, "global"や"mode-specific". )
この文字列はユーザーへのプロンプトに使われる.
引数argは, 展開形の単語数である.
戻り値は, 新たな略語を内部的に表現するシンボルであるか,
既存の略語を再定義することをユーザーが拒否したときにはnilである.
この関数は, 略語表tableにおいて, 略語nameをexpansionに展開するように定義し, hookを呼び出すように定義する. 戻り値は, Emacs内部で略語を表現するシンボルを返すが, その名前はnameである.
引数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のさまざまなコマンドに対するフラグとして働く.
ロードすると同じ略語を定義するようなLispプログラムの形で,
ファイルfilenameにすべての略語表のすべての略語定義を保存する.
この関数はnilを返す.
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
通常, 略語は, 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 (emacs-ja)Expanding Abbrevs section ‘略語展開の制御’ in GNU Emacs マニュアル)
.
これは, もっとも最近に略語展開した箇所である.
これは, コマンドunexpand-abbrev向けに
expand-abbrevが残した情報を保持する.
これは, もっとも最近に略語展開したときの(あれば)大文字小文字変換後の
展開形のテキストである.
略語展開を取り消すと, この値はnilである.
これは, コマンドunexpand-abbrev向けに
expand-abbrevが残した情報を保持する.
これは, 任意の略語を展開する直前に順に実行される関数を 収めたノーマルフックである. see section フック. ノーマルフックなので, フック関数は引数を受け取らない. しかし, バッファでポイントのまえを調べることで 展開すべき略語をみつけることができる.
以下のコード例は, pre-abbrev-expand-hookの使い方を示します.
ユーザーが略語を句読点文字で終えると, フック関数が確認を求めます.
したがって, このフックにより, ユーザーは展開の可否を決定でき,
了承しなかったときには展開を止められます.
(add-hook 'pre-abbrev-expand-hook 'query-if-not-space) ;; この関数は, |
| [ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は新堂 安孝によって2009年9月22日にtexi2html 1.82を用いて生成されました。