Next: , Previous: , Up: Buffer Walk Through   [Contents][Index]


4.2 A Simplified beginning-of-buffer Definition

あなたが使い慣れているかもしれないし理解も容易なbeginning-of-bufferコマンドはよい出発点となるでしょう。interactiveコマンドとして使用すると、beginning-of-bufferは元の位置にマークを残して、カーソルをバッファー先頭に移動します。一般的にはM-<にバインドされているコマンドです。

このセクションではこの関数がもっともよく用いられる方法を示しつつ、この関数の簡略版について議論していきます。この簡略版は上述したような機能は有するものの、複雑なオプション用のコードは含まれていません。別のセクションでは完全版について説明するつもりです(Complete Definition of beginning-of-bufferを参照)。

コードを見る前に、この関数の定義に何が含まれる必要があるかについて考察しましょう。この関数をM-x beginning-of-bufferM-<のようなキーコードで呼び出せるようなinteractive関数にするための式が含まれいること、バッファーの元の位置にマークを残すためのコード、それにカーソルをバッファー先頭に移動するコードが含まれていなければなりません。

以下あこの関数の簡略版にたいする完全なテキストです:

(defun simplified-beginning-of-buffer ()
  "Move point to the beginning of the buffer;
leave mark at previous position."
  (interactive)
  (push-mark)
  (goto-char (point-min)))

すべての関数定義と同様に、この関数定義にはマクロdefunの後に5つのパーツがあります:

  1. 名前: この例ではsimplified-beginning-of-buffer
  2. 引数リスト: この例では空リスト()
  3. ドキュメント文字列
  4. interactive式
  5. body(本体)

この関数定義の引数リストは空です。これは関数が引数を要求しないことを意味します(この関数の完全版の定義では、オプション引数が渡されるかもしれないことが判るでしょう)。

interactive式は、これが対話的に使用されることを意図した関数であることをEmacsに伝えます。この例のsimplified-beginning-of-bufferは引数を要求しないので、interactiveにも引数はありません。

関数のbodyは2つの行から構成されています:

(push-mark)
(goto-char (point-min))

1行目は式(push-mark)です。Lispインタープリターによってこの式が評価されると、それがどこであろうとカーソルのカレント位置にマークをセットします。このマーク位置はマークリングに保存されます。

次の行は(goto-char (point-min))です。この式はカーソルをバッファーで最小のポイント、すなわちバッファーの先頭にジャンプさせます(ナローイングされている場合にはアクセス可能範囲の先頭にジャンプさせる; Narrowing and Wideningを参照)。

push-markコマンドは(goto-char (point-min))式によってカーソルがバッファー先頭に移動する前のカーソル位置にマークをセットします。これにより、あなたが望めばC-x C-xとタイプして元いた場所に戻れるようになるのです。

これがこの関数定義のすべてです!

このようにコードを読んでいる際に、たとえばgoto-charのようによく知らない関数に出会ったら、describe-functionコマンドを用いてそれが何を行うか調べることができます。このコマンドを使用するには、C-h fの後に関数の名前をタイプしてからRETを押下します。describe-functionコマンドが*Help*ウィンドウにその関数のドキュメント文字列をプリントするはずです。たとえばgoto-charのドキュメントは:

Set point to POSITION, a number or marker.
Beginning of buffer is position (point-min), end is (point-max).

この関数の引数は目的となる位置です。

(describe-functionが入力を求める際のプロンプトではカーソルの真下あるいは直前にあるシンボルが提案されるので、調べたい関数の上か直後にカーソルを配置してからC-h f RETをタイプすれば、タイプ量を節約できます。)

end-of-buffer関数の定義はbodyの(goto-char (point-min))の箇所に式(goto-char (point-max))を含むこと以外はbeginning-of-bufferの定義と同じ手法によって記述されています。

This page has generated for branch:work/add_lispintr, commit:65845cf60c073f2f3182d1d07483530e9bbe1d96 to check Japanese translation.