ibuffer: comment créer automatiquement des groupes par projet

9

Je voudrais regrouper ma liste de tampons dans ibuffer par projet. Projet est entendu dans le sens Projectile du terme.

Je ne veux pas changer ma configuration Emacs chaque fois que je travaille sur un nouveau projet. Existe-t-il un moyen d'y parvenir automatiquement?

ckruse
la source

Réponses:

5

Vous pouvez définir des groupes de filtres pour des projets connus en utilisant quelque chose comme ceci:

;; Define ibuffer filter groups for each known project
(defun my/define-projectile-filter-groups ()
  (when (boundp 'projectile-known-projects)
    (setq my/project-filter-groups
        (mapcar
         (lambda (it)
           (let ((name (file-name-nondirectory (directory-file-name it))))
             `(,name (filename . ,(expand-file-name it)))))
         projectile-known-projects))))

;; Set up default ibuffer filter groups
(setq ibuffer-saved-filter-groups
      (list
       (cons "default"
             (append
              (my/define-projectile-filter-groups)
              ;; ... whatever other groups you want, e.g.
              '(("dired" (mode . dired-mode))
                ("erc" (mode . erc-mode)))
              ))))

;; Enable default groups by default
(add-hook 'ibuffer-mode-hook
              (lambda ()
                (ibuffer-switch-to-saved-filter-groups "default")))

;; You probably don't want to see empty project groups
(setq ibuffer-show-empty-filter-groups nil)

Mise à jour

Depuis que j'ai écrit cette réponse à l'origine, @sanityinc a créé une variante ibuffer-vcqui crée des groupes de filtres par racine de projet de projectile. Vous pouvez le trouver ibuffer-projectilesur MELPA ou sur GitHub .

glucas
la source
C'est exactement ce que je cherchais, merci!
ckruse
Cela pourrait être fusionné dans Projectile.
Tu Do
Oui, je dois soumettre une demande d'extraction pour soutenir les groupes ibuffer. Il est venu une fois auparavant mais je n'ai pas suivi. : D Je vais y regarder de plus près, il pourrait être plus logique de faire quelque chose comme ibuffer-vc et de construire les groupes en fonction des tampons actuels plutôt que de la liste de projets connue. Mais une option simple serait que le projectile définisse un groupe de filtres nommé à partir de projets connus, comme indiqué ici.
glucas
Comme @Silex l'a noté dans une autre réponse, quelqu'un a déjà ajouté le support ibuffer plus tôt cette année - cela m'avait manqué. C'est une approche différente dans la mesure où elle filtre ibuffer uniquement pour le projet en cours, mais semble pratique.
glucas
@glucas bien mais je pense que les comportements actuels d'Ibuffer dans Projectile sont redondants projectile-switch-buffer. Ibuffer est destiné à gérer une grande quantité de tampons, et c'est pourquoi il a un regroupement et un filtrage. J'aime l'approche actuelle qu'elle regroupe en fonction de la liste des projets connus, ce qui la rend plus cohérente avec Projectile.
Tu Do
5

Projet est entendu dans le sens Projectile du terme.

En utilisant Projectile, il existe un moyen de basculer vers un tampon dans un projet spécifique C-c p b

Puis-je suggérer ibuffer-vc ? Un moyen de regrouper vos tampons par leur répertoire racine vc parent.

Nsukami _
la source
ibuffer-vcest assez proche de ce que je recherche. Mais il écrase mon ibuffer-saved-filter-groups; existe-t-il un moyen de créer des groupes VC en plus de mes groupes standard?
ckruse
@ckruse ne sait pas; laissez-moi creuser s'il vous plaît.
Nsukami _
Cela pourrait aider: github.com/reinh/dotemacs/blob/master/conf/init.org#ido . Plus précisément la partie commençant nox/ibuffer-apply-filter-groups.
tirocinium
3

En utilisant projectile, vous pouvez simplement taper C-c p I(projectile-ibuffer) et seuls les tampons pour ce projet apparaîtront dans ibuffer.

Silex
la source