2012-06-27 6 views
5

Me gusta usar C-j a eval-last-sexp pero el modo de crédito (que de otro modo me gusta) anula esto a paredit-newline. Mirando en los documentos de modo de crédito no veo nada como un paredit-mode-hook definido donde puedo add-hook para llamar al local-set-key o una función similar.¿Hay un gancho de crédito de Emacs disponible para poder redefinir C-j?

¿Alguien tiene alguna sugerencia?

actualización Después de probar las dos respuestas abajo y no tener mucho éxito, creo que el problema puede estar relacionado con el hecho de que paredit se está cargando en unos contextos diferentes? A saber, estoy abriendo los archivos Common Lisp, Clojure y Emacs Lisp, todos los cuales pueden usar paredit. Lamentablemente, las diversas formas de eval-last-sexp tienen nombres ligeramente diferentes en cada modo, por lo que no puedo definir la clave una vez para todo. Por el contrario, tengo que vincular la clave en función del modo principal en el que estoy también. Con suerte, eso agrega otro punto de datos útil.

Respuesta

10

No hay necesidad de utilizar ganchos, algo así como lo siguiente debería funcionar:

(eval-after-load "paredit" 
    #'(define-key paredit-mode-map (kbd "C-j") 'eval-last-sexp)) 

Alternativamente, si por alguna razón que no funciona, o simplemente prefiere el uso de ganchos, se puede añadir lo anterior define-key invocación a los ganchos de los modos principales para los cuales paredit está activado.

+0

Gracias! Funcionó como por arte de magia. – bitops

6

Cada modo definido por una de las macros define-*-mode ejecuta automáticamente un MODE-hook correspondiente.

Veo que el modo de crédito es un modo menor definido con (define-minor-mode paredit-mode ...), y por lo tanto se ejecutará paredit-mode-hook.

Puede escribir M-xfind-functionRET RETdefine-minor-mode y la búsqueda de run-hooks para ver donde se define este comportamiento.

Editar (basado en adición a la pregunta):

es lo que todos usan C-x C-e como vinculante para la función eval-last-sexp específicos del modo por defecto, por casualidad? Eso parece como una cosa coherente para que lo hagan, y si es así, usted podría utilizar el siguiente enfoque:

+1

+1. Nunca me di cuenta de que Emacs automatizaba este comportamiento incluso cuando la variable de enlace no estaba explícitamente definida por el modo en cuestión. –

2

Hay una paredit-mode-hook. No lo verá hasta que le agregue algo. Extraño, pero esta es la forma en que se comportan los ganchos.

Sin embargo, en su caso, el mejor enfoque puede ser para borrar la unión de C-j paredit:

(eval-after-load 'paredit 
    #'(define-key paredit-mode-map (kbd "C-j") nil)) 

y después fijar su propio a través de clave local situado en cada gancho modo mayor.

Cuestiones relacionadas