書き途中です。
Emacs Lispでバッファに対して操作を行う場合、Emacs Lispに用意されている様々な関数を使うことになる。
バッファを操作するときに重要なのがポイントという概念があり、いわゆるカーソル位置のことである半角文字や全角文字を区別する必要はない現在のバッファでポイントがどこかを調べるにはpoint関数を使います。
(point)
引数はなしで、返り値として自然数を返す。ポイントがバッファの先頭にあるとき、ポイントは1です。
ポイントを移動するためにgoto-charやforward-lineといった関数が用意されています。
goto-charは指定したポイント位置へポイントを移動します。次の例はそれぞれ、ポイントをバッファの先頭に移動する例と、ポイント位置を現在の位置のひとつ右へ移動する例です。
(goto-char 1)
(goto-char (+ (point) 1))
goto-charは移動後のポイントを返す。詳しくはこちらを参照:文字単位の移動
forward-lineは次の行の先頭にポイントを移動する。
バッファ中の文字を得る方法
Emacs Lispのコードを書いていると、ポイント位置などを操作することによってある情報を得たいが操作後にそれら変更を元に戻したいことがよくある。例えばインデント幅を決めるときの処理などがそれにあたる。そういうときにsave-excursionマクロが便利である。
save-excursionで括られた処理の前後ではバッファ中の文字列やポイント位置などが一致することが保証される。つまり、バッファに対してどんな操作をしても元に戻る。
save-excursionは以下のようにして使う。
(save-excursion ... ...)