2010-02-26 17 views
5

He visto preguntas aquí acerca de mover el cursor de ventana a ventana con C-x o y M-- C-x o. Multa.emacs cambia ventana a C-TAB y C-S-TAB

Quiero asignar eso a C-TAB y .

Esto es lo que he añadido a mis .emacs:

(global-set-key [C-tab] 'other-window) 
(global-set-key [C-S-tab] '(other-window -1)) 

C-tab funciona, pero no C-S-tab.

El minibuffer me dice:

Wrong type argument: commandp, (other-window -1) 

me trataron sin el paréntesis alrededor de otra ventana, pero eso no funcionaría bien.

En resumen, no estoy seguro de cómo pasar argumentos opcionales a las funciones en mis .emacs.

Ayuda, por favor?

Editar para añadir versión: (emacs 22.3.1 en Windows)

Respuesta

7
(global-set-key [C-S-tab] 
    (lambda() 
     (interactive) 
     (other-window -1))) 

EDIT: Añadido en (interactive), por Gauthier y Peter Hart.

+0

derecho. ''(other-window -1)' se interpreta como una celda cons, y no se puede llamar a las células cons. –

+0

Lo sentimos, esto da 'argumento de tipo incorrecto: commandp, (lambda nil (other-window -1))' (emacs 22.3.1 en windows) – Gauthier

+0

Funciona si agrega '(interactive)' after 'lambda()' . ¡Edita tu respuesta y la estableceré como válida! Sería bueno si pudiera agregar una breve explicación sobre por qué '(interactive)' es necesario. – Gauthier

2

Para más detalles sobre la respuesta de Mateo un poco, hace poco escribió un macro poco de ayuda para situaciones como esta:

(defmacro global-set-key* (keys &rest body) 
    `(global-set-key ,keys (lambda() (interactive) ,@body)) 

De esa manera puedo escribir cosas como:

(global-set-key* [(shift control n)] (next-line) (scroll-up 1)) 
(global-set-key* [(shift control p)] (previous-line) (scroll-down 1)) 
5

Estoy en mi teléfono móvil y no recuerdo la secuencia de teclas exacta, pero puede encontrarlo en mi archivo init.el o en Chk CS-TAB para que emacs le indique "< la secuencia de teclas que busca > no está vinculada a nada" o algo por el estilo http://pablo.rauzy.name/init.el.html :-)

EDIT: por lo que estoy ahora en mi equipo, aquí es la forma más sencilla de hacer esto:

(global-set-key [C-tab] 'next-buffer) 
(global-set-key [C-S-iso-lefttab] 'previous-buffer) 
+0

Tenga en cuenta la diferencia entre seleccionar el siguiente búfer y seleccionar la siguiente ventana. – Gauthier

+0

¡Oh, mi mal! Pero todavía funciona, con ''other-window' en lugar de'' next-buffer' y ''(other-window -1)' en lugar de '' previous-buffer' :-) – p4bl0

+1

Eso es lo que probé (ver publicación original), pero no funcionó. Ver la solución. – Gauthier

Cuestiones relacionadas