GNU Emacs拡張ガイドを読み直す(2)

3, 4章を読みました。

  1. 3章 コマンド間の協調
  2. 4章 バッファの中を検索し、変更する

3章では関数に文脈を導入するためグローバル変数を定義します。
以下、備忘録。

  1. シンボルには"シンボル属性"というものが定義できる。これはどのようなシンボルに対しても設定でき、名前と値を付けることが出来る。すでにあるシンボル群に対して、新たに特殊な情報を割り当てることが可能。 ↓に例
;シンボル属性の定義方法
(put 'a-symbol 'som-property 17)
(get 'a-symbol 'som-property) ; => 17

4章ではバッファの状態を自動的に書き換える仕組みを作りながら、正規表現の使い方、検索、置換、バッファローカル変数の使い方等を説明しています。

  1. Emacs正規表現perl等に慣れていると若干ややこしい。その原因は大きく2つあって
    1. perlだと単独で使える"("、")"や"|"が、"\("、"\)"、"\|"と先頭に"\"を付けなければならない
    2. さらにこれをLisp式で表現する場合(.emacs内で書くときとか)は文字列で表現する必要があり、文字列内でバックスラッシュを表現するためには"\\"と表す必要があるので"\\("、"\\)"、"\\|"と書く必要がある
    3. これはEmacs Lisp正規表現を文字列て表現しているため起きる、perlrubyでは専用の正規表現構文を用意しているのでこのような問題は起きない
    4. とはいうものの、上記の話は文法表現的な問題に過ぎず基本的な正規表現の機能は一通り網羅している
    5. "\b"で単語境界マッチ, "\B" で非単語境界にマッチ
  2. 関数の引数に"&optinal"を付けるとそれ以降の引数は省略可能
  3. 関数の引数に"&rest"を付けるとそれ以降は可変長引数になる(&optionalより後にする必要あり)

理由を理解して、ちょっとEmacs正規表現に対する恐怖心が和らぎました。