Cách tốt để có một hook chạy cho mọi tệp trong một thư mục đã cho là gì?


7

Cách tốt để gán một chức năng để chạy khi tôi mở bất kỳ tệp nào trong một thư mục được chỉ định là gì? Giống như một cái móc nhưng dựa trên vị trí của tệp chứ không phải là chế độ chính.

Sẽ thật tuyệt nếu tôi có thể kích hoạt điều này bằng cách có một tệp đặc biệt trong thư mục, nhưng thêm hook trong tệp cấu hình trung tâm của tôi cũng sẽ tốt.

Câu trả lời:


7

find-file-hookvà trong chức năng hook của bạn, kiểm tra xem tệp ứng cử viên có trong thư mục đã cho không.


Đúng, có vẻ như nó sẽ hoạt động. Tôi không thể tìm thấy cái móc cụ thể đó thông qua Google.
Tikhon Jelvis

2
Hỏi Emacs , không phải Google. M-x apropos-variable RET file hook.
vẽ

6

Điều này nghe có vẻ như các biến cục bộ thư mục là gì. Chỉ cần tạo một .dir-locals.eltệp trong thư mục với các cài đặt bạn muốn và mọi tệp sẽ kế thừa các cài đặt đó.


Tùy chọn này có ưu điểm là không mã hóa cài đặt và các thư mục có liên quan trong tệp cấu hình chính.
T. Verron

1
;;; .dir-locals.el

((nil
  (eval add-hook 'find-file-hook (lambda ()
                                   (message "my find-file hook called...")) nil t)))

Điều nilnày có nghĩa là điều này áp dụng cho tất cả các tệp trong thư mục dưới đây .dir-locals.el.

Việc tthông qua để add-hooklàm cho find-file-hookbộ đệm cục bộ. Do đó hook chỉ chạy cho tập tin này.

dir-localschạy trước find-file-hook, vì vậy toàn bộ hoạt động.


2
Chào mừng đến với mx.sx! Ý tưởng này rất hay và tôi nghĩ câu trả lời của @erikstokes sẽ có lợi từ một ví dụ, nhưng có vẻ như ví dụ của bạn không chính xác: sau khi một tệp được mở trong thư mục, hàm sẽ được thêm vào find-file-hookvà được thực thi cho tất cả các tệp được mở sau đó, phải không?
T. Verron

Tại sao không chạy mã trực tiếp?
trị
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.