2011-06-08 10 views
6

Me gustaría un modo menor que permita que los símbolos desplazados en las teclas numéricas sean accesibles de manera no desplazada (y que los dígitos se cambien). Parece que esto podría ser útil con el código Perl ($, @,%, etc ...). Idealmente, habría una clave para alternar este modo. Más o menos como un bloqueo de mayúsculas, pero solo para las teclas numéricas.Símbolos no desplazados en Emacs

¿Ese modo ya existe?

Respuesta

9

Una forma de rodar su propia sería algo como esto:

(define-minor-mode snoopy-mode 
    "Toggle snoopy mode. 
    With no argument, this command toggles the mode. 
    Non-null prefix argument turns on the mode. 
    Null prefix argument turns off the mode." 
    ;; The initial value. 
    nil 
    ;; The indicator for the mode line. 
    " Snoopy" 
    ;; The minor mode bindings. 
    '(("1" . (lambda() (interactive) (insert-char ?! 1))) 
    ("!" . (lambda() (interactive) (insert-char ?1 1))) 
    ;;etc 
)) 

Ver minor modes y keymaps.

+0

¡Impresionante! ¡Funciona genial! – dharmatech

+0

Eso es un @ & $ ^^ # @! buen nombre para eso! – dwarring

+0

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

5

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))) 
1

Esto no es una solución completa, pero un compañero mío escribió un modo menor que inserta guión o guión bajo automáticamente dependiendo del contexto: Smart-Dash Mode

+0

¡Esto también se ve bien! ¡Gracias! – dharmatech

Cuestiones relacionadas