Emacs:如何绑定两次敲击的键?

时间:2011-02-07 16:30:53

标签: emacs

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

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

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

4 个答案:

答案 0 :(得分:5)

内置任何内容,但您可以使用此代码。自定义变量dc-single-click-cmddc-double-click-cmd作为您想要的命令。

注意:这会引入一些延迟,b / c代码需要等待一段时间来确定事件是单击还是双击。

(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))

答案 1 :(得分:2)

我相信KeyChord是当今的典型解决方案。

(免责声明:我自己还没有使用KeyChord,但很多人都这样做,所以我确信它至少值得一试。)

答案 2 :(得分:0)

(defun myfunction2()   (互动)   (if(not(eq last-command'myfunction2))       (插入 ”。”)     (setq this-command nil)     (delete-backward-char 1)     (以交互方式调用'myfunction)))

(defun myfunction()   (互动)   (消息“MYFUNCTION”))

(global-set-key“。”'myfunction2)

答案 3 :(得分:0)

https://github.com/k-talo/double-type.el提供与您正在寻找的功能类似的功能。