如何保护内置的el文件不被意外编辑在Windows上

时间:2010-04-09 17:50:06

标签: emacs

在Linux上,内置的el文件都是只读的,所以没问题。

但在MS Windows上,会发生这样的事情:

  • 我对命令 isearch-forward 的定义感到好奇,所以我输入 ctrl - h f isearch-forward然后点击在链接isearch.el上从帮助中获取函数的定义。
  • 在阅读其定义时,我多次按 ctrl - h ctrl - c ,但我之前已经将 Caps Lock 设置为另一个Ctrl键,所以有时会发生我太早发布 Caps Lock 的情况,在这种情况下 ctrl - h ctrl - c 会插入hc
  • 有时我会注意到并撤消它,但有时我没注意到它,我甚至用 ctrl - x s保存它们。

在MS Windows上保护内置el文件的好方法是什么?

4 个答案:

答案 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中的那个。