;;; -*- lexical-binding: t -*- (defvar caps-lock-mode-map (let ((map (make-sparse-keymap))) (define-key map [remap self-insert-command] 'upcased-self-insert) map)) (define-minor-mode caps-lock-mode "Caps lock minor mode." nil " CLK" caps-lock-mode-map) (defun upcased-self-insert (arg) "Insert an uppercase version of the input, unless in a comment or string" (interactive "p") (let* ((syn (syntax-ppss)) (comment-or-string (or (nth 4 syn) (nth 3 syn))) (last-command-event (if (and (not comment-or-string) (characterp last-command-event)) (upcase last-command-event) last-command-event))) (self-insert-command arg))) (provide 'caps-lock-mode)