GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/eintr/Review.html ・ emacs-doc.conao3.com

3.11 レビュー

ここ数章で、マクロやかなりの数の関数、特殊形式を紹介してきました。ここでは、それらについて簡潔に説明するとともに、まだ触れていない類似の関数をいくつか併せて紹介します。

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つの引数が等しいかどうかを判定します。

equal
eq

2つのオブジェクトが同一かどうかを判定します。equalは「同一」という言葉の一方の意味を用い、eqはもう一方の意味を用います。equalは、同じ本の2冊のように、2つのオブジェクトが類似した構造と内容を持つ場合にtrueを返します。一方、eqは、両方の引数が実際に同一のオブジェクトである場合にtrueを返します。

string<
string-lessp
string=
string-equal

string-lessp 関数は、第1引数が第2引数より小さいかどうかを判定します。同じ関数のより短い別名(defalias)は string< です。

string-lessp の引数は文字列またはシンボルである必要があります。順序は辞書順であるため、大文字と小文字は区別されます。シンボル自体ではなく、その名称が出力されます。

空文字列 ‘""’(文字を含まない文字列)は、いかなる文字文字列よりも小さい。

string-equal は等価性を判定する対応するテスト関数を提供します。より短い別名は string= です。最近のバージョンの Emacs では、string> を短縮形とする string-greaterp が追加されました。>= や <= に対応する文字列テスト関数は存在しません。

message

エコー領域にメッセージを出力します。第1引数は、文字列に続く引数の値を出力するために ‘%s’、‘%d’、または ‘%c’ を含むことができる文字列です。‘%s’ で使用される引数は文字列またはシンボルである必要があり、‘%d’ で使用される引数は数値である必要があります。‘%c’ で使用される引数は ASCII コード番号である必要があり、その ASCII コードに対応する文字として出力されます。(その他の各種 %-シーケンスについては言及していません。)

setq
set

setq 特殊形式は、第1引数の値を第2引数の値に設定します。第1引数は setq によって自動的にクォートされます。後続の引数ペアについても同様の処理が行われます。

buffer-name

引数がない場合は、バッファ名を文字列として返します。

buffer-file-name

引数がない場合は、バッファが参照しているファイル名を返します。

current-buffer

Emacsがアクティブなバッファを返します。画面上に表示されているバッファとは限りません。

other-buffer

直近で選択されたバッファ(other-buffer に引数として渡されたバッファおよび現在のバッファを除く)を返します。

switch-to-buffer

Emacsでアクティブにするバッファを選択し、ユーザーが確認できるよう現在のウィンドウに表示します。通常は C-x b にバインドされています。

set-buffer

Emacsのフォーカスを、プログラムが実行されるバッファに移動してください。ウィンドウの表示内容は変更しないでください。

buffer-size

現在のバッファ内の文字数を返します。

point

バッファの先頭からの文字数を整数で表した、カーソルの現在位置の値を返します。

point-min

現在のバッファ内のポイントの最小許容値を返します。ナローイングが適用されていない限り、この値は1となります。

point-max

現在のバッファにおける点の許容最大値を返します。ナローイングが有効でない限り、ここがバッファの終端となります。