Cerrar todos los buffers directos

23

A veces mi lista de búfer tiene más de 10 ventanas directas, y termino usando buffer-menupara marcarlas manualmente y eliminarlas todas. ¿Hay una manera más rápida de cerrar todas las ventanas abiertas dired?

nispio
fuente
He aceptado la respuesta que responde más directamente a la pregunta. Sin embargo, desde entonces he comenzado a aplicar una onza de prevención en su lugar: emacs.stackexchange.com/a/1041/93
nispio

Respuestas:

32

Podrías hacer lo siguiente:

M-x ibuffer

* / para marcar buffers en modo directo.

D para eliminarlos

Francisco Dibar
fuente
1
Nunca había oído hablar de ibuffer antes. Definitivamente voy a estar asignando C-x C-ba ibuffer.
nispio
También puede presionar t( dired-toggle-marks) para marcar todo (si ninguno se marcó previamente).
caisah
@caisah dired-toggle-markses el nombre del comando dired . Al presionar ttambién se alternarán todas las marcas en ibuffer, pero los búferes no directos generalmente superan en número a los búferes directos, por lo que alternar a menudo no tiene sentido en este contexto.
nispio
@nispio Tienes razón. No sé por qué, pero estaba pensando en todos los tampones se DIRED ...
caisah
1
Nota: esto no funciona correctamente cuando no hay búferes directos, porque la D no se aplicará a los búferes directos, sino al primer búfer de la lista.
daniel kullmann
10

En lugar de agregar otra función para eliminar todos los diredbúferes, le sugiero que aproveche los grupos de filtros ibuffer, ya que le permite agrupar el búfer por muchas condiciones.

Aquí hay un ejemplo para establecer grupos de filtros:

(setq-default ibuffer-saved-filter-groups
              `(("Default"
                 ;; I create a group call Dired, which contains all buffer in dired-mode
                 ("Dired" (mode . dired-mode))
                 ("Temporary" (name . "\*.*\*"))
                 )))

Luego C-x C-babra la ibufferventana, puede ver algo como esto:

Ejemplo 1

Mueva el cursor a [ Dired ](con M-p, M-n), luego presione dpara marcar como eliminar

ejemplo2

luego presione xpara ejecutar.

Prefiero esta forma porque no necesito pensar en cómo vincular mi clave a la nueva función, y mis buffers están mejor organizados.

Rangi Lin
fuente
Los grupos de filtros no se muestran para mí cuando lo inicié por primera vez ibufferdespués de evaluar su código. Tuve que golpear / R(obligado ibuffer-switch-to-saved-filter-groups) para obtener los grupos.
itsjeyd
(ibuffer-switch-to-saved-filter-groups "Default")Puede agregar esta línea de código en el enlace ibuffer, el nombre de los grupos de filtros debe cambiarse si no es asíDefault
Rangi Lin
1
Sí, eso es lo que terminé haciendo. No sabía acerca de los grupos de filtros antes de leer su respuesta, gracias por mencionarlos;)
itsjeyd
10

¿Tiene muchos amortiguadores Dired porque los quería todos en un punto? IOW, ¿ querías crear cada uno de ellos como buffers separados?

Si no, la solución es simple: dígale a Dired que reutilice un búfer Dired existente cuando presioneRET un nombre de directorio para abrirlo en Dired.

Aquí está cómo hacer eso:

  1. Cargar biblioteca Dired + ( dired+.el):

    (require 'dired+)
    
  2. Dile a Dired que reutilice los buffers de Dired:

    (diredp-toggle-find-file-reuse-dir 1)
    

El efecto es que cuando golpeas RET(o haces clic con el mouse) en un directorio en Dired, find-alternate-filese usa, por lo que el búfer Dired original es reemplazado (eliminado) por el nuevo.

Puede alternar este comportamiento en cualquier momento, usando C-M-R(aka C-M-S-r) en Dired.

Dibujó
fuente
Esta es la solución que he decidido ahora. En primer lugar, nunca quise 20 buffers Dired abiertos. Gracias por sugerirlo (y crearlo)
Nispio
Los enlaces están muertos, obteniendo un 404: (
Zelphir Kaltstahl
1
@Zelphir: Gracias por el aviso. Debería estar bien ahora. (Emacs Wiki cambió sus URL en general, por lo que las publicaciones antiguas como esta tienen enlaces rotos).
Drew
8

Algo como esto (desplazarse un poco)?

(defun kill-dired-buffers ()
     (interactive)
     (mapc (lambda (buffer) 
           (when (eq 'dired-mode (buffer-local-value 'major-mode buffer)) 
             (kill-buffer buffer))) 
         (buffer-list)))
nicael
fuente
5

También puedes usar helm-mini:

  • Ejecutar M-x helm-mini.
  • Escriba en el indicador: *Di(palabra parcial para Dired, no es necesario ingresar más). A medida que escribe, los búferes se reducen gradualmente. Ahora, solo Diredqueda el búfer. Presione M-apara marcar todo.
  • Presione TABpara cambiar al menú de acciones y presione Kpara seleccionar la acción Kill buffer(s).
  • Presione RETpara ejecutar la acción.

Lo bueno helm-minies que puede reemplazar Emacs normales C-x b, por lo que no tendrá que usar dos combinaciones de teclas, una para cambiar el búfer y otra para un administrador de búfer real. helm-miniEs todo en uno. Lea más en mi guía helm-mini .

helm-minitambién puede emparejar difusamente el búfer y permitir abrir múltiples búferes marcando con C-SPCo M-a(significa M ark a ll). También puede reducir al búfer que contiene cierta cadena agregando @antes de un patrón, por ejemplo, @testsignifica que seleccionar solo los búferes contienen la cadena "prueba".

Tu Do
fuente
1

Intentaría algo como esto:

(require 'dash)

(defun my-kill-dired-buffers ()
  (interactive)
  (kill-some-buffers
   (-filter (lambda (buffer)
              (save-excursion
                (set-buffer buffer)
                (eq major-mode 'dired-mode)))
            (buffer-list))))
shosti
fuente
1
Creo que -filterrequiere dash.elde MELPA. Probablemente deberías enumerar eso como un requisito.
Vamsi
1

Lo que en realidad podría estar buscando es una forma de limpiar automáticamente los búferes no deseados, en cuyo caso debe verificar midnight.el, que es parte de Emacs.

Pero, en términos generales, ibufferhace que sea muy fácil operar con buffers a granel, como sugirió Francisco.

sanityinc
fuente
1

Si usa Icicles , puede usar C-x kpara matar todos los buffers Dired, o todos los buffers en cualquier modo dado.

Después de golpear C-x k, use C-x M +para mantener solo los búferes con un cierto modo. Presiona TABpara ver los modos y elige dired-mode. Luego, utiliza C-!para matar a todos los buffers con ese modo.

C-x k C-x M + dired-mode C-!
Dibujó
fuente