32.3 创建标记的函数

创建新标记时,可以让它不指向任何位置,或指向当前光标位置,或指向缓冲区可访问区域的开头或结尾,或指向与另一个给定标记相同的位置。

下面四个函数返回的标记其插入类型均为 nil。See 标记插入类型

Function: make-marker

此函数返回一个新创建的、不指向任何位置的标记。

(make-marker)
     ⇒ #<marker in no buffer>
Function: point-marker

此函数返回一个新标记,指向当前缓冲区中光标的当前位置。See 光标位置。示例见下文 copy-marker

Function: point-min-marker

此函数返回一个新标记,指向缓冲区可访问区域的开头。除非启用范围限制,否则即为缓冲区开头。See 范围限制

Function: point-max-marker

此函数返回一个新标记,指向缓冲区可访问区域的结尾。除非启用范围限制,否则即为缓冲区结尾。See 范围限制

以下是此函数与 point-min-marker 的示例,在包含本章文本源文件的缓冲区中演示。

(point-min-marker)
     ⇒ #<marker at 1 in markers.texi>
(point-max-marker)
     ⇒ #<marker at 24080 in markers.texi>

(narrow-to-region 100 200)
     ⇒ nil
(point-min-marker)
     ⇒ #<marker at 100 in markers.texi>
(point-max-marker)
     ⇒ #<marker at 200 in markers.texi>
Function: copy-marker &optional marker-or-integer insertion-type

如果参数为标记,copy-marker 返回一个新标记,指向与 marker-or-integer 相同的位置与缓冲区。如果参数为整数,copy-marker 返回一个新标记,指向当前缓冲区中 marker-or-integer 位置。

新标记的插入类型由参数 insertion-type 指定。See 标记插入类型

(copy-marker 0)
     ⇒ #<marker at 1 in markers.texi>

(copy-marker 90000)
     ⇒ #<marker at 24080 in markers.texi>

如果 marker 既非标记也非整数,则会报错。

两个不同的标记如果位置与缓冲区相同,或都不指向任何位置,则视为 equal(即使不是 eq)。

(setq p (point-marker))
     ⇒ #<marker at 2139 in markers.texi>

(setq q (copy-marker p))
     ⇒ #<marker at 2139 in markers.texi>

(eq p q)
     ⇒ nil

(equal p q)
     ⇒ t