我想通过点击C-Space
+ 移动箭头键执行相同的操作,但在 elisp 中。
未能找到正确的函数(如果它们只是按逻辑分组在命名空间中或以某种方式标记......)。哪一个?
您可以使用 将击键转换为 elisp 。C-h k key
您会注意到用于设置 mark 的 elisp 函数set-mark-command
采用一个非可选参数。Emacs 使用特殊interactive
函数允许使用参数自然地编写 elisp 函数。这允许它们是通用的并且易于在其他 elisp 程序中重用,同时仍然可以直接从按键调用。它还C-u内置了一些前缀逻辑。
在 的情况下set-mark-command
,它的第一个函数是(interactive "P")
,这意味着从键盘调用时前缀作为参数传入。你可以直接在 elisp 中模拟这个:
(set-mark-command nil)
例如,在 elisp 中选择当前行:
(defun my-select-current-line ()
(interactive)
(move-beginning-of-line nil)
(set-mark-command nil)
(move-end-of-line nil)
(setq deactivate-mark nil))
请注意,您必须告诉 emacs 在最后保持标记处于活动状态,否则该区域将不会保持突出显示(尽管点和标记将是您离开它们的位置)。
您应该在 emacs lisp 代码中使用 push-mark,如下所示:
(defun mark-n (n)
"Programmtically mark the next N lines"
(interactive "nNum lines to mark: ")
(push-mark)
(next-line n))
以防万一此附加信息对其他人有用,我发现以下内容:
(point)
并(mark)
检索它们各自的位置,(set-mark (+ 5 (mark)))
例如,可以这样做。该区域是 和 之间的缓冲区的point
一部分mark
。