ibuffer: cách tự động tạo nhóm cho mỗi dự án


9

Tôi muốn nhóm danh sách bộ đệm của tôi trong ibuffer theo dự án. Project có nghĩa theo nghĩa Projectile của từ này.

Tôi không muốn thay đổi cấu hình Emacs của mình mỗi khi tôi làm việc trong một dự án mới. Có cách nào để đạt được điều này tự động?

Câu trả lời:


5

Bạn có thể xác định các nhóm bộ lọc cho các dự án đã biết bằng cách sử dụng một cái gì đó như thế này:

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

Cập nhật

Vì ban đầu tôi đã viết câu trả lời này, @sanityinc đã tạo ra một biến thể ibuffer-vctạo các nhóm bộ lọc theo gốc dự án. Bạn có thể tìm thấy ibuffer-projectiletrên MELPA hoặc trên GitHub .


Đây là những gì tôi đang tìm kiếm, cảm ơn!
ckruse

Điều này có thể được sáp nhập vào Projectile.
Từ Đô

Có, tôi nên gửi yêu cầu kéo để hỗ trợ các nhóm ibuffer. Nó đã xuất hiện một lần trước đây nhưng tôi đã không theo dõi. : D Tôi sẽ xem xét kỹ hơn, có thể có ý nghĩa hơn khi làm một cái gì đó như ibuffer-vc và xây dựng các nhóm dựa trên bộ đệm hiện tại thay vì danh sách dự án đã biết. Nhưng một tùy chọn đơn giản sẽ là để dự án xác định một nhóm bộ lọc được đặt tên từ các dự án đã biết như được hiển thị ở đây.
glucas

Như @Silex đã lưu ý trong một câu trả lời khác, ai đó đã thêm hỗ trợ ibuffer vào đầu năm nay - tôi đã bỏ lỡ điều đó. Đó là một cách tiếp cận khác ở chỗ nó chỉ lọc ibuffer cho dự án hiện tại, nhưng trông có vẻ tiện dụng.
glucas

@glucas tốt nhưng tôi nghĩ rằng các hành vi Ibuffer hiện tại trong Projectile là dư thừa với projectile-switch-buffer. Ibuffer có nghĩa là để quản lý số lượng lớn bộ đệm, và đó là lý do tại sao nó có nhóm và lọc. Tôi thích cách tiếp cận hiện tại mà nhóm dựa trên danh sách dự án đã biết, làm cho nó phù hợp hơn với Projectile.
Từ Đô

5

Project có nghĩa theo nghĩa Projectile của từ này.

Sử dụng Projectile, có một cách để chuyển sang bộ đệm trong một dự án cụ thể C-c p b

Tôi có thể đề nghị ibuffer-vc không? Một cách để nhóm bộ đệm của bạn theo thư mục gốc vc gốc của chúng.


ibuffer-vclà khá gần với những gì tôi đang tìm kiếm. Nhưng nó ghi đè lên tôi ibuffer-saved-filter-groups; Có cách nào để tạo các nhóm VC bổ sung cho các nhóm tiêu chuẩn của tôi không?
ckruse

@ckruse không biết; hãy để tôi đào
Nsukami _

Điều này có thể giúp: github.com/reinh/dotemacs/blob/master/conf/init.org#ido . Cụ thể là phần bắt đầu nox/ibuffer-apply-filter-groups.
tirocinium

3

Sử dụng đạn, bạn có thể chỉ cần gõ C-c p I(projectile-ibuffer) và chỉ các bộ đệm cho dự án đó sẽ hiển thị trong ibuffer.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.