Aqui está uma função que converterá DOuble CApitals em Single Capitals. Eu sugeri originalmente adicioná-lo a post-self-insert-hook
, mas abaixo está uma opção para um modo menor glorificado, para que você só adicione esse gancho quando realmente quiser:
(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)
E a definição de modo secundário:
(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)))
Para o que vale a pena, usando esta versão:
- é simples: basta ligar / desligar manualmente ou em um gancho de modo;
- não requer alterações nas ligações de teclas, para que você não perca nenhuma outra funcionalidade.
Mesmo quando você o adiciona post-self-insert-hook
, a sobrecarga é quase inexistente, pelo menos de acordo com alguns testes comparativos simples. Na minha máquina, eis o que recebo com 10.000 repetições, cada uma de uma forma ridiculamente simples e da dcaps-to-scaps
função:
(benchmark-run-compiled 10000 (+ 1 1)) ; => .001 to .003 -ish
(benchmark-run-compiled 10000 (dcaps-to-scaps)) ; => .003 to .006 -ish
Então, sim, é mais lento que adicionar 1 + 1, mas em termos absolutos, você nunca notará.
looking-at-p
, que não define os dados da correspondência (tudo bem, pois você não precisa nem os usa aqui).