ibuffer: come creare automaticamente gruppi per progetto


9

Vorrei raggruppare la mia lista di buffer in ibuffer per progetto. Progetto è inteso nel senso proiettile della parola.

Non voglio cambiare la mia configurazione di Emacs ogni volta che sto lavorando a un nuovo progetto. C'è un modo per raggiungere questo obiettivo automaticamente?

Risposte:


5

Puoi definire gruppi di filtri per progetti noti usando qualcosa del genere:

;; 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)

Aggiornare

Da quando ho scritto originariamente questa risposta, @sanityinc ha creato una variante ibuffer-vcche crea gruppi di filtri in base alla radice del progetto proiettile. Puoi trovarlo ibuffer-projectilesu MELPA o su GitHub .


Questo è esattamente quello che stavo cercando, grazie!
ckruse,

Questo potrebbe essere unito in Projectile.
Ma Do,

Sì, dovrei inviare una richiesta pull per supportare i gruppi ibuffer. È venuto prima una volta ma non ho seguito. : D Darò un'occhiata più da vicino, potrebbe avere più senso fare qualcosa come ibuffer-vc e costruire i gruppi in base ai buffer correnti piuttosto che all'elenco dei progetti conosciuti. Ma una semplice opzione sarebbe quella di far proiettare al proiettile un gruppo di filtri denominato da progetti noti, come mostrato qui.
Glucas,

Come ha notato @Silex in un'altra risposta, qualcuno ha già aggiunto il supporto per ibuffer all'inizio di quest'anno: me lo ero perso. È un approccio diverso in quanto filtra ibuffer solo per il progetto corrente, ma sembra utile.
Glucas,

@glucas bene, ma penso che l'attuale comportamento di Ibuffer in Projectile sia ridondante projectile-switch-buffer. Ibuffer è pensato per la gestione di grandi quantità di buffer, ed è per questo che ha raggruppamenti e filtri. Mi piace l'approccio attuale che raggruppa in base all'elenco di progetti noti, rendendolo più coerente con Projectile.
Ma Do,

5

Progetto è inteso nel senso proiettile della parola.

Utilizzando Projectile, c'è un modo per passare a un buffer all'interno di un progetto specifico C-c p b

Posso suggerire ibuffer-vc ? Un modo per raggruppare i buffer in base alla directory principale vc principale.


ibuffer-vcè abbastanza vicino a quello che sto cercando. Ma sovrascrive il mio ibuffer-saved-filter-groups; c'è un modo per creare i gruppi VC in aggiunta ai miei gruppi standard?
ckruse,

@ckruse non lo so; fammi scavare per favore.
Nsukami _

Questo potrebbe aiutare: github.com/reinh/dotemacs/blob/master/conf/init.org#ido . In particolare l'inizio della parte nox/ibuffer-apply-filter-groups.
tirocinio

3

Usando il proiettile, puoi semplicemente digitare C-c p I(proiettile-ibuffer) e solo i buffer per quel progetto verranno visualizzati in ibuffer.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.