ibuffer: como criar grupos automaticamente por projeto


9

Gostaria de agrupar minha lista de buffers no ibuffer por projeto. Projeto é entendido no sentido Projétil da palavra.

Não quero alterar minha configuração do Emacs toda vez que estou trabalhando em um novo projeto. Existe uma maneira de conseguir isso automaticamente?

Respostas:


5

Você pode definir grupos de filtros para projetos conhecidos usando algo como isto:

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

Atualizar

Desde que escrevi essa resposta, o @sanityinc criou uma variante ibuffer-vcque cria grupos de filtros por raiz do projeto de projétil. Você pode encontrar ibuffer-projectileno MELPA ou no GitHub .


Isso é exatamente o que eu estava procurando, obrigado!
ckruse

Isso pode ser mesclado no Projectile.
Tu Do

Sim, devo enviar uma solicitação pull para apoiar grupos de ibuffer. Surgiu uma vez antes, mas não o acompanhei. : D Examinando mais de perto, pode fazer mais sentido fazer algo como ibuffer-vc e criar os grupos com base nos buffers atuais, e não na lista de projetos conhecidos. Mas uma opção simples seria fazer o projétil definir um grupo de filtros nomeado a partir de projetos conhecidos, como mostrado aqui.
glucas

Como o @Silex observou em outra resposta, alguém já adicionou o suporte ao ibuffer no início deste ano - eu tinha perdido isso. É uma abordagem diferente, pois filtra o ibuffer apenas para o projeto atual, mas parece útil.
glucas

@ Lucas bem, mas acho que os comportamentos atuais do Ibuffer no Projectile são redundantes projectile-switch-buffer. O Ibuffer é destinado ao gerenciamento de grande quantidade de buffers, e é por isso que possui agrupamento e filtragem. Gosto da abordagem atual que agrupa com base na lista de projetos conhecidos, tornando-a mais consistente com o Projectile.
Tu Do

5

Projeto é entendido no sentido Projétil da palavra.

Usando o Projectile, existe uma maneira de mudar para um buffer dentro de um projeto específico C-c p b

Posso sugerir ibuffer-vc ? Uma maneira de agrupar seus buffers pelo diretório raiz vc do pai.


ibuffer-vcestá bem perto do que estou procurando. Mas substitui o meu ibuffer-saved-filter-groups; existe uma maneira de criar os grupos de VCs adicionalmente aos meus grupos padrão?
ckruse

@ckruse não sei; deixe-me cavar por favor.
Nsukami _

Isso pode ajudar: github.com/reinh/dotemacs/blob/master/conf/init.org#ido . Especificamente a parte inicial nox/ibuffer-apply-filter-groups.
tirocinium

3

Usando o projétil, você pode simplesmente digitar C-c p I(projectile-ibuffer) e apenas os buffers desse projeto aparecerão no ibuffer.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.