define-abbrev は、略語テーブルで略語を定義するための低レベルな基本関数です。
メジャーモードがシステム略語を定義する場合、define-abbrev を呼び出し、:system プロパティに t
を指定する必要があります。保存されたシステム外の略語は、起動時(すなわち、一部のメジャーモードがロードされる前)に復元される点にご注意ください。したがって、メジャーモードは、最初にロードされる際に略語テーブルが空であると想定すべきではありません。
この関数は、abbrev-table 内に name
という名前の略語を定義します。この略語は expansion に展開され、プロパティ props を持つ hook を呼び出します(略語のプロパティ を参照)。戻り値は name です。props 内の :system プロパティはここで特別に扱われます。もしこのプロパティの値が force である場合、同名の非システム略語であっても、既存の定義を上書きします。
name は文字列である必要があります。引数 expansion は通常、意図する展開内容(文字列)であり、nil は略語を未定義にします。文字列または nil
以外の場合は、その略語は hook を実行することによってのみ展開されます。
引数 hook は関数または nil です。hook が nil でない場合、略記が expansion に置き換えられた後、引数なしで呼び出されます。hook が呼び出される際、ポインタは expansion
の末尾に位置します。
hook が nil 以外の記号であり、その
no-self-insert プロパティが nil 以外である場合、hook
によって、展開をトリガーした自己挿入入力文字を挿入するかどうかを明示的に制御できます。この場合に hook
が nil 以外を返すと、その文字の挿入が抑制されます。対照的に、hook が nil を返し、expand-abbrev(または abbrev-insert)も nil
を返す場合は、あたかも実際に展開が行われなかったかのようになります。
通常、define-abbrev は実際に略語を変更する場合、変数 abbrevs-changed に t
を設定します。これは、一部のコマンドが略語の保存を提案できるようにするためです。システム略語については、そもそも保存されないため、この処理は行われません。
この変数が nil
以外の場合、ユーザーはグローバル略語のみを使用する意向であることを意味します。これにより、モード固有の略語を定義するコマンドは、代わりにグローバル略語を定義するようになります。この変数は本セクションの関数の動作を変更するものではなく、呼び出し元によって参照されます。