Muchas gracias a Jaybee por la respuesta. He aquí una definición más amplia de todos los números:
(define-minor-mode shifted-numbers-mode
"Toggle shifted numbers mode."
nil
" shifted"
'(("1" . (lambda() (interactive) (insert-char ?! 1)))
("2" . (lambda() (interactive) (insert-char [email protected] 1)))
("3" . (lambda() (interactive) (insert-char ?# 1)))
("4" . (lambda() (interactive) (insert-char ?$ 1)))
("5" . (lambda() (interactive) (insert-char ?% 1)))
("6" . (lambda() (interactive) (insert-char ?^ 1)))
("7" . (lambda() (interactive) (insert-char ?& 1)))
("8" . (lambda() (interactive) (insert-char ?* 1)))
("9" . (lambda() (interactive) (insert-char ?(1)))
("0" . (lambda() (interactive) (insert-char ?) 1)))
("!" . (lambda() (interactive) (insert-char ?1 1)))
("@" . (lambda() (interactive) (insert-char ?2 1)))
("#" . (lambda() (interactive) (insert-char ?3 1)))
("$" . (lambda() (interactive) (insert-char ?4 1)))
("%" . (lambda() (interactive) (insert-char ?5 1)))
("^" . (lambda() (interactive) (insert-char ?6 1)))
("&" . (lambda() (interactive) (insert-char ?7 1)))
("*" . (lambda() (interactive) (insert-char ?8 1)))
("(" . (lambda() (interactive) (insert-char ?9 1)))
(")" . (lambda() (interactive) (insert-char ?0 1)))))
En Perl, los frenos son a menudo más común que los soportes así que puede que desee:
("[" . (lambda() (interactive) (insert-char ?{ 1)))
("]" . (lambda() (interactive) (insert-char ?} 1)))
("{" . (lambda() (interactive) (insert-char ?[ 1)))
("}" . (lambda() (interactive) (insert-char ?] 1)))
¡Impresionante! ¡Funciona genial! – dharmatech
Eso es un @ & $ ^^ # @! buen nombre para eso! – dwarring
Se inspiró de esta respuesta y creó https://github.com/anmonteiro/snoopy-mode. Maneja problemas alrededor de abrir y cerrar paréntesis en el modo Paredit/Smartparens que la respuesta no cubre. – anmonteiro