DOuble CApitalsをシングルキャピタルに変換する関数を次に示します。私はもともとそれをpost-self-insert-hook
に追加することを提案していましたが、本当に必要なときにのみそのフックに追加できるように、以下は栄光マイナーモードのオプションです:
(defun dcaps-to-scaps ()
"Convert word in DOuble CApitals to Single Capitals."
(interactive)
(and (= ?w (char-syntax (char-before)))
(save-excursion
(and (if (called-interactively-p)
(skip-syntax-backward "w")
(= -3 (skip-syntax-backward "w")))
(let (case-fold-search)
(looking-at "\\b[[:upper:]]\\{2\\}[[:lower:]]"))
(capitalize-word 1)))))
(add-hook 'post-self-insert-hook #'dcaps-to-scaps nil 'local)
マイナーモードの定義:
(define-minor-mode dubcaps-mode
"Toggle `dubcaps-mode'. Converts words in DOuble CApitals to
Single Capitals as you type."
:init-value nil
:lighter (" DC")
(if dubcaps-mode
(add-hook 'post-self-insert-hook #'dcaps-to-scaps nil 'local)
(remove-hook 'post-self-insert-hook #'dcaps-to-scaps 'local)))
このバージョンを使用して、価値があるもの:
- 簡単です:手動で、またはモードフックでオン/オフするだけです。
- キーバインディングを変更する必要がないため、他の機能が失われることはありません。
それをに追加してもpost-self-insert-hook
、少なくともいくつかの単純なベンチマークによると、オーバーヘッドはほとんど存在しません。私のマシンでは、おもしろいほど単純なフォームとdcaps-to-scaps
関数をそれぞれ10,000回繰り返して取得しています。
(benchmark-run-compiled 10000 (+ 1 1)) ; => .001 to .003 -ish
(benchmark-run-compiled 10000 (dcaps-to-scaps)) ; => .003 to .006 -ish
そのため、はい、1 + 1を追加するよりも遅くなりますが、絶対的には気付かないでしょう。
looking-at-p
、これは一致データをまったく設定しません(ここでは必要ないか使用しないので問題ありません)。