Ecco una funzione che convertirà DOuble CApitals in Single Capitals. Inizialmente avevo suggerito di aggiungerlo a post-self-insert-hook
, ma di seguito è un'opzione per una modalità minore glorificata in modo da aggiungere a quel gancio solo quando lo vuoi davvero:
(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 la definizione della modalità minore:
(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)))
Per quello che vale, usando questa versione:
- è semplice: basta accenderlo / spegnerlo manualmente o in modalità hook;
- non richiede modifiche ai collegamenti chiave, quindi non stai perdendo altre funzionalità.
Anche quando lo aggiungi post-self-insert-hook
, l'overhead è quasi inesistente, almeno secondo alcuni semplici benchmark. Sulla mia macchina, ecco cosa ottengo con 10.000 ripetizioni ciascuna di una forma ridicolmente semplice e la dcaps-to-scaps
funzione:
(benchmark-run-compiled 10000 (+ 1 1)) ; => .001 to .003 -ish
(benchmark-run-compiled 10000 (dcaps-to-scaps)) ; => .003 to .006 -ish
Quindi, sì, è più lento dell'aggiunta di 1 + 1, ma in termini assoluti non lo noterai mai.
looking-at-p
, che non imposta affatto i dati della partita (va bene perché non ti serve o non li usi qui).