Как изменить разрешение на запись в текущий буфер в Emacs?

17

Можно ли изменить права на запись в файл изнутри emacs, не убивая и не открывая заново буфер?

Иногда я забываю изменить права доступа к файлу перед его открытием. Я могу изменить разрешения изнутри emacs ( M-! chmod u+w filename), но это не обновляет буфер, который остается защищенным от записи и отказывается изменять файл.

Есть ли способ обновить разрешения внутри буфера? Бонус, если я могу назначить это на ярлык!

rahmu
источник

Ответы:

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для изменения его режима.

choroba
источник
3
Видимо, вы пропустили dired-jump(как правило, связаны с C-x C-j). Он запускается diredи переходит к строке для файла, который вы редактируете.
CJM
2
@cjm: у меня не работает, если я не загружаюсь dired-x.
Чороба
Извините, я забыл, что я установил автозагрузку 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))
Talespin_Kit
источник