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.el
di root pohon direktori yang ingin Anda lindungi, dengan konten berikut:
((nil . ((eval . (view-mode 1)))))
Sunting: Michał Politowski menunjukkan dalam komentar bahwa mengaktifkan view-mode
dengan cara ini bermasalah, karena ketika Anda mengabaikan buffer dengan qitu juga menonaktifkan mode, yang berarti bahwa lain kali Anda mengunjungi buffer view-mode
itu 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-enter
alih-alih view-mode
, karena yang pertama mengambil EXIT-ACTION
argumen 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-ACTION
akhirnya diteruskan ke view-mode-exit
fungsi, 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.el
file), 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-mode
dan saya hanya melakukanC-x C-q
jika 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)