2009-10-15 8 views
7

Así que por lo general tienen 3 buffers abiertos en Emacs.¿Cómo puedo hacer que los comandos de movimiento de ventana ignoren una ventana determinada?

  1. Un buffer para el código real que estoy escribiendo.
  2. Un tampón para la prueba de la unidad de dicho código.
  3. Una tercera memoria intermedia que muestra los resultados de la prueba de la unidad. Este buffer llega a ser debajo de las otras dos memorias intermedias cuando corro mi prueba de la unidad C-x ESPACIO.

¿Cómo desactivo esta tercera memoria intermedia de tal manera que cuando pulso C-x o Yo sólo estoy cambiando entre la memoria y el tampón 1 2? Actualmente, alterno entre tampón 1, a continuación, tampón 2, a continuación, amortiguar 3, a continuación, tampón 1, etc. Para ser más específicos, quiero C-x o con sólo el interruptor de memoria intermedia entre el 1 y el 2.

Gracias.

+0

No es una respuesta sino una solución alternativa que podría ayudarlo: http://stackoverflow.com/questions/91071/emacs-switch-active-window –

+0

Parece que está pidiendo saltarse una * ventana * cuando contiene un búfer particular en el que no quiere cambiar. ¿Correcto? –

+0

Stephen, ¿puedo sugerirle que actualice el título y la pregunta para poner la ventana en lugar del búfer? buffer/window/frame tiene un significado específico en emacs: Frame es el equivalente de lo que un administrador de Windows llama una ventana (el gabinete que generalmente se puede mover). ventana es a lo que se refiere: un subconjunto del marco que muestra algo de texto. un búfer es lo que representa el contenido real que se muestra. Generalmente se identifica con un nombre, que se muestra en la línea de modo. Puede mostrar el mismo búfer en 2 ventanas, p. – Bahbar

Respuesta

7

Una solución general a este (puede mirar) algo como lo siguiente:

(defvar ignore-windows-containing-buffers-matching-res '("\\*Help") 
     "List of regular expressions specifying windows to skip (if window contains buffer that matches, skip)") 

(defadvice other-window (before other-window-ignore-windows-containing activate) 
    "skip over windows containing buffers which match regular expressions in 'ignore-windows-containing-buffers-matching-res" 
    (if (and (= 1 (ad-get-arg 0)) (interactive-p)) 
     (let* ((win (next-window)) 
      (bname (buffer-name (window-buffer win)))) 
     (when (some 'identity (mapcar '(lambda (re) 
             (string-match re bname)) 
            ignore-windows-containing-buffers-matching-res)) 
      (ad-set-arg 0 2))))) 

Personalizar la variable a un ajuste de expresiones regulares los nombres de búferes que desea omitir.

+0

Copié esto en mi archivo .emacs. Luego reemplacé "* Ayuda" con "* Ruby-Test *" (que era el nombre del buffer en el que se estaba ejecutando la prueba de ruby). Ahora cuando cambio los buffers, solo cambia entre el buffer 1 y 2. Parece una buena solución. Gracias. –

5

respuesta de Trey va a hacer exactamente lo que quiere (por lo menos parece que va; no he probado). Una solución más genérica sería utilizar swbuff, ya sea con o swbuff-x mi propia swbuff-advice. Se puede encontrar información sobre los tres en el Emacs Wiki swbuff page.

Cuestiones relacionadas