以编程方式选择区域

vem*_*emv 12 emacs elisp

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

找不到合适的功能(如果它们只是逻辑上分组在命名空间中或以某种方式标记...).哪一个?

ata*_*lor 17

您可以使用键盘将击键翻译为elisp .C-h k key

您会注意到用于设置标记的elisp函数set-mark-command,接受一个非可选参数.Emacs使用特殊interactive函数允许elisp函数自然地用参数写入.这允许它们是通用的并且易于在其他elisp程序中重用,同时仍然可以直接从击键调用.它还C-u内置了一些前缀逻辑.

set-mark-command第一个函数的情况下(interactive "P"),这意味着当从键盘调用时,前缀作为参数传入.你可以直接用elisp模拟这个:

(set-mark-command nil)
Run Code Online (Sandbox Code Playgroud)

例如,要选择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))
Run Code Online (Sandbox Code Playgroud)

请注意,您必须告诉emacs在最后使标记保持活动状态,否则该区域将不会保持突出显示(尽管点和标记将位于您离开它们的位置).