Як змінити дозвіл на запис на поточний буфер в emacs?


17

Чи можна змінити дозволи на запис у файл зсередини emacs, не вбиваючи / повторно відкриваючи буфер?

Іноді я забуваю змінити дозволи на файл перед відкриттям. Я можу змінити дозволи зсередини emacs ( M-! chmod u+w filename), але це не оновлює буфер, який залишається захищеним від запису, і відмовляється змінювати файл.

Чи є спосіб оновити дозволи всередині буфера? Бонусний бал, якщо я можу призначити це ярликом!

Відповіді:


16

Після зміни режиму файлу та перед тим, як змінити його, запустіть, M-x revert-bufferщоб перезавантажити файл. Якщо файл тепер доступний для запису, буфер більше не можна читати.

Крім того, введіть C-x C-q( read-only-mode). Це робить буфер більше не лише для читання. Ви можете редагувати та навіть зберігати, але ви отримаєте запит на підтвердження із запитом, чи потрібно замінити файл, доступний лише для читання.


Хоча Cx Cq все ще працює, станом на emacs 24.3 він тепер викликає режим лише для читання, а не перемикання лише для читання та переключення лише для читання.
Пол Рубель

9

Щоб змінити стан буфера лише для читання, використовуйте C-xC-q (тумблер read-only-mode). Щоб змінити права доступу до файлів, ви можете запустити diredв каталозі файлу ( C-xd), шукати файл C-sі використовувати Mдля зміни його режиму.


3
Мабуть, ви пропустили dired-jump(як правило, зобов'язані C-x C-j). Він працює diredі переходить до рядка для файлу, який ви редагуєте.
cjm

2
@cjm: Це не працює для мене, якщо я не завантажую dired-x.
choroba

Вибачте, я забув, що налаштував автозавантаження dired-jumpблизько 20 років тому. Рекомендую.
CJM

Дратівливо toggle-read-onlyбуло замінено на read-only-mode, хоча прив'язка однакова.
Чарлі Мартін

2

Якщо робочий процес вимагає неодноразової зміни дозволу на файл буфера, то використання спеціальної функції допоможе наступним чином.

Це працює лише на машинах Unix (виконує системну команду "chmod"

(defun chmod-plus-w ()
  (interactive)
  (shell-command-to-string (concat "chmod +w " (buffer-file-name (current-buffer))))
  (revert-buffer))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.