2

我正在尝试编写用于行重复的函数。我必须保持光标位置。这是 .emacs 文件中的代码:

(defun line-duplicate
  "line duplication."
  (setq position (point))       ;Store the original position of cursor               
  (global-set-key "\C-d" "\C-a\C-k\C-k\C-y\C-y")
  (goto-char position)            ;move the cursor to original position
)

(line-duplicate)

但是,出现了一些错误。错误是什么?

编辑

刚刚发现了命令执行功能:

(defun line-duplicate ()
  (interactive)
  (setq position (point))
  (command-execute (kbd "C-a C-k C-k C-y C-y"))
  (goto-char position)
)

(global-set-key (kbd "C-d") 'line-duplicate)

这奏效了。

4

2 回答 2

1

global-set-key接受两个参数,KEY并且COMMAND. COMMAND不是键序列,它是一个函数(通常它是一个命名交互式可调用函数的符号,文档说)。您可能不想更改C-d调用函数时的行为,而是希望将函数绑定到键。

于 2012-09-28T17:37:29.247 回答
1

我猜你想将重复行绑定到C-d.

您可以编写以下函数:

(defun my:dublicate-line ()
  (interactive)
  (save-excursion
  (let ((begin (line-beginning-position)) (end (line-end-position)))
    (move-beginning-of-line 2)
    (insert (concat  (buffer-substring-no-properties begin end) "\n")))))

(global-set-key (kbd "C-d") 'my:dublicate-line)
于 2012-09-28T17:44:47.053 回答