2010-06-15 19 views
5

Estoy dando el modo ErgoEmacs una prueba para ver si puedo usar Emacs más cómodamente. Algunas de sus combinaciones de teclas son bastante intuitivas, pero en muchos casos no quiero reemplazar directamente los valores predeterminados.Asignar combinaciones de teclas de Emacs múltiples a un solo comando?

Por ejemplo, en el contexto de la estructura de acceso directo de navegación de ErgoEmacs, M-h tiene sentido como reemplazo de C-a, pero quiero poder usar ambos, no solo M-h. He intentado simplemente duplicar los comandos:

;; Move to beginning/ending of line 
(defconst ergoemacs-move-beginning-of-line-key (kbd "C-a")) ; original 
(defconst ergoemacs-move-end-of-line-key   (kbd "C-e")) ; original 
(defconst ergoemacs-move-beginning-of-line-key (kbd "M-h")) ; ergoemacs 
(defconst ergoemacs-move-end-of-line-key   (kbd "M-H")) ; ergoemacs 

Pero Emacs simplemente sobrescribe la primera combinación de teclas con el segundo. ¿Cuál es la mejor manera de abordar esto?

Respuesta

3

Como resultado, ErgoEmacs utiliza dos archivos para definir la vinculación. Uno es el archivo principal ergoemacs-mode.el, y el otro es el diseño de teclado específico que selecciona (por ejemplo, ergoemacs-layout-us.el). El último documento crea una constante, que el primero usa para crear la combinación de teclas. Entonces, mientras pensaba que estaba duplicando la combinación de teclas, en realidad estaba cambiando la constante que posteriormente se usó para ese propósito.

Solución:

En ergomacs-mode.el:

;; Move to beginning/ending of line 
(define-key ergoemacs-keymap ergoemacs-move-beginning-of-line-key 'move-beginning-of-line) 
(define-key ergoemacs-keymap ergoemacs-move-end-of-line-key 'move-end-of-line) 
(define-key ergoemacs-keymap ergoemacs-move-beginning-of-line-key2 'move-beginning-of-line) ; new 
(define-key ergoemacs-keymap ergoemacs-move-end-of-line-key2 'move-end-of-line) ; new 

En ergoemacs-layout-us.el:

;; Move to beginning/ending of line 
(defconst ergoemacs-move-beginning-of-line-key (kbd "M-h")) 
(defconst ergoemacs-move-end-of-line-key  (kbd "M-H")) 
(defconst ergoemacs-move-beginning-of-line-key2 (kbd "C-a")) ; new 
(defconst ergoemacs-move-end-of-line-key2  (kbd "C-e")) ; new 
2

¿Huh? ¿Tener un solo y único camino para cada función es un principio dorado de ErgoEmacs? Debido a que la vinculación de teclas normal funciona exactamente de la manera opuesta: nombra una tecla a la vez y especifica lo que debe hacer. Si un modo define una variable global como "la clave a la que está vinculado el final de línea", entonces, por supuesto, solo puede haber un valor, pero con los comandos de enlace normales puede vincular la misma función a tantas combinaciones como te gusta. De hecho, cada combinación de teclas que he visto utilizado ya sea como esto parecía

(global-set-key [(meta space)] 'just-one-space) 

o como esto

(add-hook 'c-mode-hook 'my-c-mode-hook) 
(defun my-c-mode-hook() 
    (define-key c-mode-map [(control c) b] 'c-insert-block)) 

si es sólo para un modo específico.

+0

Gracias, Kilian - esa fue la idea de que me llevó a la respuesta. Resulta que ErgoEmacs define la vinculación de claves en ergoemacs-mode.el de acuerdo con una asignación, que se define en el 'defconst' que pegué arriba. – Dan

4

Para volver a colocar respuesta de ergo-emacs mailing list:

Xah Lee dijo:

eso es muy fácil.
en el archivo ergoemacs-mode.el , existe esta línea (cargue "ergoemacs-unbind") solo coméntelo. Eso debería ser todo lo que necesita hacer. Sin embargo, tenga en cuenta que Teclear ErgoEmacs define esos atajos comunes como Abrir, Cerrar, Nuevo, Guardar ... con las teclas Ctrl + o, Ctrl + w, Ctrl + n, Ctrl + s etc. Acerca 7 de ellos más o menos. Por lo tanto, creo que algunos de estos golpearán en emacs tradicionales enlaces con Ctrl. Si es nuevo en ErgoEmacs y trata de explorarlo, puede intentar comenzar con algunas claves .esta página puede tener algunos información útil: http://code.google.com/p/ergoemacs/wiki/adoption gracias por echar un vistazo a ErgoEmacs!
Xah Σ http://xahlee.org/

Cuestiones relacionadas