2012-03-26 8 views
5

stackoverflow! W ciągu ostatnich kilku dni próbowałem trochę dostosować emacsa i stanąłem przed problemem, że nie wiem, jak się do niego zbliżyć.wiązanie ido maskowane przez klucz globalny

Co próbuję zrobić, to zdefiniować globalne keybinding i ido-mode keybinding, który używałby tych samych kluczy do robienia różnych rzeczy.

ido-mode kombinacja klawiszy jest zdefiniowana w ten sposób:

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

i działa dobrze, dopóki nie zamieścić następującą linię w moim pliku .emacs:

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

Z tej linii występuje M-zwrotnym wywołuje insert-newline-and-indent nawet z ido-switch-buffer. Co ciekawe, gdy interaktywnie używam klucza globalnego (tj. Nie z pliku init, ale z inwokacji M-x), wszystko działa zgodnie z oczekiwaniami.

Dzięki za pomoc. Przepraszam za mój angielski.


Problem okazał się być w trybie ergoemacs, który miałem włączony. Ten tryb definiuje porady dla globalnego klucza, który powoduje ten efekt.

Rozwiązałem problem, przesuwając wywołanie klawisza globalnego powyżej inicjowania Ergoemacsa. Nie najlepsze rozwiązanie, ale proste.

+0

Nie mogę tego odtworzyć. BTW 'ido-invoke-in-vertical-split' nie jest wbudowaną funkcją musiałem google dla niego. https://gist.github.com/493269 – kindahero

+0

Przykro mi z powodu takiej nieprzejrzystości. W każdym razie ta funkcja nie wydaje się być związana z problemem: zmiana jej na coś innego (np. Ido-exit-minibuffer) nie zmienia efektu. – campugnatus

+0

Z której wersji Emacsa korzystasz? Nie mogę również odtworzyć tego problemu (w Emacs 24.0.94). – phils

Odpowiedz

3

Problem został spowodowany przez pakiet ergoemacs-skróty klawiszowe, lub być bardziej szczegółowe, przez ergoemacs-mode.el

Pakiet ten definiuje porady dla globalnej-set-klucza, który w rzeczywistości zastępuje go własny ergoemacs-global-set-key. Ponieważ jednak ergoemacs jest trybem drugorzędnym, jego mapa klawiszy ma wyższy priorytet niż mapa globalna, a więc przesłonięcie trybu ido minor.

Widzę trzy rozwiązania tego problemu:

  1. komentarz out porady w ergoemacs-mode.el.
  2. Użyj klucza globalnego PRZED włączeniem trybu Ergoemacs.
  3. Poczekaj, aż autor Ergoemacs naprawi błąd;)