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.