Anda dapat menggunakan variabel direktori-lokal untuk membuat file sumber Emacs hanya-baca secara default. (Lihat juga C-hig (emacs) Directory Variables RET).
Buat file yang disebut .dir-locals.eldi root pohon direktori yang ingin Anda lindungi, dengan konten berikut:
((nil . ((eval . (view-mode 1)))))
Sunting: Michał Politowski menunjukkan dalam komentar bahwa mengaktifkan view-modedengan cara ini bermasalah, karena ketika Anda mengabaikan buffer dengan qitu juga menonaktifkan mode, yang berarti bahwa lain kali Anda mengunjungi buffer view-modeitu tidak akan diaktifkan.
Sunting 2: Constantine telah memberikan solusi untuk masalah itu di komentar di bawah:
((nil . ((eval . (when buffer-file-name (view-mode-enter nil #'kill-buffer))))))
Ini berguna menambahkan tes untuk memastikan bahwa buffer sudah mengunjungi file, tetapi perubahan kuncinya adalah penggunaan view-mode-enteralih-alih view-mode, karena yang pertama mengambil EXIT-ACTIONargumen yang menentukan apa yang harus dilakukan ketika qdiketik. Dalam hal ini tindakan keluar adalah untuk membunuh buffer, memastikan bahwa waktu berikutnya file dikunjungi lagi akan berakhir view-mode.
Sunting 3: Mengikuti jalur itu, kita juga dapat melihat bahwa yang ditentukan EXIT-ACTIONakhirnya diteruskan ke view-mode-exitfungsi, dan docstringnya memberi kita solusi alternatif:
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.
Maka kita dapat menggunakan yang berikut ini:
((nil . ((eval . (when buffer-file-name
(setq-local view-no-disable-on-exit t)
(view-mode-enter))))))
Saya menggunakan pendekatan alternatif yang dapat Anda tentukan seluruhnya dalam file init Anda (sebagai lawan membuat .dir-locals.elfile), dan saya hanya membuat file read-only daripada menggunakan view-mode. Konfigurasi saya terlihat seperti ini:
;; 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)
Jelas Anda dapat melakukan hal yang sama untuk direktori elpa Anda, dan direktori lain yang berisi kode sumber pihak ketiga.
emacs-lisp-modedan saya hanya melakukanC-x C-qjika saya ingin mengedit kode sumber.(defun set-buffer-read-only () (setq buffer-read-only t)) (add-hook 'emacs-lisp-mode-hook 'set-buffer-read-only)