Chỉ bật chế độ phóng cho các tệp trong các dự án thực tế


8

Projectile khá tuyệt, nhưng tôi cảm thấy khó khăn khi chỉ bật nó ở những nơi có hiệu quả.

Theo tôi hiểu, hai lựa chọn tiêu chuẩn là bật thủ công, như trong các móc chế độ chính hoặc để bật nó trên toàn cầu projectile-global-mode. Tôi thấy cái trước không đủ rộng; Tôi muốn có thể truy cập các lệnh phóng trong khi bỏ qua bất kỳ tệp nào trong một dự án, bất kể loại của nó. Nhưng bật chế độ trên toàn cầu là quá rộng; nó được bật ngay cả khi quý khách đến thăm như vậy rõ ràng là thư mục phi dự án như là thư mục nhà của tôi, /tmp, /etcvv

Có một cách tiêu chuẩn để kích hoạt projectile-modechỉ khi đến thăm một tập tin mà cuộc sống trong một dự án thực tế, như có thể được xác định bằng cách, ví dụ, kiểm tra sự tồn tại của một .git, .svn, vv, thư mục trong một số thư mục tổ tiên của tập tin hiện tại?


Kiểm tra sự tồn tại của .git, .svn... nên là mặc định. Có lẽ bạn đã projectile-require-project-rootthiết lập để nil.
Từ Đô

Tôi chỉ kiểm tra, và giá trị của nó là t. Nhưng chế độ vẫn được kích hoạt /etcchẳng hạn.
Sean

1
Phiên bản Projectile của bạn là gì? Khi bạn chạy projectile-find-filestrên các thư mục phi dự án như vậy, Projectile chỉ cần cung cấp cho bạn một thông báo "Bạn không có dự án". Bạn có chắc bạn chạy đúng lệnh?
Từ Đô

2
Ah, OK, tôi thấy điều đó. Nhưng tôi vẫn thấy Projectile[etc]trong dòng chế độ khi tôi mở /etc. Nó chiếm bất động sản dòng chế độ có giá trị, và tôi chỉ muốn không kích hoạt chế độ này trong các thư mục phi dự án.
Sean

Câu trả lời:


11

Vì vậy, đó là về modeline. Bạn có thể thiết lập projectile-mode-lineđể kiểm tra nếu bạn đang ở trong một dự án gốc; nếu vậy, hiển thị trong modeline, nếu không thì không hiển thị gì:

(setq projectile-mode-line
      '(:eval (if (projectile-project-p)
                  (format " Projectile[%s]"
                          (projectile-project-name))
                "")))

4
Sự thay đổi đó nên ở chính nó.
abo-abo

Điều này chắc chắn hữu ích, nhưng chế độ vẫn sẽ hoạt động, phải không? Lý tưởng nhất là chế độ sẽ không được kích hoạt trong những trường hợp như vậy.
Sean

2
@Sean để làm gì? Có một lý do đó là một chế độ nhỏ toàn cầu. Có điều gì cản trở nếu chế độ toàn cầu đang hoạt động, ngoài mô hình không? Khi chế độ toàn cầu được kích hoạt, tất cả những gì nó làm là cung cấp cho bạn các ràng buộc khóa Projectile.
Từ Đô

2
@ abo-abo Tôi cũng nghĩ nó nên hoạt động như thế này hơn là hiển thị hiện tại default-directory. Tôi sẽ làm một PR.
Từ Đô

Tôi đặt nó trong tệp init của mình và cuối cùng nhận thấy rất nhiều lỗi trong *Messages*bộ đệm, vì projectile-project-rootsẽ phát sinh một ngoại lệ nếu được gọi từ một thư mục không phải là dự án. Vì vậy, cuộc gọi chức năng đó cần phải được gói trong một condition-case, và cũng projectile-require-project-rootcần phải được ràng buộc t.
Sean
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.