f
コンテキスト: 2 回すばやく押すと(
、その時点で を押すとどうなるかというマイナー モードを作成したいと考えています。これは単に(
. たとえば、paredit モードまたは autopair モードが有効になっているバッファーでは、(
通常、 を押すと が挿入され()
ます。paredit モードのバッファーでは、選択したテキストがラップされることがあります。たとえば、選択a b
して を押す(
と、選択が に置き換えられ(a b)
ます。
2 回押されたことを検出するには、 http://www.emacswiki.org/emacs/electric-dot-and-dash.elf
の短いコードのロジックを使用するだけです。
(
したがって、唯一欠けている部分は、Emacs に「今すぐトリガーを押してください!」と伝える Lisp コード スニペットです。
私の頭に浮かんだ最初のことは、スニペットがすべきことでした
- キーにバインドされたコマンドを見つける
(
- 次に、そのコマンドで call-interactively を呼び出します。
ただし、自動ペアリング パッケージ (autopair または paredit または他の同様のパッケージ)(
が、コマンドの呼び出しに使用されたキーを検索するロジックを持つコマンドにバインドされている場合、またはパッケージが単に post-self-insert に依存している場合、これは機能しません。 binding の代わりに -hook または post-command-hook (
。
アップデート
Key Chordのドキュメントを調べたところ、この質問への回答で私がやろうとしていることには、より簡単な解決策があることがわかりました:
(require 'key-chord)
(key-chord-mode 1)
(defvar my-easy-open-paren-mode-map
(let ((map (make-sparse-keymap)))
(key-chord-define map ",." (kbd "("))
map))
(define-minor-mode my-easy-open-paren-mode
"In this mode, pressing . and , together is another way of pressing the open paren.")
(defvar my-easy-semicolon-mode-map
(let ((map (make-sparse-keymap)))
(key-chord-define map ";;" (kbd "C-e ;"))
map))
(define-minor-mode my-easy-semicolon-mode
"In this mode, pressing semicolon twice fast is another way of pressing C-e and semicolon.")
(add-hook 'prog-mode-hook 'my-easy-open-paren-mode)
(add-hook 'c-mode-common-hook 'my-easy-semicolon-mode)
ただし、キーの押下をトリガーすることは、他のコンテキストでは依然として役立つ場合があります。