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?
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?
Respuestas:
Podrías hacer lo siguiente:
M-x ibuffer
* / para marcar buffers en modo directo.
D para eliminarlos
C-x C-ba ibuffer.
t( dired-toggle-marks) para marcar todo (si ninguno se marcó previamente).
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.
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:

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

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.
ibufferdespués de evaluar su código. Tuve que golpear / R(obligado ibuffer-switch-to-saved-filter-groups) para obtener los grupos.
(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
¿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:
Cargar biblioteca Dired + ( dired+.el):
(require 'dired+)
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.
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)))
También puedes usar helm-mini:
M-x helm-mini.*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.TABpara cambiar al menú de acciones y presione Kpara seleccionar la acción Kill buffer(s).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".
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))))
-filterrequiere dash.elde MELPA. Probablemente deberías enumerar eso como un requisito.
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.
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-!