4

私は本当に好きですが、何も経過していない短い遅延のkey-chord.elにキーストロークを押し始めたときにのみトリガーする必要があります。それを行うために変更するのが簡単かどうか知りたいのですが。key-chord.el

なぜそれが必要なのかは簡単で、できるだけ簡単に説明しようと思います。

  • 「強い」指(小指なし)とホームロー(タッチタイプ)にあるキーにキーコードを割り当てたいと思います。したがって、入力時に一般的な単語やコードと衝突する可能性のあるかなりの数のキーコードを作成している可能性があります。

  • 衝突が発生するたびに(つまり、キーコードがキックインしたくなかったのに)、それは私が熱狂的にバッファーを変更している最中だからだと気づきました。

ここに例があります...

私は速いタイピストなので、たとえば「保留」と入力した場合、「保留」の「e」を追加してから「l」と入力するまでに長い遅延は発生しません。したがって、この場合、「ld」と入力したときにキーコードが作動しないようにすることは「明らか」です。ただし、一時停止があり「ld」が割り当てられたキーコードであり、「ld」を押した場合、「ld」で始まるコード/テキストを記述している可能性はほとんどありません。したがって、この後者の場合(そして、キーコードに「ld」を割り当てたので)、それを開始したいと思います。

誤解しないでください。これにより、すべてのケースで発生する可能性のあるすべての衝突が排除されるとは言えません。私が言っているのは、私の場合、これはおそらく(すでにまれな)衝突の99.9%を排除するだろうということです。このキーコードへの変更後も1回の衝突が発生した場合の「失われた時間」は、キーコードが私に得させている時間と比較して無視できる程度です。

toのコードkey-chord.elは非常に小さいので、そのような追加はそれほど難しくないでしょうか?

key-chord.elそのような機能を提供するために変更するのが簡単であるかどうかについて誰かが考えを持っていますか?(私がやりたいことを正しく説明したことを願っています)

key-chord.elのコードは次のとおりで、その半分はコメントです。

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

4

2 に答える 2

5

アイドルタイマーメカニズムはこれを容易にすることができるはずです。

C-hig (elisp) Idle Timers RET

詳細はあなた(または他の誰か)にお任せします。オフハンドの考えは次のとおりです。

  • アイドルタイマーを介してキーコード機能を有効にする
  • post-command-hook再度無効にするために使用します

必要なのはそれだけかもしれませんか?

于 2012-07-12T22:42:38.627 に答える
2

ここで2つのタイミングが見られます

  • コードの前の時間(コードの前の文字とコードの間。十分に短い場合は、コードなし)
  • コード後の時間(新しい文字をすばやく入力した場合、コードなし)

2番目のタイプのタイミングは、おそらくより自然で、慣れやすいものです。コードを入力すると、実行前の短いタイムアウトを受け入れることができます。(これはあなたが求めたものではなく、「ld」の例を解決しません。しかし、単語の先頭に表示される可能性のある文字の組み合わせの問題を解決できる可能性があります。)

最初のタイプのタイミングは、おそらく慣れるのが難しいでしょう。単語の入力が完了し、次にコードを入力する場合、少し間を置くのは自然な本能ではないのではないかと思います。コードを頻繁に使用する場合、コードをすばやく入力し、認識されない場合はイライラする可能性があります(代わりに、2つの文字がテキストに挿入されます)。私が言いたいのは、和音が問題を十分に解決するまでのタイミングがわからないということです

そんなタイミングの実施も。key-chord-input-method関数のステートマシンが現在構造化されている方法では、考慮するタイマーの数に応じて指数関数的に増加します(正しく思い出せば)。つまり、少なくとも約12行の新しいコードがあります。

機能を試すには、他の回答でphilsの提案を試してください。コードを無効にするpostコマンドと、ほんの一瞬後に再び有効にするアイドルタイマーです。マイナーモードを実際に変更せずにコードを無効および有効にするための迅速で汚い方法は、input-method-function変数を設定することです。

テスト目的のみのコード。キーコードモードバージョン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)
于 2012-10-23T00:57:23.437 に答える