Come modificare i permessi di scrittura sul buffer corrente in emacs?


17

È possibile modificare le autorizzazioni di scrittura su un file dall'interno di Emacs, senza uccidere / riaprire il buffer?

A volte dimentico di modificare le autorizzazioni su un file prima di aprirlo. Posso modificare i permessi da dentro emacs ( M-! chmod u+w filename) ma questo non aggiorna il buffer che rimane protetto da scrittura e rifiuta di modificare il file.

C'è un modo per aggiornare le autorizzazioni all'interno del buffer? Punto bonus se posso assegnarlo a una scorciatoia!

Risposte:


16

Dopo aver modificato la modalità file e prima di eseguire qualsiasi modifica, eseguire M-x revert-bufferper ricaricare il file. Se il file è ora scrivibile, il buffer non sarà più di sola lettura.

In alternativa, digitare C-x C-q( read-only-mode). Ciò rende il buffer non più di sola lettura. Puoi modificare e persino salvare, ma riceverai una richiesta di conferma che ti chiederà se vuoi sovrascrivere il file di sola lettura.


Mentre Cx Cq funziona ancora, a partire da emacs 24.3 ora chiama la modalità di sola lettura piuttosto che la modalità di sola lettura e di sola lettura è stata disabilitata.
Paul Rubel,

9

Per modificare lo stato di sola lettura di un buffer, utilizzare C-xC-q(attiva / disattiva read-only-mode). Per modificare le autorizzazioni del file, è possibile eseguire diredsulla directory del file ( C-xd), cercare il file C-se utilizzare Mper modificarne la modalità.


3
Apparentemente, ti sei perso dired-jump(normalmente legato a C-x C-j). Funziona direde passa alla riga per il file che stai modificando.
cjm,

2
@cjm: non funziona per me se non carico dired-x.
Choroba,

Scusa, avevo dimenticato di aver impostato un caricamento automatico per dired-jumpcirca 20 anni fa. Lo consiglio.
cjm,

toggle-read-onlyÈ stato sostituito con fastidio read-only-mode, anche se la rilegatura è la stessa.
Charlie Martin,

2

Se il flusso di lavoro richiede di modificare ripetutamente l'autorizzazione al file del buffer, disporre di una funzione personalizzata sarebbe utile come segue.

Funziona solo su macchine unix (esegue il comando di sistema "chmod"

(defun chmod-plus-w ()
  (interactive)
  (shell-command-to-string (concat "chmod +w " (buffer-file-name (current-buffer))))
  (revert-buffer))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.