Como posso fechar todos os buffers no Emacs?

1

Muitas vezes deixo o Emacs (na verdade, o Aquamacs) aberto e acabo com muitos buffers sobrecarregando meu auto-completar. Eu gostaria de poder fechar todos eles e começar de novo. Agora eu parei e reabrei o Emacs, mas isso parece errado.

Existe uma maneira de fechar todos os buffers no Emacs?

Este é o Emacs 24.4 / Aquamacs 3.2.

    
por Schwern 30.03.2015 / 21:24

2 respostas

3

A seguinte função foi escrita pelo nome de usuário Starkey no stackoverflow em uma pergunta relacionada: link

(defun close-all-buffers ()
(interactive)
  (mapc 'kill-buffer (buffer-list)))

EDIT : Como sugerido por @Drew no comentário abaixo, geralmente é uma boa ideia manter buffers internos que tenham um espaço principal em seus nomes. O doc-string fornece uma explicação de como esta função funciona. O atalho de teclado da tecla F5 é apenas um exemplo para testar a função em conjunto com um argumento universal.

  
(defun custom-kill-buffer-fn (&optional arg)
"When called with a prefix argument -- i.e., C-u -- kill all interesting
buffers -- i.e., all buffers without a leading space in the buffer-name.
When called without a prefix argument, kill just the current buffer
-- i.e., interesting or uninteresting."
(interactive "P")
  (cond
    ((and (consp arg) (equal arg '(4)))
      (mapc
        (lambda (x)
          (let ((name (buffer-name x)))
            (unless (eq ?\s (aref name 0))
              (kill-buffer x))))
        (buffer-list)))
    (t
      (kill-buffer (current-buffer)))))

(global-set-key [f5] 'custom-kill-buffer-fn)
    
por 31.03.2015 / 02:50
2

Parece-me que o seu principal problema são muitos buffers antigos, que você provavelmente não visitou por algum tempo.

No emacs há um comando clean-buffer-list . Por padrão, ele limpa os buffers que não foram acessados por 3 dias (ou 1 hora, no caso de alguns buffers especiais). Claro, você pode personalizar o tempo. Também dê uma olhada em midnight-mode , que faz isso automaticamente em um determinado período de tempo.

Se você não quiser matar todos os buffers, exceto o que você está usando atualmente:

(defun kill-other-buffers ()
  "Kill all other buffers."
  (interactive)
  (mapc 'kill-buffer (delq (current-buffer) (buffer-list))))
    
por 22.04.2015 / 21:38