Ви можете використовувати локальні змінні для каталогу, щоб зробити вихідні файли Emacs за замовчуванням лише для читання. (Див. Також C-hig (emacs) Directory Variables
RET).
Створіть файл, названий .dir-locals.el
у корені дерева каталогів, який ви хочете захистити, із таким вмістом:
((nil . ((eval . (view-mode 1)))))
Редагувати: Michał Politowski вказує в коментарях, що включити view-mode
таким чином проблематично, тому що, коли ви відхиляєте буфер, qвін також вимикає режим, це означає, що наступного разу, коли ви відвідуєте цей буфер view-mode
, не буде ввімкнено.
Редагувати 2: Константин вирішив цю проблему в коментарях нижче:
((nil . ((eval . (when buffer-file-name (view-mode-enter nil #'kill-buffer))))))
Це корисно додає тест, щоб переконатися, що буфер вже відвідує файл, але ключовою зміною є використання view-mode-enter
замість view-mode
, оскільки перший бере EXIT-ACTION
аргумент, який визначає, що робити, коли qвводиться. У цьому випадку дія виходу полягає у знищенні буфера, гарантуючи, що наступного разу, коли файл буде відвідано, він знову закінчиться view-mode
.
Редагування 3: Після цього шляху ми також можемо побачити, що вказане EXIT-ACTION
в кінцевому підсумку передається view-mode-exit
функції, і його docstring дає нам альтернативне рішення:
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.
Отже, ми можемо використовувати наступне:
((nil . ((eval . (when buffer-file-name
(setq-local view-no-disable-on-exit t)
(view-mode-enter))))))
Я використовую альтернативний підхід, який ви можете повністю вказати у своєму файлі init (на відміну від створення .dir-locals.el
файлу), і я просто роблю файли лише для читання, а не для використання view-mode
. Мій конфігурація виглядає так:
;; 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)
Очевидно, що ви можете зробити те ж саме для вашого каталогу elpa та будь-якого іншого каталогу, який містить сторонній вихідний код.
emacs-lisp-mode
і я це просто роблю,C-x C-q
якщо хочу редагувати вихідний код.(defun set-buffer-read-only () (setq buffer-read-only t)) (add-hook 'emacs-lisp-mode-hook 'set-buffer-read-only)