Fermer tous les tampons dirigés

23

Parfois, ma liste de tampons a plus de 10 fenêtres dirigées, et je finis par les buffer-menumarquer et les tuer manuellement. Existe-t-il un moyen plus rapide de fermer toutes les fenêtres ouvertes?

nispio
la source
J'ai accepté la réponse qui répond le plus directement à la question. Cependant, j'ai depuis commencé à appliquer une once de prévention à la place: emacs.stackexchange.com/a/1041/93
nispio

Réponses:

32

Vous pouvez effectuer les opérations suivantes:

M-x ibuffer

* / pour marquer les tampons en mode Dired.

D pour les supprimer.

Francisco Dibar
la source
1
Je n'avais jamais entendu parler d'ibuffer auparavant. Je vais certainement être cartographie C-x C-bà ibuffer.
nispio
Vous pouvez également appuyer sur t( dired-toggle-marks) pour tout marquer (si aucun n'a été précédemment marqué).
caisah
@caisah dired-toggle-marksest le nom de la commande dired . Appuyez sur tpour basculer également toutes les marques dans ibuffer, mais les tampons non-dired sont généralement plus nombreux que les tampons dired, donc le basculement n'a pas souvent de sens dans ce contexte.
nispio
@nispio Vous avez raison. Je ne sais pas pourquoi, mais je pensais que tous les tampons étaient dirigés ...
caisah
1
Remarque: cela ne fonctionne pas correctement lorsqu'il n'y a pas de tampons dirigés, car le D ne s'appliquera pas aux tampons dirigés, mais au premier tampon de la liste.
daniel kullmann
10

Au lieu d'ajouter une autre fonction pour tuer tous les diredtampons, je vous suggère de profiter des groupes de filtres ibuffer, cela vous permet de grouper le tampon par plusieurs conditions.

Voici un exemple pour définir des groupes de filtres:

(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 . "\*.*\*"))
                 )))

Ensuite, C-x C-bouvrez la ibufferfenêtre, vous pouvez voir quelque chose comme ceci:

Exemple 1

Déplacez le curseur sur [ Dired ](avec M-p, M-n), puis appuyez sur dpour marquer comme supprimer

exemple2

puis appuyez sur xpour exécuter.

Je préfère cette façon parce que je n'ai pas besoin de penser à la façon dont je dois lier ma clé à la nouvelle fonction, et mes tampons sont mieux organisés.

Rangi Lin
la source
Les groupes de filtres ne s'affichaient pas pour moi lors de mon premier lancement ibufferaprès avoir évalué votre code. J'ai dû frapper / R(lié à ibuffer-switch-to-saved-filter-groups) pour obtenir les groupes.
itsjeyd
(ibuffer-switch-to-saved-filter-groups "Default")Vous pouvez ajouter cette ligne de code dans le crochet ibuffer, le nom des groupes de filtres doit être changé s'il ne l'est pasDefault
Rangi Lin
1
Oui, c'est ce que j'ai fini par faire. Je ne connaissais pas les groupes de filtres avant de lire votre réponse, merci de les avoir mentionnés;)
itsjeyd
10

Avez-vous de nombreux tampons Dired parce que vous les vouliez tous à un moment donné? OIEau, avez - vous envie de créer chacun d'eux comme des tampons séparés?

Sinon, la solution est simple: dites à Dired de réutiliser un tampon Dired existant lorsque vous frappez RETun nom de répertoire pour l'ouvrir dans Dired.

Voici comment procéder:

  1. Charger la bibliothèque Dired + ( dired+.el):

    (require 'dired+)
    
  2. Dites à Dired de réutiliser les tampons de Dired:

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

L'effet est que lorsque vous frappez RET(ou cliquez sur la souris) sur un répertoire dans Dired, find-alternate-fileest utilisé, de sorte que le tampon Dired d'origine est remplacé (supprimé) par le nouveau.

Vous pouvez basculer ce comportement à tout moment, en utilisant C-M-R(aka C-M-S-r) dans Dired.

A dessiné
la source
C'est la solution sur laquelle je me suis installé maintenant. Je n'ai jamais voulu 20 tampons Dired ouverts en premier lieu. Merci de l'avoir suggéré (et de l'avoir créé)
nispio
Les liens sont morts, obtenant un 404: (
Zelphir Kaltstahl
1
@Zelphir: Merci pour l'avertissement. Ça devrait aller maintenant. (Emacs Wiki a changé ses URL en général, donc les anciens messages comme celui-ci ont des liens cassés.)
Drew
8

Quelque chose comme ça (faites défiler un peu)?

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

Vous pouvez également utiliser helm-mini:

  • Courez M-x helm-mini.
  • Tapez dans l'invite: *Di(mot partiel pour Dired, pas besoin d'entrer plus). Au fur et à mesure que vous tapez, les tampons sont rétrécis progressivement. Maintenant, il ne Diredreste que du tampon. Appuyez sur M-apour tout marquer.
  • Appuyez sur TABpour passer au menu d'action et appuyez sur Kpour sélectionner l' action Kill buffer(s).
  • Appuyez sur RETpour exécuter l'action.

La bonne chose avec helm-miniest qu'il peut remplacer Emacs normal C-x b, vous n'aurez donc pas à utiliser deux raccourcis clavier, un pour changer de tampon et un pour un gestionnaire de tampon réel. helm-miniest tout-en-un. En savoir plus dans mon mini-guide .

helm-minipeut également créer un tampon de correspondance floue et permettre d'ouvrir plusieurs tampons en marquant avec C-SPCou M-a(signifie M ark a ll). Vous pouvez également affiner pour tamponner contenir certaines chaînes en ajoutant @avant un modèle, par exemple, @testsignifie que seuls les tampons contiennent la chaîne "test".

Tu Do
la source
1

J'essaierais quelque chose comme ça:

(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
la source
1
Je crois que cela -filterrequiert dash.elde MELPA. Vous devriez probablement mentionner cela comme une exigence.
Vamsi
1

Ce que vous cherchez peut-être est un moyen de nettoyer automatiquement les tampons indésirables, auquel cas vous devriez vérifier midnight.el, qui fait partie d'Emacs.

Mais d'une manière générale, ibufferil est très facile d'opérer sur des tampons en vrac, comme l'a suggéré Francisco.

sanityinc
la source
1

Si vous utilisez des glaçons , vous pouvez utiliser C-x kpour tuer tous les tampons fatigués - ou tous les tampons dans un mode donné.

Après avoir frappé C-x k, utilisez C-x M +pour conserver uniquement les tampons avec un certain mode. Appuyez TABpour voir les modes et choisissez dired-mode. Ensuite, utilisez C-!pour tuer tous les tampons avec ce mode.

C-x k C-x M + dired-mode C-!
A dessiné
la source