为什么(set-mark-command)抛出错误?

时间:2012-08-18 17:26:28

标签: emacs elisp

我将前向词定义为vim-like'w'跟随this,除了M-S-f不再选择文字外,此功能正常。
所以,我写了这个函数:

(defun forward-to-word-with-selection (arg)
  (interactive "p")
  (if (not (eq last-command 'forward-to-word-with-selection))
      (progn (message "Mark Set")
             (set-mark-command))
    (forward-to-word arg)))

(global-set-key (kbd "M-F") 'forward-to-word-with-selection)

但是,我得到了一个混乱的错误:

enter image description here

然后我一步一步地运行这个功能(使用Cc Ce,任何其他更好的调试方法都很好,因为我是elisp的新手),这个错误是由于(set-mark-command)。 / p>

2 个答案:

答案 0 :(得分:1)

set-mark-command接受包含prefix参数的原始形式的参数。这就是C-@的行为方式,具体取决于您提供的前缀参数的类型。

您可能不希望在代码中调用此函数,您可能希望使用push-mark

答案 1 :(得分:1)

您不想自己操纵标记。只需将“^”指定为交互式。我已经提交了一个修补程序的错误来修复它在Emacs中,但你可以定义自己的包装器:

(defun forward-to-word-w (arg)
  "wrapper to work with shift-select-mode"
  (interactive "^p")
  (forward-to-word arg))