Elisp:在“鼠标设定点”上的简单包装改变了一种行为

时间:2014-09-07 17:02:17

标签: emacs elisp usability

«mouse-set-point»是一个在Emacs中调用的函数,在单词上用“鼠标双击”来设置它周围的区域并激活。我在它上面创建了一个简单的包装器,而不是默认的包装器,如下所示:

(defun mouse-set-point-highlight-occurs (EVENT)
  (interactive "e")
  (mouse-set-point EVENT))

(global-set-key (kbd "<double-mouse-1>") 'mouse-set-point-highlight-occurs)

正如您所看到的那样,除了简单的参数转移之外什么都不做,所以不应该改变行为。但现在双击该区域只会出现片刻,然后消失。它可能有什么问题?

1 个答案:

答案 0 :(得分:2)

简短回答:您要拨打mouse-set-region而不是mouse-set-point

答案越长:您所看到的部分内容就是鼠标区域选择代码工作方式的长期错误。如果您查看mouse-drag-track的代码(这是mouse-drag-region绑定到down-mouse-1的主力),您会看到此函数是实现mouse-set-point的函数在double-mouse-1的情况下行为(即它检查绑定是否为mouse-set-point,如果是,则它运行自己的代码而不是mouse-set-point。 / p>

在Emacs的主干中(即不会将其作为24.4发布,而是下一个),此代码已被修改为工作&#34;更常见的是&#34;。但是即使在Emacs的主干中,你的代码也不会正常工作:你需要另外将一个非零的第二个参数传递给mouse-set-point,以表明你没有&#39} ; t只是想设置点,但要实际设置区域。