beginning-of-buffer
定义beginning-of-buffer
命令是一个很好的起点函数,因为你可能熟悉它,并且它易于理解。作为交互式命令使用时,beginning-of-buffer
将光标移动到缓冲区的开头,同时在先前的位置留下标记。通常绑定到 M-<。
在这一节中,我们将讨论该函数的一个简化版本,展示它最常用的形式。这个简化的函数按原样工作,但不包含复杂选项的代码。在另一节中,我们将描述整个函数。(See beginning-of-buffer
的完整定义.)
在查看代码之前,让我们考虑函数定义必须包含的内容:必须包括一个使函数可交互的表达式,以便通过键入 M-x beginning-of-buffer 或键入键序(如 M-<)来调用它;必须包括代码以在缓冲区中原始位置留下一个标记;必须包括将光标移动到缓冲区开头的代码。
以下是该函数简化版本的完整文本:
(defun simplified-beginning-of-buffer () "将光标移动到缓冲区开头;在先前位置留下标记。" (interactive) (push-mark) (goto-char (point-min)))
与所有函数定义一样,此定义在宏 defun
之后有五个部分:
simplified-beginning-of-buffer
。
()
。
在此函数定义中,参数列表为空,这意味着此函数不需要任何参数。 (当我们查看完整函数定义时,我们将看到它可以传递一个可选参数。)
交互式表达式告诉Emacs该函数旨在以交互方式使用。在这个例子中,interactive
没有参数,因为 simplified-beginning-of-buffer
不需要参数。
函数的主体包括两行:
(push-mark) (goto-char (point-min))
这些行中的第一行是表达式 (push-mark)
。当Lisp解释器评估此表达式时,它在光标当前位置设置一个标记,无论光标在哪里。该标记的位置保存在标记环中。
接下来的一行是 (goto-char (point-min))
。此表达式将光标跳到缓冲区的最小点,即缓冲区的开头(如果缩小了,则是缓冲区的可访问部分的开头。See 缩小和扩大.)
push-mark
命令在光标被 (goto-char (point-min))
表达式移动到缓冲区开头之前的位置设置一个标记。因此,如果愿意,可以通过键入 C-x C-x 返回到最初的位置。
这就是整个函数定义的全部内容!
当阅读这样的代码并遇到不熟悉的函数时,比如 goto-char
,可以使用 describe-function
命令了解它的作用。要使用此命令,输入 C-h f,然后输入函数的名称并按 RET。describe-function
命令将在 *Help* 窗口中打印函数的文档字符串。例如,goto-char
的文档如下:
将点设置为 POSITION,一个数字或标记。 缓冲区的开头是位置 (point-min),结束是 (point-max)。
函数的一个参数是所需的位置。
(对于 describe-function
的提示将提供光标下或之前的符号,因此您可以通过将光标直接定位到函数上方或之后,然后键入 C-h f RET 以节省输入。)
end-of-buffer
函数定义与 beginning-of-buffer
定义的方式相同,只是函数的主体包含 (goto-char (point-max))
表达式,而不是 (goto-char (point-min))
。