Voici une fonction qui convertira les CApitaux DOubles en capitales simples. J'avais initialement suggéré de l'ajouter à post-self-insert-hook
, mais ci-dessous est une option pour un mode mineur glorifié afin que vous n'ajoutiez à ce crochet que lorsque vous le voulez vraiment:
(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)
Et la définition du mode mineur:
(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)))
Pour ce que ça vaut, en utilisant cette version:
- est simple: il suffit de l'activer / le désactiver manuellement ou en mode hook;
- ne nécessite aucune modification des raccourcis clavier, vous ne perdez donc aucune autre fonctionnalité.
Même lorsque vous l'ajoutez à post-self-insert-hook
, les frais généraux sont presque inexistants, du moins selon certains tests de référence simples. Sur ma machine, voici ce que j'obtiens avec 10 000 répétitions chacune d'une forme ridiculement simple et la dcaps-to-scaps
fonction:
(benchmark-run-compiled 10000 (+ 1 1)) ; => .001 to .003 -ish
(benchmark-run-compiled 10000 (dcaps-to-scaps)) ; => .003 to .006 -ish
Donc, oui, c'est plus lent que d'ajouter 1 + 1, mais en termes absolus, vous ne le remarquerez jamais.
looking-at-p
, qui ne définit pas du tout les données de correspondance (c'est correct car vous n'en avez pas besoin ou ne les utilisez pas ici).