検索エンジンから来た人に注意このマニュアルは、Emacs ver. 19.x 向けのマニュアルを Mule 2.x の開発にあたり邦訳したものを、 電脳外道学会がミラーリングしているものであり、旧版製品パラノイアであるところの椅子人の趣味によるものです。しかしながら、現在の Emacs の主流は ver. 20 以降であり、ver 19.x と ver 20.x とでは、仕様の違いが少なからずあります。 したがって、一般的な Emacs ユーザーにとっては、
このマニュアルと実機の動作とが符合しない場合があります。
|
省略あるいは省略形(abbrev)とは、さらに長い文字列へと展開できる 文字列のことです。ユーザは省略した文字列を入力し、それを省略の展開形によっ て自動的に置き換えることができます。このことによりタイプする量を減らせま す。
現在有効な省略形は、省略形テーブル(abbrev table)に保持されてい ます。各バッファはローカルな省略形テーブルを持っていますが、通常同じ主モー ドにあるバッファは一つの省略形テーブルを共有します。また、グローバルな省 略形テーブルも存在します。通常は両方のテーブルを使用します。
省略形テーブルは、各省略形のためのシンボルを含むobarrayとして表現さ れます。このシンボルの名前が省略形であり、シンボルの値が展開形、シンボル の関数定義が省略形を展開するときのフック関数です(see section 省略形の定義)。シンボルの属性リスト・セルには、省略形が展開された回数が入りま す。これらのシンボルは通常のobarrayにはinternされないため、Lisp式を読み 込んだ結果として現れることは決してありません。実際、普通は省略形を操作す るコード以外では決して使われません。そのため、これらのシンボルを極端に通 常とは違う方法で使用しても安全です。See section シンボルの作成と intern。
ユーザレベルでの省略形に関するコマンドはsection `Abbrev Mode' in The GNU Emacs Manualをご覧ください。
Abbrevモードは、abbrev-mode
変数の値で制御される副モードです。
nil
のとき、省略形がバッファに入力されたときの自動
展開が有効になります。値がnil
のときは、省略形が定義されていたとし
ても、それは自動的に展開されません。
この変数はどのような方法で設定しても、自動的にバッファローカル変数になり ます。
abbrev-mode
の、その値が上書きされていないバッファにおける
値です。(default-value 'abbrev-mode)
と同じです。
この節では、省略形テーブルをどのように作成し、操作するのかを説明します。
nil
です。
(abbrevname expansion hook
usecount)
形式の要素をもつリストです。戻り値は常にnil
です。
define-abbrev-table
は新しい省略形テーブルの名前をこのリストにつけ加えます。
nil
です。
もし、humanが非nil
のとき、記述は人間が読みやすい形でおこなわ
れます。それ以外のばあい、記述はLisp式となります。このLisp式は、現在定義
されているnameを正確に定義するdefine-abbrev-table
の呼び出し
式です。
以下の関数は、指定した省略形テーブルの中の省略形を定義します。
define-abbrev
が低水準な基本関数であるのに対し、add-abbrev
はユーザに情報を尋ねるコマンドによって使われます。
"global"
あるいは
"mode-specific"
)。これは、ユーザへのプロンプトに使われます。引数
argは、展開形に使用する単語数です。
戻り値は、新しい省略形を内部的に示すシンボルです。または、すでに存在する省
略形を上書きするかどうかの確認時にユーザが承諾しなかった場合には、
nil
です。
引数nameは、文字列であるべきです。引数expansionは、文字列か、あ
るいは省略形を取り消す場合は、nil
であるべきです。
引数hookは、関数またはnil
です。もし、hookが非nil
の
ときは、省略形をexpansionで置き換えたあとに、引数なしでそれが呼ば
れます。hookが呼ばれるとき、ポイントはexpansionの末尾です。
省略形の使用回数はゼロに初期化されます。
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
を返します。二つめのオプション引数
tableは、省略形を探すテーブル名です。tableがnil
のとき、この
関数は、まずカレント・バッファのローカル省略形テーブルを探し、その次にグロー
バル省略形テーブルを探します。
abbrev-symbol
の場合と同じく、使用するテーブルを指定します。
t
を返し、それ以外はnil
を返します。
expand-abbrev
の呼び出しでは、通常のようにポイント直前の単語ではな
く、この場所から(そのときの)ポイントまでを、展開するべき省略形として使用
します。
nil
のとき、すべて大文字で入力された省略形は、すべて大文字で展開さ
れます。それ以外の場合、すべて大文字で入力された省略形は、各単語の先頭の
一文字が大文字で展開されます。
expand-abbrev
のためのバッファ内位置で、次の省略形展開の始ま
りの位置に使われます。(nil
のときは、ポイントの前の単語を代わりに
使う意味になります)。 abbrev-start-location
は、expand-abbrev
が呼び出されるたびにnil
に初期化されます。この変数は、
abbrev-prefix-mark
によってもセットされます。
abbrev-start-location
がセットされたバッファです。ほ
かのバッファで省略形展開を行なうと、abbrev-start-location
はクリアさ
れます。この変数は、abbrev-prefix-mark
によってセットされます。
abbrev-symbol
です。この情報は、
unexpand-abbrev
コマンドのために、expand-abbrev
によって設定
されます。
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を入力した時nil
を ;; 返します(not
関数のため)。 ;; しかし戻り値は展開には影響ないので、これで問題ないでしょう。 (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.