ibuffer: So erstellen Sie automatisch Gruppen pro Projekt


9

Ich möchte meine Pufferliste in ibuffer nach Projekt gruppieren. Projekt ist im projektilen Sinne des Wortes gemeint.

Ich möchte meine Emacs-Konfiguration nicht jedes Mal ändern, wenn ich an einem neuen Projekt arbeite. Gibt es eine Möglichkeit, dies automatisch zu erreichen?

Antworten:


5

Sie können Filtergruppen für bekannte Projekte folgendermaßen definieren:

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

Aktualisieren

Seit ich diese Antwort ursprünglich geschrieben habe, hat @sanityinc eine Variante ibuffer-vcerstellt, die Filtergruppen nach Projektilprojektstamm erstellt. Sie finden ibuffer-projectileauf MELPA oder auf GitHub .


Genau das habe ich gesucht, danke!
ckruse

Dies könnte in Projectile zusammengeführt werden.
Tu Do

Ja, ich sollte eine Pull-Anfrage senden, um ibuffer-Gruppen zu unterstützen. Es ist schon einmal aufgetaucht, aber ich bin nicht weitergekommen. : D Ich werde genauer hinschauen, es könnte sinnvoller sein, etwas wie ibuffer-vc zu tun und die Gruppen basierend auf aktuellen Puffern anstatt auf der bekannten Projektliste zu erstellen. Eine einfache Option wäre jedoch, dass das Projektil eine benannte Filtergruppe aus bekannten Projekten definiert, wie hier gezeigt.
Glucas

Wie @Silex in einer anderen Antwort feststellte, hat bereits Anfang dieses Jahres jemand die ibuffer-Unterstützung hinzugefügt - das hatte ich verpasst. Es ist insofern ein anderer Ansatz, als es ibuffer nur für das aktuelle Projekt filtert, aber praktisch aussieht.
Glucas

@glucas gut, aber ich denke, das aktuelle Ibuffer-Verhalten in Projectile ist überflüssig mit projectile-switch-buffer. Ibuffer ist für die Verwaltung einer großen Anzahl von Puffern gedacht und verfügt daher über Gruppierung und Filterung. Ich mag den aktuellen Ansatz, den es basierend auf bekannten Projektlisten gruppiert, um es konsistenter mit Projectile zu machen.
Tu Do

5

Projekt ist im projektilen Sinne des Wortes gemeint.

Mit Projectile können Sie zu einem Puffer innerhalb eines bestimmten Projekts wechseln C-c p b

Darf ich ibuffer-vc vorschlagen ? Eine Möglichkeit, Ihre Puffer nach ihrem übergeordneten VC-Stammverzeichnis zu gruppieren.


ibuffer-vcist ziemlich nah an dem, wonach ich suche. Aber es überschreibt meine ibuffer-saved-filter-groups; Gibt es eine Möglichkeit, die VC-Gruppen zusätzlich zu meinen Standardgruppen zu erstellen?
ckruse

@ckruse weiß nicht; lass mich bitte graben.
Nsukami _

Dies könnte helfen: github.com/reinh/dotemacs/blob/master/conf/init.org#ido . Speziell der Teilanfang nox/ibuffer-apply-filter-groups.
Tirocinium

3

Mit projectile können Sie einfach C-c p I(projectile-ibuffer) eingeben und nur die Puffer für dieses Projekt werden in ibuffer angezeigt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.