2012-07-07 75 views
4

我做真的喜歡key-chord.el但我也只需要觸發,當我開始在短暫的延遲,在此期間我沒有做任何事情經過後,按下按鍵。我想知道是否很容易修改key-chord.el來做到這一點。煉油關鍵chord.el觸發

爲什麼我想要的很簡單,我會盡力解釋它一樣容易,我可以:

  • 我想keychords被分配給那些對我的「強」指鍵(無小指),並在我的家裏(我做觸摸式)。因此,當我打字時,我可能會創建不少可能與常用詞/代碼衝突的鍵。我意識到每次出現衝突(即鍵盤插入時我都不想),這是因爲我正在瘋狂地修改緩衝區。

下面是一個例子...

我是一個快速的打字員,所以如果我進入,說,「保持」,有永遠將是與時長的延遲我添加「持有」的'e',然後輸入'l'。所以在這種情況下,當我輸入'ld'時,我不希望和絃鍵入內容。但是,如果有暫停,並且如果'ld'是分配的和絃鍵,然後我打'ld',那麼它是非常不太可能我正在編寫將以'ld'開頭的代碼/文本。因此,在後一種情況下(因爲我已經指派「LD」的主和絃),我不希望它在踢

現在不要誤會我的意思:我不在說這會消除每一種情況下每一次可能的衝突。我只是說,就我而言,這可能會消除99.9%(已經很少見)的衝突。如果在這種改變之後仍然發生一次衝突,那麼鍵盤和絃與鍵盤和絃使我獲得的時間量相比可以忽略不計。

代碼key-chord.el是非常小的,所以也許這樣的加法不會太難?

有沒有人有一個想法,如果它很容易修改key-chord.el提供這樣的功能? (我希望我正確解釋什麼,我想要做的)

下面的代碼到關鍵chord.el和它的一半是評論:

http://emacswiki.org/emacs/key-chord.el

+0

請注意,我想至少嘗試一下,看看這個想法是否有意義.. 。 – 2012-07-07 17:56:25

回答

5

空閒計時器機制應該能夠方便這個。

C-H我克(elisp) Idle TimersRET

我要把它留給你(或其他人)要弄清楚的細節。副手的想法是:

  • 通過空閒計時器
  • 使用post-command-hook啓用關鍵功能和絃再次禁用它

可能是所有需要的?

2

我看到在這裏打球

  • 兩個時間定時和絃之前(弦和絃前面的字母之間。如果足夠短,無弦)弦後
  • 時間(如果新的信快速打字,無弦)

第二類時機可能更自然,而且容易就習慣了。如果有人輸入和絃,則可以接受執行前的短暫超時。 (這不是你要求的,也不會解決「ld」的例子,但它可能潛在地解決字母組合中可能出現在字首的問題)。

第一種類型的定時是可能很難習慣。當一個人完成了一個單詞的輸入並且接下來要輸入一個和絃時,我懷疑做一個短暫的停頓並不是一個自然的本能。如果經常使用和絃,人們可能會很快輸入它,如果它不被識別(並且兩個字符被插入到文本中),會變得惱人。我想說的是,我不確定和絃之前的時間能夠將問題解決到令人滿意的程度

至於執行這樣一個時機。鍵和絃輸入法函數中的狀態機目前的結構方式,它會隨着要考慮的定時器數量(如果我正確記得的話)呈指數增長。即至少會有大約十幾行新代碼。

要試驗功能,請嘗試phils在另一個答案中的建議:禁用和絃的post命令以及在幾分之一秒後再次啓用它們的空閒計時器。禁用和啓用和絃的快速和骯髒的方法,實際上不會改變次要模式,而是設置輸入方法函數變量。

僅供測試用途代碼。它假設,但不檢查,鍵盤和絃模式版本0.5加載和啓用:

;; Helper functions to be used in timers and hooks 
(defun my-enable-chords() (setq input-method-function 'key-chord-input-method)) 
(defun my-disable-chords() (setq input-method-function nil)) 

;; Start test 
(add-hook 'post-command-hook 'my-disable-chords) 
(setq my-timer (run-with-idle-timer 0.3 'repeat 'my-enable-chords)) 

;; Finish test 
(remove-hook 'post-command-hook 'my-disable-chords) 
(cancel-timer my-timer)