Emacs:如何绑定双击按键?

3

我正在使用Emacs(23),并将C-.键组合绑定到一个函数:

(global-set-key (kbd "C-.") 'myfunction)

是否可以绑定快速“双击”键的功能?例如,当快速两次输入.时,我想调用函数myfunction

4个回答

6

虽然没有内置的功能,但您可以使用此代码。自定义变量dc-single-click-cmddc-double-click-cmd以成为您想要的命令。

注意:这会引入轻微的延迟,因为代码需要等待一小段时间来确定事件是单击还是双击。

(defvar dc-single-click-cmd 'dc-example-single-click)
(defvar dc-double-click-cmd 'dc-example-double-click)
(defvar dc-click-timer nil
  "Pending single-click event.")
(defun dc-example-single-click ()
  (interactive)
  (message "A single click just happened."))
(defun dc-example-double-click ()
  (interactive)
  (message "Wait!  I meant double click."))
(defun dc-click-cmd ()
  "Either kick off a single click, or a double click."
  (interactive)
  (if dc-click-timer
      (progn
        (cancel-timer dc-click-timer)
        (setq dc-click-timer nil)
        (call-interactively dc-double-click-cmd))
    (setq dc-click-timer (run-at-time (when double-click-time 
                                            (/ 1000.0 double-click-time))
                                      nil
                                      'dc-call-single-click))))
(defun dc-call-single-click ()
  "spawn the single click"
  (setq dc-click-timer nil)
  (call-interactively dc-single-click-cmd))

谢谢Trey,我尝试了一下,效果很好。经过一夜的重新思考,我认为如果我能自定义输入法也会很有趣:例如,当我输入 ' 时,emacs将等待下一个字符并修改缓冲区内容('a 将变成 á)。然而,这是另一个问题的主题,我可能会在自己做研究后再提出。 - YuppieNetworking

2

我认为现在使用KeyChord是解决这个问题的标准方法。

(声明:我自己暂时没有使用KeyChord,但很多人都在使用,因此我确定它值得一试。)


0

0
(defun myfunction2 () (interactive) (if (not (eq last-command 'myfunction2)) (insert ".") (setq this-command nil) (delete-backward-char 1) (call-interactively 'myfunction)))
(defun myfunction () (interactive) (message "MYFUNCTION"))
(global-set-key "." 'myfunction2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接