Danh sách trắng của .dir-locals.el


7

Là nó có thể tải .dir-locals.eltập tin mà không nhắc tôi, nhưng cũng không thêm giá trị Tôi cấu hình trong tập tin đó để tôi init.elcustom-set-variables? Lý do tôi muốn đó là tập tin đó chứa một số dữ liệu nhạy cảm và tôi có thói quen chia sẻ init.el, vì vậy tôi muốn nó chỉ tải. Tôi hiểu rằng nói chung .dir-locals.elcó thể chứa mã không phù hợp mà tôi không nên đánh giá. Vì vậy, tôi đã nghĩ rằng có lẽ có một cái gì đó giống như danh sách trắng .dir-locals.el.

Cập nhật

Nói chung, những gì tôi muốn đạt được là có tệp cấu hình emacs rộng của dự án được tải mà không gặp thêm rắc rối nào. Vì vậy, nếu điều đó là không thể .dir-locals.el- tôi sẵn sàng cho các giải pháp khác: D

Câu trả lời:


5

Tôi đã thêm nó vào init.el của tôi:

(defun recursive-load-dir-settings (currentfile)
  (let ((lds-dir (locate-dominating-file currentfile "settings.el")))
  (when lds-dir
      (progn
        (load-file (concat lds-dir "settings.el"))
        (recursive-load-dir-settings (file-truename(concat lds-dir "..")))))))

(defun load-dir-settings()
  (interactive)
  (when buffer-file-name
    (recursive-load-dir-settings buffer-file-name)))

(add-hook 'find-file-hook 'load-dir-settings)

Điều này tải tập tin settings.eltrong thư mục của tập tin hiện tại. Sau đó nó tiếp tục tìm kiếm settings.elhướng lên trong cây thư mục, cho đến khi không tìm thấy thêm các tệp như vậy (giống như .dir-locals.el).

Điều này tải và chạy các tệp cài đặt mà không có dấu nhắc bảo mật , vì vậy bạn cần chắc chắn rằng bạn là người duy nhất có thể đặt các tệp đó trong cây thư mục. Nếu bạn vẫn muốn lời nhắc, tất nhiên nó có thể được thêm vào mà không cần sử dụng cơ chế tùy chỉnh , vì vậy bạn init.elcó thể giữ sạch sẽ.

Một ví dụ cho settings.elcó thể trông như thế này:

(make-local-variable 'my-pw)
(setq my-pw "passw0rd A")
(message "Loaded super-secret password for project A")

Đây trông giống như một câu trả lời mà tôi đang tìm kiếm. Cảm ơn bạn, tôi sẽ thử.
d12frosted

3

Nếu bạn viết cấu hình vào init.eltệp của mình theo cách thủ công, thì bạn có thể thêm vào như sau:

(setq custom-file "~/.emacs.d/custom.el")
(load custom-file t)

Bây giờ khi emacs gặp a .dir-locals.elvới các tùy chọn iffy Emacs sẽ lưu lựa chọn của bạn vào custom.eltệp này , để bạn tự do chia sẻ init.elcông khai tệp của mình .

Nếu bạn muốn sử dụng giao diện Tùy chỉnh của Emacs cho tất cả cấu hình của mình, tôi không nghĩ rằng điều này sẽ phù hợp với bạn.


Cảm ơn câu trả lời của bạn. Cách giải quyết này có thể tốt cho tôi. Nhưng thật không may, đó không phải là giải pháp chung, vì vậy tôi đang bỏ ngỏ câu hỏi.
d12frosted

0

Giải pháp là ghi đè hệ thống bảo vệ dir-locals Emacs.

(defun safe-local-variable-p (sym val)
"Put your guard logic here, return t when sym is ok, nil otherwise"
  t)

Đơn giản chỉ cần đặt nó ở đâu đó trong lõi init và khỉ-patch của bạn.

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.