各バッファにおける特別なマーカーをマークと呼びます。このマーカーはユーザーが用 いるためのもので、 Lisp プログラムは(通常)これを変更すべきではありません。 Lisp プログラムは (利用者が用いうる) 値をマークに設定することのみ行なうべきで す。例えば、replace-regexp コマンドは (置き換えを行なう前の)ポイントの値をマー クに設定します。このコマンドの終了後、ユーザーは exchange-point-and-mark コマ ンドを用いることでこのコマンドの起動場所に戻ることができます。
Lisp 関数は `r' コードを付けた interactive 指示を用いることで、マークとポイン ト間のリージョンをアクセスすることができます。
各バッファは、他のバッファのマークの値とは独立した(そのバッファ用の)マークの値 を持っています。マークは設定されなくてもかまいません。バッファが作られるとそれ に対するマークが存在することになりますが、これは(訳注:まだ)どこも指していませ ん。
マークに加え、(マークの前の値である)マーカーのリストであるマークリングが存在し ます。エディティングコマンドがマークを変更すると、通常そのマークの前の値はこの マークリングにセーブされます。マークリングは最大 mark-ring-max のエントリーを 持します; この範囲を越えると、エントリーは最初に入れたものを最初に出す(訳注: first-in-first-out) という形で捨てられます。
Function: mark
この関数は、カレントバッファのマークのポジションを integer として返しま す。このバッファに(まだ)マークが設定されてない場合、 nil を返します。
Function: mark-marker
この関数は、カレントバッファのマークを返します。バッファのマークはマーカー で、マーカーに対する規則(の全て)に従います。この関数はマークのコピーを返す のではなく、そのマーク自身を返します。このマーカーを変更すると、exchange- point-and-mark のようなマークコマンドに(直接)影響が及びます。
結果は変に思われるかもしれませんが、マーカーのバッファを変更するのは(全く) 整合的です。
(setq m (mark-marker)) => #<marker at 3420 in markers.texinfo> (set-marker m 100) => #<marker at 100 in markers.texinfo> (mark-marker)
=> #<marker at 100 in markers.texinfo>
Command: set-mark-command jump
jump が nil の場合、このコマンドはマークにポイントの値を設定し、マークの (前の)値をマークリングにプッシュ(訳注:push) します。同時に、メッセージ "Mark set" をエコーアリアに表示します。
jump が non-nil の場合、ポイントをカレントなマークに動かし、マークの新しい 値をマークリングからポップ(訳注:pop) します。このため、アーギュメントを 持ってこれを繰り返し呼ぶと、前のマークにジャンプしていくことになります。
この関数は、インタラクティブに用いるよう意図されています。
Function: set-mark position
この関数は、 position にマークを設定します。マークの古い値は、マークリング にプッシュされません。
この関数は用いないで下さい! ユーザーにマークが動くのを見せ、前のマークの ポジションが失なわれてもかまわない場合以外は、この関数は使ってはいけませ ん。
(通常)新しいマークを設定する場合、古い方をマークリングに置くべきです。これ が、(ほとんどの)アプリケーションにおいて、set-mark ではなく push-mark と pop-mark とを用いなくてはいけない理由です。
Emacs Lisp プログラムの初心者は、(しばしば)マークを誤まった目的に用いよう とします。マークはユーザーの使いやすさのため位置をセーブするためのもので す。ほとんどのエディティングコマンドはマークを変更すべきではありません。 Lisp プログラムの内部で位置を覚えるためには、 Lisp 変数にストアすべきで す。例:
(let ((beg (point))) (forward-line 1)
(delete-region beg (point)))
Function: exchange-point-and-mark
この関数はポイントとマークのポジションを交換します。これはインタラクティブ に用いることを意図したものです。
Variable: mark-ring
このバッファローカル変数の値は、カレントバッファで以前にセーブされたマーク のリストです。このリストは最も最近セーブされたものを頭に持ちます。
mark-ring => (#<marker at 22272 in buffers.texinfo> #<marker at 22142 in buffers.texinfo>)
User Option: mark-ring-max
このグローバル変数の値は、マークリング(mark-ring) の大きさの最大値です。こ れより多くのマークをマークリング(mark-ring) にプッシュした場合、マークは後 ろから捨てられます。
Function: push-mark &optional position nomsg
この関数は、カレントバッファのマークを position に設定し、前のマークのコ ピーを mark-ring にプッシュします。 position が nil の場合、ポイントを用い ます。
nomsg が nil の場合、'Mark set' メッセージを表示します。
Function: pop-mark
この関数は、mark-ring の先頭の要素をポップし、バッファの実際の(訳注: actual)マークにします。バッファのポイントは変更しません。マークリング
(mark-ring) が empty の場合、何もしません。