2012-03-26 11 views
5

stackoverflow! En los últimos días intenté personalizar un poco mis emacs y me enfrenté al problema que no sé cómo abordar.enlace ido-mode enmascarado por global-set-key

Lo que trato de hacer es definir un enlace de clave global y un enlace de modo ido-modo que usaría las mismas teclas para hacer cosas diferentes.

Ido-modo de combinación de teclas se define de esta manera:

(defun ido-my-keys() 
    "Add my keybindings for ido." 
    (define-key ido-completion-map (kbd "M-<return>") 
    'ido-invoke-in-vertical-split) 
) 

(add-hook 'ido-setup-hook 'ido-my-keys) 

y funciona bien hasta que coloque a la línea siguiente en mi archivo .emacs:

(global-set-key (kbd "M-<return>") 'insert-newline-and-indent) 

Con esta línea actual M-retorno invoca insert-newline-and-indent incluso desde ido-switch-buffer. Curiosamente, cuando uso global-set-key de forma interactiva (es decir, no desde el archivo init sino desde la invocación M-x), todo funciona como se espera.

Gracias por su ayuda. Lo siento por mi ingles.


El problema se produjo en el modo ergoemacs que había encendido. Este modo define un consejo para global-set-key que causa este efecto.

He resuelto el problema moviendo la llamada global-set-key sobre la inicialización de ergoemacs. No es la mejor solución, sino simple.

+0

no puedo reproducir este. Por cierto 'ido-invoke-in-vertical-split' no es función incorporada, tuve que buscarlo en Google. https://gist.github.com/493269 – kindahero

+0

Lo siento por tanta oscuridad. De todos modos, esta función no parece estar relacionada con el problema: cambiarlo a otra cosa (por ejemplo, ido-exit-minibuffer) no cambia el efecto. – campugnatus

+0

¿Qué versión de Emacs estás usando? Tampoco puedo reproducir este problema (en Emacs 24.0.94). – phils

Respuesta

3

El problema fue causado por paquete ergoemacs-combinaciones de teclas, o, para ser más específicos, por ergoemacs-mode.el

Este paquete define un consejo para-clave-mundial establecido que, de hecho, lo reemplaza con su propio ergoemacs-global-set-key. Pero como ergoemacs es un modo menor, su mapa de teclas tiene una precedencia mayor que el mapa global, anulando así la vinculación de teclas del modo ido menor.

veo tres soluciones a este problema:

  1. comentario de salida consejos en ergoemacs-mode.el.
  2. Use global-set-key ANTES de activar el modo ergoemacs.
  3. Espere a que el autor ergoemacs reparar el fallo;)
Cuestiones relacionadas