2

私は本当に大好きkey-chord.elです。それは私のワークフローの不可欠な部分になりましたが、ミニバッファーにそれらを入れたいと思うことがあります (悪の検索などのために)。jj具体的には、終了しevil-searchて行を下に移動したいと思います。これは可能ですか?

プレフィックスとコマンドの両方として機能するコマンドをハックできることを知っているので (この SO の質問jを参照)、自己挿入コマンドとjj特別なコマンドにバインドできます。指定されたアイドル時間の後にイベント ループを中断するにはどうすればよいですか? jjブルームーンに一度はタイプしますが、それでもタイムアウトの柔軟性が欲しいです。

私が望んでいることを達成するために私が知らない他の方法はありますか?

編集:

もともと、この質問は一般的なミニバッファーに関するものでした。key-chord.elでうまくいくようminibuffer-local-mapです。ただし、 では機能しませんisearch-mode-mapjisearch で機能するように、コマンドを単一の通常のキーにバインドします。これが私が解決しようとしているものです。

4

2 に答える 2

3

key-chord.el の動作を手動で再現するソリューションを見つけました。

(defun isearch-exit-chord-worker (&optional arg)
  (interactive "p")
  (execute-kbd-macro (kbd "<backspace> <return>")))

(defun isearch-exit-chord (arg)
  (interactive "p")
  (isearch-printing-char)
  (unless (fboundp 'smartrep-read-event-loop)
    (require 'smartrep))
  (run-at-time 0.3 nil 'keyboard-quit)
  (condition-case e
    (smartrep-read-event-loop
      '(("j" . isearch-exit-chord-worker)
         ("k" . isearch-exit-chord-worker)))
    (quit nil)))

;; example bindings
(define-key isearch-mode-map "j" 'isearch-exit-chord)
(define-key isearch-mode-map "k" 'isearch-exit-chord)

このアプローチには、実際には よりもいくつかの利点がありkey-chord.elます。

  • 入力方法を使用しないので、これと組み合わせて別の入力方法を使用できます。
  • 最初の文字はすぐに表示され、間違っている場合は撤回されkey-chord.elますが、遅延後にのみ表示されます。
于 2014-01-05T23:20:27.210 に答える
2

私はこれが便利であることがわかりました:

(defun isearch-enable-key-chord ()
  (key-chord-mode 1)
  (key-chord-define isearch-mode-map "jj" 'isearch-cancel))
(add-hook 'isearch-mode-hook 'isearch-enable-key-chord)
于 2015-04-17T14:16:33.647 に答える