聽起來像key-chord
不會在這種情況下幫助,因爲<home>
不在其支持的字符範圍內。
我認爲以下應做你想要什麼,並可以很容易地用於其它支持的按鍵相同的模式:
(defvar my-double-key-timeout 0.25
"The number of seconds to wait for a second key press.")
(defun my-home()
"Move to the beginning of the current line on the first key stroke,
and to the beginning of the buffer if there is a second key stroke
within `my-double-key-timeout' seconds."
(interactive)
(let ((last-called (get this-command 'my-last-call-time)))
(if (and (eq last-command this-command)
last-called
(<= (time-to-seconds (time-since last-called))
my-double-key-timeout))
(beginning-of-buffer)
(move-beginning-of-line nil)))
(put this-command 'my-last-call-time (current-time)))
(global-set-key (kbd "<home>") 'my-home)
注意this-command
將評估爲my-home
功能運行時,因此我們在my-home
符號上設置my-last-call-time
屬性,因此整潔地避免了在上次調用該函數時需要維護用於記憶的單獨變量,這使該函數具有良好的自包含性和可重用性:可以創建另一個類似的函數,您只需更改(beginning-of-buffer)
和(move-beginning-of-line nil)
。
明顯需要注意的是都命令陸續執行,如果你觸發雙鍵行爲,所以不要使用與該會是一個問題,命令這一做法。
(相反,優勢是,我們不與定時器搞亂。)
輝煌。這正是我所期待的。 – 2014-09-01 03:41:14