Aquí hay una función que convertirá DOuble CApitals a Single Capitals. Originalmente sugerí agregarlo post-self-insert-hook
, pero a continuación hay una opción para un modo menor glorificado para que solo agregue a ese gancho cuando realmente lo desee:
(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)
Y la definición del modo menor:
(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 lo que vale, usando esta versión:
- es simple: simplemente actívelo / desactívelo manualmente o en un modo de enlace;
- no requiere cambios en las combinaciones de teclas, por lo que no está perdiendo ninguna otra funcionalidad.
Incluso cuando lo agrega post-self-insert-hook
, la sobrecarga es casi inexistente, al menos de acuerdo con algunos puntos de referencia simples. En mi máquina, esto es lo que obtengo con 10,000 repeticiones, cada una de una forma ridículamente simple y la dcaps-to-scaps
función:
(benchmark-run-compiled 10000 (+ 1 1)) ; => .001 to .003 -ish
(benchmark-run-compiled 10000 (dcaps-to-scaps)) ; => .003 to .006 -ish
Entonces, sí, es más lento que agregar 1 + 1, pero en términos absolutos nunca lo notarás.
looking-at-p
, lo que no establece los datos de coincidencia en absoluto (eso está bien ya que no lo necesita ni lo usa aquí).