Às vezes, minha lista de buffers tem mais de 10 janelas direcionadas e eu acabo usando buffer-menupara marcar e matar manualmente todas elas. Existe uma maneira mais rápida de fechar todas as janelas dired abertas?
Às vezes, minha lista de buffers tem mais de 10 janelas direcionadas e eu acabo usando buffer-menupara marcar e matar manualmente todas elas. Existe uma maneira mais rápida de fechar todas as janelas dired abertas?
Respostas:
Você pode fazer o seguinte:
M-x ibuffer
* / para marcar buffers no modo direcionado.
D para excluí-los.
C-x C-bpara ibuffer.
t( dired-toggle-marks) para marcar todos (se nenhum foi marcado anteriormente).
dired-toggle-marksé o nome do comando dired . Pressionar ttambém alternará todas as marcas no ibuffer, mas os buffers não direcionados geralmente superam os buffers direcionados, portanto, alternar geralmente não faz sentido nesse contexto.
Em vez de adicionar outra função para eliminar todos os diredbuffers, sugiro que você aproveite os grupos de filtros ibuffer, pois permite agrupar o buffer por várias condições.
Aqui está um exemplo para definir 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 . "\*.*\*"))
)))
Em seguida, C-x C-babra a ibufferjanela, você pode ver algo como isto:

Mova o cursor para [ Dired ](com M-p, M-n) e pressione dpara marcar como excluir

depois pressione xpara executar.
Prefiro assim, porque não preciso pensar em como vincular minha chave à nova função, e meus buffers estão melhor organizados.
ibufferapós avaliar seu código. Eu tive que bater / R(obrigado ibuffer-switch-to-saved-filter-groups) para obter os grupos.
(ibuffer-switch-to-saved-filter-groups "Default")Você pode adicionar esta linha de código em ibuffer gancho, nome grupos de filtro deve ser mudado se não éDefault
Você tem muitos buffers Dired porque queria todos eles em um ponto? IOW, você queria criar cada um deles como buffers separados?
Caso contrário, a solução é simples: diga ao Dired para reutilizar um buffer Dired existente quando você pressionar RETum nome de diretório para abri-lo no Dired.
Aqui está como fazer isso:
Carregar biblioteca Dired + ( dired+.el):
(require 'dired+)
Diga ao Dired para reutilizar os buffers Dired:
(diredp-toggle-find-file-reuse-dir 1)
O efeito é que, quando você pressiona RET(ou clica com o mouse) em um diretório no Dired, find-alternate-fileé usado, portanto, o buffer Dired original é substituído (excluído) pelo novo.
Você pode alternar esse comportamento a qualquer momento, usando C-M-R(aka C-M-S-r) em Dired.
Algo assim (role um pouco)?
(defun kill-dired-buffers ()
(interactive)
(mapc (lambda (buffer)
(when (eq 'dired-mode (buffer-local-value 'major-mode buffer))
(kill-buffer buffer)))
(buffer-list)))
Você também pode usar helm-mini:
M-x helm-mini.*Di(palavra parcial para Dired, não é necessário inserir mais). Conforme você digita, os buffers são reduzidos gradualmente. Agora, resta apenas o Diredbuffer. Pressione M-apara marcar tudo.TABpara alternar para o menu de ação e pressione Kpara selecionar a ação Kill buffer(s).RETpara executar a ação.A coisa boa helm-minié que ele pode substituir o Emacs normal C-x b, para que você não precise usar duas ligações de teclas, uma para alternar o buffer e outra para um gerenciador de buffer real. helm-minié tudo em um. Leia mais no meu mini-guia de leme .
helm-minitambém pode conter buffer de correspondência difusa e permitir a abertura de vários buffers marcando com C-SPCou M-a(defina M ark a ll). Você também pode restringir para que o buffer contenha determinada sequência de caracteres anexando @antes de um padrão, por exemplo, @testsignifica selecionar apenas buffers que contenham a sequência "test".
Eu tentaria algo assim:
(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))))
-filterexige dash.eldo MELPA. Você provavelmente deve listar isso como um requisito.
Se você usar Sincelos , poderá C-x kmatar todos os buffers Dired - ou todos os buffers em qualquer modo.
Após bater C-x k, use C-x M +para manter apenas os buffers com um determinado modo. Clique TABpara ver os modos e escolha dired-mode. Em seguida, use C-!para matar todos os buffers com esse modo.
C-x k C-x M + dired-mode C-!