Bạn có thể sử dụng các biến thư mục-cục bộ để làm cho các tệp nguồn của Emacs chỉ đọc theo mặc định. (Xem thêm C-hig (emacs) Directory Variables
RET).
Tạo một tệp được gọi .dir-locals.el
ở thư mục gốc của cây thư mục mà bạn muốn bảo vệ, với các nội dung sau:
((nil . ((eval . (view-mode 1)))))
Chỉnh sửa: Michał Politowski chỉ ra trong các nhận xét cho phép view-mode
theo cách này là có vấn đề, bởi vì khi bạn loại bỏ bộ đệm với qnó cũng sẽ vô hiệu hóa chế độ, có nghĩa là lần sau bạn truy cập bộ đệm đó view-mode
sẽ không được bật.
Chỉnh sửa 2: Constantine đã cung cấp một giải pháp cho vấn đề đó trong các bình luận bên dưới:
((nil . ((eval . (when buffer-file-name (view-mode-enter nil #'kill-buffer))))))
Điều này hữu ích thêm một bài kiểm tra để đảm bảo rằng bộ đệm đã truy cập một tệp, nhưng thay đổi chính là việc sử dụng view-mode-enter
thay vì view-mode
, vì trước đây có một EXIT-ACTION
đối số xác định những việc cần làm khi qđược nhập. Trong trường hợp này, hành động thoát là để giết bộ đệm, đảm bảo rằng lần tiếp theo tệp được truy cập, nó sẽ lại kết thúc view-mode
.
Chỉnh sửa 3: Theo đường dẫn đó, chúng ta cũng có thể thấy rằng EXIT-ACTION
cuối cùng được chỉ định được truyền cho view-mode-exit
hàm và chuỗi doc của nó cung cấp cho chúng ta một giải pháp thay thế:
view-no-disable-on-exit is a variable defined in `view.el'.
Its value is nil
Documentation:
If non-nil, View mode "exit" commands don't actually disable View mode.
Instead, these commands just switch buffers or windows.
This is set in certain buffers by specialized features such as help commands
that use View mode automatically.
Do đó chúng ta có thể sử dụng như sau:
((nil . ((eval . (when buffer-file-name
(setq-local view-no-disable-on-exit t)
(view-mode-enter))))))
Tôi sử dụng phương pháp thay thế mà bạn có thể chỉ định hoàn toàn trong tệp init của mình (trái ngược với việc tạo .dir-locals.el
tệp) và tôi chỉ đơn giản làm cho các tệp chỉ đọc thay vì sử dụng view-mode
. Cấu hình của tôi trông như thế này:
;; Emacs
(dir-locals-set-class-variables
'emacs
'((nil . ((buffer-read-only . t)
(show-trailing-whitespace . nil)
(tab-width . 8)
(eval . (whitespace-mode -1))))))
(dir-locals-set-directory-class "/usr/local/src/emacs" 'emacs)
(dir-locals-set-directory-class "/usr/local/share/emacs" 'emacs)
(dir-locals-set-directory-class "/usr/share/emacs" 'emacs)
Rõ ràng bạn có thể làm điều tương tự cho thư mục elpa của mình và bất kỳ thư mục nào khác chứa mã nguồn của bên thứ ba.
emacs-lisp-mode
và tôi chỉ làmC-x C-q
nếu tôi muốn chỉnh sửa mã nguồn.(defun set-buffer-read-only () (setq buffer-read-only t)) (add-hook 'emacs-lisp-mode-hook 'set-buffer-read-only)