.dir-locals.el
là phương pháp ưa thích của tôi khi có thể, đặc biệt là khi áp dụng cho tất cả người dùng Emacs làm việc trong dự án đó.
Đối với các dự án thù địch với người dùng Emacs hoặc nếu không muốn có .dir-locals.el
tệp hoặc nếu bạn muốn có sở thích cá nhân (có lẽ không phải là thụt lề) không nên áp dụng cho người khác, nếu bạn sử dụng hệ thống kiểm soát phiên bản phân tán, tùy chọn là để luôn luôn làm việc trên các chi nhánh cá nhân có của bạn .dir-locals.el
. Tuy nhiên, tôi không biết cách sử dụng DCVS khiến điều này không gây đau đớn.
Một lựa chọn khác là không kiểm tra trong các .dir-locals.el
tập tin. Ví dụ, với git, thêm nó vào .git/info/exclude
. Điều đó thật đau đớn khi bạn có nhiều kiểm tra của một dự án, tất nhiên.
Những gì tôi đã làm khi .dir-locals.el
không phải là một tùy chọn là thêm một cái móc tìm kiếm buffer-file-name
các giá trị đã biết.
(defvar guessed-project nil)
(make-variable-buffer-local 'guessed-project)
(defun guess-project-from-file-name ()
(save-match-data
(setq guessed-project
(cond
((string-match "/linux-kernel/" buffer-file-name)
'linux-kernel)
((string-match "/gnu/" buffer-file-name)
'gnu)
; etc.
))))
(defun c-my-project-hook ()
(guess-project-from-file-name)
(case guessed-project
((gnu) (c-sty-style 'gnu))
((linux-kernel) (c-sty-style 'linux))
))
(add-hook 'c-mode-hook 'c-my-project-hook)
(Cảnh báo: mã được nhập trực tiếp vào trình duyệt của tôi vì tôi không có quyền truy cập vào mã thực của mình ngay bây giờ.)
.dir-locals.el
. Có thể là đồng nghiệp muốn ý tưởng này?