13

我想通过点击C-Space+ 移动箭头键执行相同的操作,但在 elisp 中。

未能找到正确的函数(如果它们只是按逻辑分组在命名空间中或以某种方式标记......)。哪一个?

4

4 回答 4

18

您可以使用 将击键转换为 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 在最后保持标记处于活动状态,否则该区域将不会保持突出显示(尽管点和标记将是您离开它们的位置)。

于 2012-07-27T14:55:32.557 回答
4

您应该在 emacs lisp 代码中使用 push-mark,如下所示:

(defun mark-n (n)
  "Programmtically mark the next N lines"   
  (interactive "nNum lines to mark: ")
  (push-mark)  
  (next-line n))
于 2012-07-27T15:34:56.600 回答
4

以防万一此附加信息对其他人有用,我发现以下内容:

  • 至于程序化移动,请参阅移动点
  • (point)(mark)检索它们各自的位置,(set-mark (+ 5 (mark)))例如,可以这样做。
于 2012-07-27T20:26:07.457 回答
1

该区域是 和 之间的缓冲区的point一部分mark

于 2012-07-27T14:50:34.307 回答