xah-toggle-letter-case.md
(defun xah-toggle-letter-case ()
"Toggle the letter case of current word or selection.
Always cycle in this order: Init Caps, ALL CAPS, all lower.
URL `http://xahlee.info/emacs/emacs/emacs_toggle_letter_case.html'
Version: 2020-06-26 2023-11-14"
(interactive)
(let ( (deactivate-mark nil) xp1 xp2)
(if (region-active-p)
(setq xp1 (region-beginning) xp2 (region-end))
(save-excursion
(skip-chars-backward "[:alpha:]")
(setq xp1 (point))
(skip-chars-forward "[:alpha:]")
(setq xp2 (point))))
(when (not (eq last-command this-command))
(put this-command 'state 0))
(cond
((equal 0 (get this-command 'state))
(upcase-initials-region xp1 xp2)
(put this-command 'state 1))
((equal 1 (get this-command 'state))
(upcase-region xp1 xp2)
(put this-command 'state 2))
((equal 2 (get this-command 'state))
(downcase-region xp1 xp2)
(put this-command 'state 0)))))
Language:Clojure