Wie ändere ich die Schreibberechtigung für den aktuellen Puffer in Emacs?

16

Ist es möglich, die Schreibrechte für eine Datei von Emacs aus zu ändern, ohne den Puffer zu löschen oder erneut zu öffnen?

Manchmal vergesse ich, die Berechtigungen für eine Datei zu ändern, bevor ich sie öffne. Ich kann die Berechtigungen in emacs ( M-! chmod u+w filename) ändern, aber dadurch wird der Puffer nicht aktualisiert, der schreibgeschützt bleibt, und die Datei kann nicht geändert werden.

Gibt es eine Möglichkeit, Berechtigungen im Puffer zu aktualisieren? Bonuspunkt, wenn ich dies einer Verknüpfung zuordnen kann!

rahmu
quelle

Antworten:

15

Führen Sie M-x revert-buffernach dem Ändern des Dateimodus und vor dem Bearbeiten den Befehl aus, um die Datei neu zu laden. Wenn die Datei jetzt beschreibbar ist, ist der Puffer nicht mehr schreibgeschützt.

Alternativ können Sie C-x C-q( read-only-mode) eingeben. Dadurch ist der Puffer nicht mehr schreibgeschützt. Sie können die Datei bearbeiten und sogar speichern. Sie werden jedoch zur Bestätigung gefragt, ob Sie die schreibgeschützte Datei überschreiben möchten.

Gilles 'SO - hör auf böse zu sein'
quelle
Während Cx Cq immer noch funktioniert, ruft es ab Emacs 24.3 jetzt den Nur-Lese-Modus auf und nicht mehr das Nur-Lesen-Umschalten, und das Nur-Lesen-Umschalten wurde deaktiviert.
Paul Rubel
9

Verwenden Sie C-xC-q(Toggle read-only-mode), um den schreibgeschützten Status eines Puffers zu ändern . Um die Dateiberechtigungen zu ändern, können Sie direddas Dateiverzeichnis ( C-xd) durchsuchen, nach der Datei suchen C-sund Mden Modus ändern.

Choroba
quelle
3
Anscheinend hast du verpasst dired-jump(normalerweise gebunden C-x C-j). Es wird ausgeführt diredund springt zur Zeile für die Datei, die Sie bearbeiten.
cjm
2
@cjm: Bei mir funktioniert es nur, wenn ich es lade dired-x.
Choroba
Entschuldigung, ich hatte vergessen, dass ich vor dired-jumpungefähr 20 Jahren einen Autoload eingerichtet hatte. Ich empfehle es.
cjm 10.09.12
Ärgerlicherweise toggle-read-onlywurde durch ersetzt read-only-mode, obwohl die Bindung die gleiche ist.
Charlie Martin
2

Wenn der Workflow die Dateiberechtigung des Puffers wiederholt ändern muss, hilft eine benutzerdefinierte Funktion wie folgt.

Dies funktioniert nur auf Unix-Rechnern (führt den Systembefehl "chmod" aus

(defun chmod-plus-w ()
  (interactive)
  (shell-command-to-string (concat "chmod +w " (buffer-file-name (current-buffer))))
  (revert-buffer))
Talespin_Kit
quelle