Как защитить встроенные файлы el от случайного редактирования в Windows - PullRequest
1 голос
/ 09 апреля 2010

В 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 становится вставкой h или c.
  • Иногда я замечаю это и отменяю это, но иногда я не замечаю этого, и я даже сохраняю их все с помощью ctrl - x s.

Как можно защитить меня от встроенных файлов в MS Windows?

Ответы [ 4 ]

3 голосов
/ 09 апреля 2010

Изменить права доступа только для чтения.

M-x find-function isearch-forward RET
M-x dired RET
% m . RET
M -w RET

Последовательность откроет файл isearch.el, а затем использует dired в своем каталоге. В этот момент вы отмечаете все файлы, а затем меняете права доступа только для чтения.

Вы также захотите сделать это для подкаталогов. Так что взбейте макрос и запускайте его, пока не закончите.

Начиная с буфера lisp (тот, который вы там создали), переходите к первому файлу (прямо под . и ..) и начинайте:

C-x (
>
RET
% m . RET
M -w RET
q
C-x )

Там вы определили макрос для перехода в следующий каталог, введите его, отметьте все его файлы только для чтения и покиньте каталог. Теперь запустите его несколько раз (20 для Emacs 23.1).

C-u 20 C-x e RET

И все готово.

Если у вас есть оболочка Cygwin, было бы намного проще просто сделать

M-x shell
cd c:/Program\ Files/emacs-23.1/lisp/
chmod -R -w .
1 голос
/ 12 апреля 2010

Я решил сделать исходные буферы el только для чтения (используя переменную buffer-only-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
1 голос
/ 10 апреля 2010

Взгляните на Локальные переменные каталога . Это должно удовлетворить ваши потребности:

(dir-locals-set-class-variables
 'read-only '((nil (buffer-read-only . t))))
(dir-locals-set-directory-class
 source-directory 'read-only)

Изменить source-directory соответственно.

0 голосов
/ 12 апреля 2010

Откройте командную строку cmd.exe и сделайте следующее:

c:\> cd \emacs\lisp
c:\emacs\lisp> find -name "*.el" -exec attrib +R {} ;

Вам нужна утилита find.exe. Я использую один из UnxUtils .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...