Next: defun Exercises, Previous: save-excursion, Up: Writing Defuns [Contents][Index]
最後のいくつかのチャプターではマクロ、多くの関数、それにスペシャルフォームを紹介してきました。ここではそれらとともに、まだ述べていない同じような関数も併せて簡単に振り返ることにします。
eval-last-sexp
ポイントのカレント位置の前にある式を象徴するものを評価する。引数なしで呼び出された場合には値をエコーエリアにプリントする。引数ありの場合には出力はカレントバッファーにプリントされる。このコマンドは通常ならC-x C-eにバインドされている。
defun
関数を定義する。このマクロには名前、その関数に渡される引数のための雛形、ドキュメント、オプションでinteractive宣言、そして関数のbodyという5つのパーツがある。
たとえば以下はEmacsのdired-unmark-all-marks
の関数定義。
(defun dired-unmark-all-marks () "Remove all marks from all files in the Dired buffer." (interactive) (dired-unmark-all-files ?\r))
interactive
その関数が対話的(interactive)に使用できることをインタープリターに宣言する。このスペシャルフォームの後には、関数の引数情報を順に渡すための、1つ以上のパーツからなる文字列が続くかもしれない。またこれらのパーツは情報を与えるためのプロンプトをインタープリターに伝えることもできる。この文字列のパーツは改行‘\n’によって区切られる。
以下はよく使用されるコード文字:
b
既存のバッファーの名前。
f
既存のファイルの名前。
p
数値のプレフィックス引数(p
は小文字であることに注意)。
r
ポイントとマークを小さい順の数値引数として渡す。これは単一ではなく2つの連続する引数を指定する唯一のコード文字である。
コード文字の完全なリストについてはCode Characters for ‘interactive’ in The GNU Emacs Lisp Reference Manualを参照のこと。
let
変数のリストにたいして、それらがlet
のbody内で使用される変数であることを宣言するとともにnil
または指定した値を初期値として与える。その後にlet
のbody内にある残りの式を評価して、最後の式の値をリターンする。let
のbody内側では、Lispインタープリターはlet
の外側でバインドされた同じ名前の変数の値を認知しない。
たとえば
(let ((foo (buffer-name)) (bar (buffer-size))) (message "This buffer is %s and has %d characters." foo bar))
save-excursion
このスペシャルフォームのbodyを評価する前のポイント値とカレントバッファーを記録しておいて、後でそのポイント値とバッファーをリストアする。
たとえば
(message "We are %d characters into this buffer." (- (point) (save-excursion (goto-char (point-min)) (point))))
if
この関数にたいする1つ目の引数を評価してtrueなら2つ目の引数を評価する。trueでない場合には、3つ目の引数があれば評価する。
if
は条件(conditional)と呼ばれるスペシャルフォームである。Emacs
Lispには他にも条件があるが、恐らくもっとも一般的に使用されているのはif
だろう。
たとえば
(if (= 22 emacs-major-version) (message "This is version 22 Emacs") (message "This is not version 22 Emacs"))
<
>
<=
>=
関数<
は1つ目の引数が2つ目の引数より小さいかどうかをテストする。反対に>
は1つ目の引数が2つ目の引数より大きいかどうかをテストする。同様に<=
は1つ目の引数が2つ目の引数以下かどうか、>=
は1つ目の引数が2つ目の引数以上かどうかをテストする。すべての場合において、引数はいずれも数値かマーカーでなければならない(マーカーはバッファー内での位置を示す)。
=
関数=
は2つの引数(数値かマーカー)が等しいかどうかをテストする。
equal
eq
2つのオブジェクトが同一かどうかをテストする。equal
とeq
における“同一”という単語の意味は異なる。equal
は同一の本の2つのコピーのように、同じような構造および内容のオブジェクトならtrueをリターンする。一方でeq
は2つの引数が実際に同一オブジェクトならtrueをリターンする。
string<
string-lessp
string=
string-equal
関数string-lessp
は1つ目の引数が2つ目の引数より小さいかどうかをテストする。同じ関数のもっと短い別名(defalias
)はstring<
。
string-lessp
の引数は文字列かシンボルでなければならない。順序は辞書順であり大文字と小文字は区別される。シンボル自体のかわりにシンボルのプリント名が使用される。
中に何の文字も含まない空文字列‘""’は、他のどの文字列よりも小さい。
string-equal
は同一性に相当するテストを提供する。より短い別名はstring=
。>、>、<=
に相当するテスト用の関数はない。
message
エコーエリアにメッセージをプリントする。1つ目の引数は文字列で、この文字列に後続する引数の値をプリントするために‘%s’、‘%d’、‘%c’を含めることができる。‘%s’をプリントに用いる引数は文字列かシンボル、‘%d’をプリントに用いる引数は数値でなければならない。‘%c’をプリントに用いる引数はASCIIコードナンバーでなければならない。この場合には、そのASCIIコードをもつ文字がプリントされる(それ以外にもさまざまな%シーケンスが存在するがここでは省いた)。
setq
set
setq
は1つ目の引数の値に2つ目の引数の値をセットするスペシャルフォーム。1つ目の引数はsetq
によって自動的にクォートされる。後続する引数ペアーも同様。他にも引数を2つだけ受け取り、両方を評価した後に2つ目の引数がリターンした値を1つ目の引数がリターンした値にセットするset
という関数がある。
buffer-name
引数なしならそのバッファーの名前を文字列としてリターンする。
buffer-file-name
引数なしならそのバッファーがvisitしているファイルの名前をリターンする。
current-buffer
Emacsで現在アクティブなバッファーをリターンする。これはスクリーンに表示されていないバッファーかもしれない。
other-buffer
もっとも最近に選択されたバッファーをリターンする(引数としてother-buffer
に渡すバッファーとカレントバッファーを除く)。
switch-to-buffer
Emacsにおいてアクティブとするバッファーを選択して、ユーザーが見れるようにカレントウィンドウに表示する。通常はC-x bにバインドされている。
set-buffer
Emacsの注意をプログラムが実行されるバッファーに向けさせる。ウィンドウに表示されているバッファーは変更しない。
buffer-size
カレントバッファー内の文字数をリターンする。
point
カーソルのカレント位置をバッファー先頭から数えた文字数(整数)としてリターンする。
point-min
カレントバッファーで許されるポイントの最小値をリターンする。ナローイング(narrowing)が効力をもたなければ1。
point-max
カレントバッファーで許されるポイントの最大値をリターンする。ナローイング(narrowing)が効力をもたなければバッファー終端。