2012-03-26 1 views
5

stackoverflow! Nei giorni scorsi ho cercato di personalizzare i miei emacs un po 'e ho affrontato il problema che non so come affrontare.associazione in modalità ido mascherata dal set di chiavi globale

Quello che sto cercando di fare è definire un keybinding globale e una combinazione di tasti ido-mode che userebbe gli stessi tasti per fare cose diverse.

Ido-mode scorciatoia è definita in questo modo:

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

E funziona bene fino a quando ho posto la seguente riga nel mio file .emacs:

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

Con questa formazione attuale M-ritorno invoca insert-newline-and-indent anche da ido-switch-buffer. È interessante notare che quando uso global-set-key in modo interattivo (vale a dire non da init-file ma da invocazione M-x), tutto funziona come previsto.

Grazie per il vostro aiuto. Mi scusi per il mio inglese.


Il problema si è verificato in modalità ergoemacs che ho attivato. Questa modalità definisce un consiglio per il set-chiave globale che causa questo effetto.

Ho risolto il problema spostando la chiamata del tasto di selezione globale sopra l'inizializzazione di ergoemacs. Non la soluzione migliore, ma semplice.

+0

non posso riprodurre questo. BTW 'ido-invoke-in-vertical-split' non è una funzione incorporata, ho dovuto google per questo. https://gist.github.com/493269 – kindahero

+0

Mi dispiace per tale oscurità. Ad ogni modo, questa funzione non sembra essere correlata al problema: cambiandola in qualcos'altro (ad es. Ido-exit-minibuffer) non cambia l'effetto. – campugnatus

+0

Quale versione di Emacs stai usando? Non riesco a riprodurre neanche questo problema (in Emacs 24.0.94). – phils

risposta

3

Il problema è stato causato dal pacchetto ergoemacs-keybindings, o, per essere più precisi, da ergoemacs-mode.el

Questo pacchetto definisce un consiglio per-chiave global-set che, di fatto, lo sostituisce con la sua ergoemacs-global-set-key. Ma dal momento che ergoemacs è una modalità minore, la sua keymap ha una precedenza maggiore rispetto alla mappa globale, annullando così il keybinding della modalità ido minor.

Vedo tre soluzioni a questo problema:

  1. Commento-out consulenza ergoemacs-mode.el.
  2. Utilizzare il tasto di impostazione globale PRIMA di attivare la modalità ergoemacs.
  3. Attendere che l'autore ergoemacs per risolvere il bug;)