在Linux上,内置的el文件都是只读的,所以没问题。
但在MS Windows上,会发生这样的事情:
f isearch-forward
然后点击在链接isearch.el
上从帮助中获取函数的定义。 h
或c
。s
保存它们。 在MS Windows上保护内置el文件的好方法是什么?
答案 0 :(得分:3)
将权限更改为只读。
M-x find-function isearch-forward RET
M-x dired RET
% m . RET
M -w RET
序列将打开文件isearch.el
,然后在其目录中使用dired。此时,您标记所有文件,然后将权限更改为只读。
您还希望为子目录执行此操作。所以掀起一个宏并运行它直到你完成。
从lisp
dired缓冲区(您在那里创建的缓冲区)开始,转到第一个文件(位于.
和..
下方),然后开始:
C-x (
>
RET
% m . RET
M -w RET
q
C-x )
在那里,您已经定义了一个宏来转到下一个目录,输入它,将所有文件标记为只读,然后离开目录。现在运行几次(Emacs 23.1为20)。
C-u 20 C-x e RET
你已经完成了。
如果你有一个cygwin shell,那么做起来要容易得多
M-x shell
cd c:/Program\ Files/emacs-23.1/lisp/
chmod -R -w .
答案 1 :(得分:1)
看看Directory Local Variables。这应该符合您的需求:
(dir-locals-set-class-variables
'read-only '((nil (buffer-read-only . t))))
(dir-locals-set-directory-class
source-directory 'read-only)
相应地更改source-directory
。
答案 2 :(得分:1)
我决定在加载时只读取el源缓冲区(使用变量buffer-read-only)。
(defun my-make-some-read-only ()
(if (and buffer-file-name
(or
(string-match-p "/emacs/lisp/" buffer-file-name)
(string-match-p "/EmacsW32/lisp/" buffer-file-name)))
(setq buffer-read-only t)))
(add-hook 'emacs-lisp-mode-hook 'my-make-some-read-only)
如果上面的代码在dotemacs中,则来自el文件的缓冲区设置为只读。
c:/Program Files/Emacs/emacs/lisp/emacs-lisp/lisp-mode.el
c:/Program Files/Emacs/EmacsW32/lisp/w32shell.el
答案 3 :(得分:0)
打开cmd.exe提示符,然后执行以下操作:
c:\> cd \emacs\lisp
c:\emacs\lisp> find -name "*.el" -exec attrib +R {} ;
您需要一个find.exe实用程序。我使用UnxUtils中的那个。