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

4.3.1 mark-whole-buffer の本文

mark-whole-buffer 関数の本体は、3行のコードで構成されています。

(push-mark (point))
(push-mark (point-max) nil t)
(goto-char (point-min))

これらの行の1行目は、(push-mark (point))という式です。

この行は、simplified-beginning-of-buffer 関数の本体の1行目((push-mark) と記述されている)とまったく同じ役割を果たします。いずれの場合も、Lispインタプリタはカーソルの現在位置にマークを設定します。

なぜ mark-whole-buffer の式が (push-mark (point)) と記述され、beginning-of-buffer の式が (push-mark) と記述されているのかは分かりません。おそらく、コードを書いた人が push-mark の引数が省略可能であることや、push-mark に引数が渡されない場合、関数がデフォルトで point の位置にマークを設定することを知らなかったのでしょう。あるいは、次の行の構造に合わせて式が記述されたのかもしれません。いずれにせよ、この行によって Emacs は point の位置を判定し、そこにマークを設定します。

GNU Emacsの旧バージョンでは、mark-whole-buffer の次の行は (push-mark (point-max)) でした。この式は、バッファ内で最大の数値を持つポイントにマークを設定します。これはバッファの末尾(あるいは、バッファが狭められている場合は、アクセス可能な部分の末尾)となります。狭め方についての詳細は、狭めと広げ を参照してください。このマークが設定されると、ポイントに設定されていた直前のマークは設定されなくなりますが、他の最近のマークが常に記憶されるのと同様に、Emacsはその位置を記憶します。つまり、必要に応じて C-u C-SPC を2回入力することで、その位置に戻ることができます。

GNU Emacs 22では、(point-max)はわずかに複雑になっています。その行は次のようになっています。

(push-mark (point-max) nil t)

この式は以前とほぼ同様に動作します。バッファ内で可能な限り高い番号の位置にマークを設定します。ただし、このバージョンでは push-mark に2つの追加引数があります。push-mark の第2引数は nil です。これにより、マークをプッシュする際に「Mark set」というメッセージを表示すべきであることが関数に伝えられます。第3引数は t です。これにより、一時マークモードが有効なときにマークを有効化するよう push-mark に指示します。一時マークモードは、現在アクティブな領域をハイライトします。このモードは通常オフになっています。

最後に、関数の最終行は (goto-char (point-min))) です。これは beginning-of-buffer と全く同じ書き方になっています。この式は、カーソルをバッファ内の最小点、すなわちバッファの先頭(またはバッファのアクセス可能な部分の先頭)に移動させます。その結果、point はバッファの先頭に、mark はバッファの末尾に設定されます。したがって、バッファ全体がリージョンとなります。