Jak zmodyfikować uprawnienia do zapisu w bieżącym buforze w emacsie?

17

Czy można zmienić uprawnienia do zapisu w pliku z poziomu emacsa, bez zabijania / ponownego otwierania bufora?

Czasami zapominam zmodyfikować uprawnienia do pliku przed jego otwarciem. Mogę modyfikować uprawnienia z poziomu emacs ( M-! chmod u+w filename), ale to nie aktualizuje bufora, który pozostaje chroniony przed zapisem i odmawia modyfikacji pliku.

Czy istnieje sposób na aktualizację uprawnień w buforze? Punkt bonusowy, jeśli mogę przypisać to do skrótu!

rahmu
źródło

Odpowiedzi:

16

Po zmianie trybu pliku i przed wykonaniem edycji uruchom go, M-x revert-bufferaby ponownie załadować plik. Jeśli plik można teraz zapisać, bufor nie będzie już tylko do odczytu.

Alternatywnie wpisz C-x C-q( read-only-mode). To sprawia, że ​​bufor nie jest już tylko do odczytu. Możesz edytować, a nawet zapisywać, ale pojawi się monit z pytaniem, czy chcesz zastąpić plik tylko do odczytu.

Gilles „SO- przestań być zły”
źródło
Podczas gdy Cx Cq nadal działa, od emacsa 24.3 teraz wywołuje tryb tylko do odczytu zamiast przełączania tylko do odczytu i przełączanie tylko do odczytu zostało wyłączone.
Paul Rubel
9

Aby zmienić status bufora tylko do odczytu, użyj C-xC-q(przełącz read-only-mode). Aby zmienić uprawnienia do pliku, możesz uruchomić diredkatalog pliku ( C-xd), wyszukać plik C-si użyć, Maby zmienić jego tryb.

choroba
źródło
3
Najwyraźniej spudłowałeś dired-jump(normalnie związany C-x C-j). Działa diredi przeskakuje do wiersza pliku, który edytujesz.
cjm
2
@cjm: Nie działa dla mnie, dopóki nie załaduję dired-x.
choroba
Przepraszam, zapomniałem, że ustawiłem autoload na dired-jumpokoło 20 lat temu. Polecam to.
cjm
Irytujące toggle-read-onlyzostało zastąpione read-only-mode, chociaż wiązanie jest takie samo.
Charlie Martin
2

Jeśli przepływ pracy wymaga wielokrotnej zmiany uprawnień do pliku dla bufora, posiadanie funkcji niestandardowej pomogłoby w następujący sposób.

Działa to tylko na komputerach z systemem UNIX (wykonuje polecenie systemowe „chmod”

(defun chmod-plus-w ()
  (interactive)
  (shell-command-to-string (concat "chmod +w " (buffer-file-name (current-buffer))))
  (revert-buffer))
Talespin_Kit
źródło