ibuffer: cara membuat grup per proyek secara otomatis

9

Saya ingin mengelompokkan daftar buffer saya di ibuffer berdasarkan proyek. Proyek dimaksud dalam arti kata proyektil.

Saya tidak ingin mengubah konfigurasi Emacs saya setiap kali saya mengerjakan proyek baru. Apakah ada cara untuk mencapai ini secara otomatis?

ckruse
sumber

Jawaban:

5

Anda dapat menentukan grup filter untuk proyek yang diketahui menggunakan sesuatu seperti ini:

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

Memperbarui

Karena saya awalnya menulis jawaban ini, @sanityinc telah membuat varian ibuffer-vcyang membuat grup filter dengan projectile project root. Anda dapat menemukannya ibuffer-projectiledi MELPA atau di GitHub .

glukas
sumber
Ini tepat apa yang saya cari, terima kasih!
ckruse
Ini dapat digabungkan menjadi Proyektil.
Tu Do
Ya, saya harus mengajukan permintaan tarik untuk mendukung kelompok ibuffer. Itu muncul sekali sebelumnya tetapi saya tidak menindaklanjutinya. : D Saya akan melihat lebih dekat, mungkin lebih masuk akal untuk melakukan sesuatu seperti ibuffer-vc dan membangun grup berdasarkan buffer saat ini daripada daftar proyek yang diketahui. Tetapi opsi sederhana adalah membuat proyektil mendefinisikan grup filter bernama dari proyek yang dikenal seperti yang ditunjukkan di sini.
glukas
Seperti @Silex catat dalam jawaban lain, seseorang sudah menambahkan dukungan ibuffer awal tahun ini - saya telah melewatkan itu. Ini pendekatan yang berbeda karena hanya menyaring ibuffer untuk proyek saat ini saja, tetapi terlihat praktis.
glukas
@glucas dengan baik, tetapi saya pikir perilaku Ibuffer saat ini di Projectile berlebihan projectile-switch-buffer. Ibuffer dimaksudkan untuk mengelola buffer dalam jumlah besar, dan itulah sebabnya ia memiliki pengelompokan dan penyaringan. Saya suka pendekatan saat ini yang dikelompokkan berdasarkan daftar proyek yang dikenal, membuatnya lebih konsisten dengan Proyektil.
Tu Do
5

Proyek dimaksud dalam arti kata proyektil.

Menggunakan Proyektil, ada cara untuk beralih ke buffer di dalam proyek tertentu C-c p b

Bolehkah saya menyarankan ibuffer-vc ? Cara untuk mengelompokkan buffer Anda berdasarkan direktori root vc induknya.

Nsukami _
sumber
ibuffer-vccukup dekat dengan apa yang saya cari. Tapi itu menimpa milikku ibuffer-saved-filter-groups; apakah ada cara untuk membuat grup VC sebagai tambahan ke grup standar saya?
ckruse
@ruse tidak tahu; biarkan aku menggali.
Nsukami _
Ini mungkin membantu: github.com/reinh/dotemacs/blob/master/conf/init.org#ido . Khususnya bagian awal nox/ibuffer-apply-filter-groups.
tirocinium
3

Dengan menggunakan proyektil, Anda cukup mengetik C-c p I(proyektil-ibuffer) dan hanya buffer untuk proyek yang akan muncul di ibuffer.

Silex
sumber