2011-02-07 21 views
2

私は、Emacs(23)を使用していると私は、関数にC-.キーの組み合わせを結合しています:Emacs:キーを2回タップする方法をバインドするには?

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

それはキーの迅速な「ダブルタップ」をバインドすることは可能ですか?たとえば、.をすばやく2回入力すると、関数myfunctionを呼び出したいとします。

答えて

5

何も組み込まれていませんが、このコードを使用できます。変数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)) 
+0

はあなたのTreyをありがとう、私はそれを試してみましたが、それがうまく動作します。夜間に私の問題を再考すると、私は入力メソッドをカスタマイズできれば面白いと思います。たとえば、 '' 'を書くとき、emacsは次の文字を待ってバッファの内容を変更します(' 'a 'は'á'になります)。しかし、これは、私が自分の研究をした後に、私が後で聞くかもしれない別の質問の話題です。 – YuppieNetworking

0

(defunのmyfunction2() (インタラクティブ) ()ない(EQ最後のコマンド「myfunction2(あれば) (挿入 "") (このコマンドはnil setqの) (削除、後方-char 1) (コール対話的に 'MyFunctionを)))

(関数定義のMyFunctionを() (インタラクティブ) (メッセージ "MyFunctionを"))

(グローバル・セットキー ""' myfunction2 )

2

私はKeyChordが今日この正式な解決策だと信じています。

(免責事項:私は)まだ(自分自身をKeyChord使用していないが、多くの人がやるので、私はそれが少なくとも試してみる価値がある確信しています)

関連する問題