Відповіді:
Mx перемикання - лише для читання
або в останніх версіях Emacs
Mx-режим лише для читання
У моєму вікні Windows це дорівнює Alt-x, щоб відкрити мета-підказку та ввести "тільки для читання", щоб викликати правильну функцію elisp.
Якщо ви використовуєте типові прив’язки клавіатури,
Cx Cq
(який ви читаєте вголос як "Control-X Control-Q") матиме такий же ефект. Пам’ятайте, однак, враховуючи, що emacs по суті нескінченно перенастроюється, ваш пробіг може змінюватися.
Випливаючи з коментаря: слід зауважити, що статус запису буфера не змінює дозволу на файл, який можна записати. Якщо ви спробуєте виписати його у файл лише для читання , ви побачите повідомлення про підтвердження. Однак якщо у вас є файл, ви можете виписати свої зміни, не змінюючи дозволів на файл.
Це дуже зручно, якщо ви хочете зробити швидку зміну файлу без необхідності пройти кілька етапів дозволу на запис, виписати зміни, видалити дозвіл на запис. Я, як правило, забуваю цей останній крок, залишаючи відкриті потенційно критичні файли для випадкових змін.
Будьте впевнені, що ви не плутаєте "файл" з "буфером". Ви можете встановити буфери лише для читання та повернути знову за допомогою C-x C-q
( toggle-read-only
). Якщо у вас є дозвіл на читання, але не запис, файл, буфер, який ви отримаєте під час відвідування файлу ( C-x C-f
або find-file
), буде автоматично переведений у режим лише для читання. Якщо ви хочете змінити дозволи на файл у файловій системі, можливо, почніть з dired
каталогу, який містить файл. Документацію для заточених можна знайти в інформації; C-h i (emacs)dired RET
.
inc
. Навчіть людину ловити рибу ...
Що я знайшов - це M-x set-file-modes filename mode
Він працював у моєму вікні Windows Vista. Наприклад:M-x set-file-modes <RET> ReadOnlyFile.txt <RET> 0666
(set-file-modes FILE 438)
(де 438 - десятковий еквівалент 2#0110110110
або 666
).
Як згадував там хтось інший: Mx перемикання читання лише для роботи.
Однак це тепер застаріло, і Mx-режим лише для читання - це поточний спосіб зробити це, якщо він встановлений на Cx Cq-прив'язку клавіш.
Якщо лише буфер (а не файл) доступний лише для читання, ви можете використовувати toggle-read-only
, до якого зазвичай пов'язано C-x C-q
.
Якщо сам файл лише для читання, вам може бути корисна наступна функція:
(defun set-buffer-file-writable ()
"Make the file shown in the current buffer writable.
Make the buffer writable as well."
(interactive)
(unix-output "chmod" "+w" (buffer-file-name))
(toggle-read-only nil)
(message (trim-right '(?\n) (unix-output "ls" "-l" (buffer-file-name)))))
Функція залежить від unix-output
та trim-right
:
(defun unix-output (command &rest args)
"Run a unix command and, if it returns 0, return the output as a string.
Otherwise, signal an error. The error message is the first line of the output."
(let ((output-buffer (generate-new-buffer "*stdout*")))
(unwind-protect
(let ((return-value (apply 'call-process command nil
output-buffer nil args)))
(set-buffer output-buffer)
(save-excursion
(unless (= return-value 0)
(goto-char (point-min))
(end-of-line)
(if (= (point-min) (point))
(error "Command failed: %s%s" command
(with-output-to-string
(dolist (arg args)
(princ " ")
(princ arg))))
(error "%s" (buffer-substring-no-properties (point-min)
(point)))))
(buffer-substring-no-properties (point-min) (point-max))))
(kill-buffer output-buffer))))
(defun trim-right (bag string &optional start end)
(setq bag (if (eq bag t) '(?\ ?\n ?\t ?\v ?\r ?\f) bag)
start (or start 0)
end (or end (length string)))
(while (and (> end 0)
(member (aref string (1- end)) bag))
(decf end))
(substring string start end))
Розмістіть функції у своїх ~/.emacs.el
, оцініть їх (або перезавантажте emacs). Потім ви можете зробити файл у поточному буфері для запису M-x set-buffer-file-writable
.
set-buffer
зовнішньої сторінки save-excursion
.
subseq
з substring
компанією. Це повинно уникати попередження.
Якщо ви дивитесь на каталог файлів (dired), то можете скористатися Shift + M
ім'ям файлу та ввести modespec
ті самі атрибути, які використовувались у chmod
команді.
M modespec <RET>
Дивіться інші корисні команди для файлів у списку каталогів за адресою адресою http://www.gnu.org/s/libtool/manual/emacs/Operating-on-Files.html
Я спробував рішення Vebjorn Ljosa, і виявилося, що принаймні в моєму Emacs (22.3.1) немає такої функції, як "trim-right", яка використовується для видалення марного нового рядка в кінці виходу chmod.
Видалення виклику "обрізати право" допомогло, але рядок статусу "відскочив" через додатковий новий рядок.
C-x C-q
марно. Тому що вам також потрібен дозвіл на збереження файлу.
Я використовую Spacemacs . Це дає мені зручну функцію для вирішення цього питання. Код наступний.
(defun spacemacs/sudo-edit (&optional arg)
(interactive "p")
(if (or arg (not buffer-file-name))
(find-file (concat "/sudo:root@localhost:" (ido-read-file-name "File: ")))
(find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
Я дзвоню spacemacs/sudo-edit
відкрити файл в emacs і ввести свій пароль, я можу змінити файл без режиму лише для читання.
Ви можете написати нову функцію на кшталт spacemacs/sudo-edit
.
toggle-read-only
лише перемикає стан лише для читання буфера, а не файлу. Якщо ви хочете змінити режим файлу, використовуйтеdired
або виконайтеchmod +w
як команду оболонки у файлі.