ここ数章で、マクロやかなりの数の関数、特殊形式を紹介してきました。ここでは、それらについて簡潔に説明するとともに、まだ触れていない類似の関数をいくつか併せて紹介します。
eval-last-sexp現在のポイント位置より前にある最後の記号式を評価します。関数が引数付きで呼び出されない限り、値はエコー領域に出力されます。引数付きで呼び出された場合は、出力は現在のバッファに記録されます。このコマンドは通常 C-x C-e にバインドされています。
defun関数を定義します。このマクロは、名前、関数に渡される引数のテンプレート、ドキュメント、任意の対話型宣言、および定義本体の最大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関数を対話的に使用できることをインタプリタに宣言します。この特殊形式の後には、関数の引数に情報を順次渡す1つ以上の部分からなる文字列を続けることができます。これらの部分は、インタプリタに情報の入力を促すよう指示することも可能です。文字列の各部分は改行(‘\n’)で区切られます。
一般的なコード文字は以下の通りです:
b既存のバッファの名前。
f既存ファイルの名前。
p数値プレフィックス引数。(なお、この p は小文字であることに注意してください。)
r点と印を2つの数値引数として、小さい方を先に指定します。これは、1つではなく2つの連続する引数を指定する唯一のコード文字です。
コード文字の完全な一覧については、The GNU Emacs Lisp Reference ManualのCode Characters for ‘interactive’を参照してください。
let変数のリストがletの本体内で使用されることを宣言し、それらにnilまたは指定された値のいずれかを初期値として与えます。次に、letの本体内にある残りの式を評価し、最後の式の値を返します。letの本体内では、Lispインタプリタはletの外で束縛されている同名変数の値を認識しません。
例えば、
(let ((foo (buffer-name))
(bar (buffer-size)))
(message
"This buffer is %s and has %d characters."
foo bar))
save-excursionこの特殊フォームの本体を評価する前に、point とカレントバッファの値を記録します。評価後は、point とバッファの値を復元します。
例えば、
(message "We are %d characters into this buffer."
(- (point)
(save-excursion
(goto-char (point-min)) (point))))
if関数の第1引数を評価し、それが真であれば第2引数を、そうでなければ(もしあれば)第3引数を評価する。
if という特殊形式は、条件式と呼ばれます。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つの引数が等しいかどうかを判定します。
equaleq2つのオブジェクトが同一かどうかを判定します。equalは「同一」という言葉の一方の意味を用い、eqはもう一方の意味を用います。equalは、同じ本の2冊のように、2つのオブジェクトが類似した構造と内容を持つ場合にtrueを返します。一方、eqは、両方の引数が実際に同一のオブジェクトである場合にtrueを返します。
string<string-lesspstring=string-equalstring-lessp
関数は、第1引数が第2引数より小さいかどうかを判定します。同じ関数のより短い別名(defalias)は string< です。
string-lessp
の引数は文字列またはシンボルである必要があります。順序は辞書順であるため、大文字と小文字は区別されます。シンボル自体ではなく、その名称が出力されます。
空文字列 ‘""’(文字を含まない文字列)は、いかなる文字文字列よりも小さい。
string-equal は等価性を判定する対応するテスト関数を提供します。より短い別名は
string= です。最近のバージョンの Emacs では、string> を短縮形とする string-greaterp が追加されました。>=
や <= に対応する文字列テスト関数は存在しません。
messageエコー領域にメッセージを出力します。第1引数は、文字列に続く引数の値を出力するために ‘%s’、‘%d’、または ‘%c’ を含むことができる文字列です。‘%s’ で使用される引数は文字列またはシンボルである必要があり、‘%d’ で使用される引数は数値である必要があります。‘%c’ で使用される引数は ASCII コード番号である必要があり、その ASCII コードに対応する文字として出力されます。(その他の各種 %-シーケンスについては言及していません。)
setqsetsetq 特殊形式は、第1引数の値を第2引数の値に設定します。第1引数は setq によって自動的にクォートされます。後続の引数ペアについても同様の処理が行われます。
buffer-name引数がない場合は、バッファ名を文字列として返します。
buffer-file-name引数がない場合は、バッファが参照しているファイル名を返します。
current-bufferEmacsがアクティブなバッファを返します。画面上に表示されているバッファとは限りません。
other-buffer直近で選択されたバッファ(other-buffer
に引数として渡されたバッファおよび現在のバッファを除く)を返します。
switch-to-bufferEmacsでアクティブにするバッファを選択し、ユーザーが確認できるよう現在のウィンドウに表示します。通常は C-x b にバインドされています。
set-bufferEmacsのフォーカスを、プログラムが実行されるバッファに移動してください。ウィンドウの表示内容は変更しないでください。
buffer-size現在のバッファ内の文字数を返します。
pointバッファの先頭からの文字数を整数で表した、カーソルの現在位置の値を返します。
point-min現在のバッファ内のポイントの最小許容値を返します。ナローイングが適用されていない限り、この値は1となります。
point-max現在のバッファにおける点の許容最大値を返します。ナローイングが有効でない限り、ここがバッファの終端となります。