2011-05-20 12 views
7

¿Cómo puedo modificar la forma en que emacs selecciona qué búfer mostrar después de cerrar un búfer?Se muestra el búfer de Emacs después de cerrar un búfer

Cuando tengo varias columnas que muestran el mismo tampón, y luego abrir otro archivo en una de las memorias intermedias y cierre la memoria intermedia de reciente apertura, que no regresa de nuevo a la memoria intermedia anterior, pero a otro búfer.

Voy a tratar de explicar con un ejemplo:

  • de inicio con un nuevo emacs a cero * *
  • Cx 2 (dividida en dos columnas)
  • Cx Cf 1 (1 encontrar el archivo)
  • Cx o (cambia a otro marco)
  • Cx b 1 (encontrar el archivo 1)
  • Cx Cf 2 (encontrar archivos 2)
  • C-x k (matar búfer)

Ahora cambia al rayar pero me gustaría que se muestre 1 en ambas ventanas de nuevo, es posible hacer que emacs se comportan de esta manera?

Respuesta

3

Puede que esta no sea una respuesta directa a su pregunta, pero podría ser útil.

Emacs gestiona su lista de búfers, incluida la decisión de qué búfer se muestra al matar uno (a través de kill-buffer). No he investigado cómo se hace, pero el documentation is "out there". Mucha gente tiene createdbuffer-stack magia de gestión personalizada para cambiar la forma en que emacs hace las cosas, tal vez algunos de ellos se basan en el análisis bayesiano, o lo que sea. Puedes imaginar las posibilidades.

Nunca he tratado de cambiar la forma en que emacs gestiona sus búferes. En su lugar, simplemente vinculo other-window y switch-to-buffer con simples teclas (C-x o, C-x b) y me pongo realmente bueno usándolas.

puede crear una función simple para lo que desee: debe destruir todas las demás ventanas, luego dividir la ventana para que el búfer actual se muestre en ambos. Afortunadamente, emacs tiene funciones que hacen exactamente esas cosas.

(defun cheeso-show-buffer-two-windows() 
    "Close all other windows; then split, and show the current 
buffer in both windows." 
    (interactive) 
    (delete-other-windows) 
    (split-window-vertically)) 

Enlace que a una pulsación de tecla, y badda-bing, estás allí. Esta es una división vertical: las ventanas se muestran en una pila vertical. Si lo quieres dividir horizontalmente (las ventanas están una al lado de la otra), entonces reemplaza ... bueno, ya sabes.

+1

Como dijiste, no es realmente lo que estoy buscando. El problema es cambiar a buffers y tampoco quiere cambiar a un búfer que ya esté visible.Si tengo el archivo 1 abierto en ambos marcos, y luego abro el archivo 2 en uno de los cuadros y hago el cambio al buffer, no sugiere 1, pero * scratch *. Miré la fuente para emacs, y la función other-buffer (que es usada por kill-buffer) tiene un argumento opcional, visible-ok, que si no está configurado, no importa si el buffer está visible en otro frame. Pero no quiero tener que recompilar emacs solo para solucionar mi problema. – Puppe

+0

heh heh, estoy bastante seguro de que no necesita recompilar emacs para que haga lo que quiera. Ya no tengo claro qué es eso. Dijiste que lo que propuse es "no realmente lo que estás buscando". Por qué no? Lo que sea que estés imaginando, hay un poco de elisp que hará lo que quieras. Intente buscar en 'switch-to-buffer-other-window'. Quizás eso sea útil. – Cheeso

+0

Lo que quiero que haga es cerrar el búfer en un marco y cambiar al búfer anterior que estaba abierto en ese marco, aunque ese búfer esté visible en otro marco. Es ciertamente posible, solo tengo que aprender (e) lisp. – Puppe

0

Esto tampoco ayuda directamente, pero Winner mode puede ayudarlo a llegar a donde quiere llegar.

0

¿Está utilizando tabbar-mode? Tuve el mismo problema y para mí tabbar fue la causa. Tabbar agrega la función tabbar-buffer-kill-buffer-hook a kill-buffer-hook. Puede eliminarlo con (remove-hook 'kill-buffer-hook 'tabbar-buffer-kill-buffer-hook).

Si no utiliza tabbar, intente M-x describe-variablekill-buffer-hook. Una de las funciones en esta lista debe ser responsable de jugar con sus búferes.

Cuestiones relacionadas