Next: mark-whole-buffer, Previous: Finding More, Up: Buffer Walk Through [Contents][Index]
beginning-of-buffer
Definitionあなたが使い慣れているかもしれないし理解も容易なbeginning-of-buffer
コマンドはよい出発点となるでしょう。interactiveコマンドとして使用すると、beginning-of-buffer
は元の位置にマークを残して、カーソルをバッファー先頭に移動します。一般的にはM-<にバインドされているコマンドです。
このセクションではこの関数がもっともよく用いられる方法を示しつつ、この関数の簡略版について議論していきます。この簡略版は上述したような機能は有するものの、複雑なオプション用のコードは含まれていません。別のセクションでは完全版について説明するつもりです(Complete Definition of beginning-of-buffer
を参照)。
コードを見る前に、この関数の定義に何が含まれる必要があるかについて考察しましょう。この関数をM-x beginning-of-bufferやM-<のようなキーコードで呼び出せるような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つのパーツがあります:
simplified-beginning-of-buffer
()
この関数定義の引数リストは空です。これは関数が引数を要求しないことを意味します(この関数の完全版の定義では、オプション引数が渡されるかもしれないことが判るでしょう)。
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
の定義と同じ手法によって記述されています。