1

如果没有选择区域,我编写了一个 elisp 函数来复制当前行,但它在 emacs 24.5 上不起作用。当我点击“Mw”键击时,迷你缓冲区中会出现一条消息“Mark set”。我错过了什么?

(defun copy-region-or-current-line (beg end)
  "copy current if no region selected, copy the region otherwise"
  (interactive "r")
  (let ((cur-pos (point)))
    (if (region-active-p)
        (kill-ring-save beg end)
      (progn
        (kill-whole-line)
        (yank)
        (goto-char cur-pos)))))
(global-set-key (kbd "M-w") 'copy-region-or-current-line)
4

1 回答 1

0

您的功能有效:您正在调用yank并且该命令设置了标记;因此消息。

不过,这无疑是您不想要的副作用,而且 kill+yank 序列不是必需的。

你已经知道了kill-ring-save,所以只需将它与(line-beginning-position)and一起使用(line-end-position)

仅供参考,由于 REGION 的可选参数kill-ring-save,您可以将其重写为:

(defun copy-region-or-current-line ()
  "Copy the active region or the current line to the kill ring."
  (interactive)
  (if (region-active-p)
      (kill-ring-save nil nil t)
    (kill-ring-save (line-beginning-position) (line-end-position))))
于 2017-03-09T11:49:43.973 回答