¿Cómo modificar el permiso de escritura en el búfer actual en emacs?

17

¿Es posible cambiar los permisos de escritura en un archivo desde dentro de emacs, sin matar / volver a abrir el búfer?

A veces me olvido de modificar los permisos en un archivo antes de abrirlo. Puedo modificar los permisos desde dentro de emacs ( M-! chmod u+w filename) pero esto no actualiza el búfer que permanece protegido contra escritura y se niega a modificar el archivo.

¿Hay alguna manera de actualizar los permisos dentro del búfer? ¡Punto extra si puedo asignar esto a un atajo!

rahmu
fuente

Respuestas:

16

Después de cambiar el modo de archivo, y antes de hacer cualquier edición, ejecute M-x revert-bufferpara volver a cargar el archivo. Si el archivo ahora se puede escribir, el búfer ya no será de solo lectura.

Alternativamente, escriba C-x C-q( read-only-mode). Esto hace que el búfer ya no sea de solo lectura. Puede editar e incluso guardar, pero recibirá un mensaje de confirmación que le preguntará si desea sobrescribir el archivo de solo lectura.

Gilles 'SO- deja de ser malvado'
fuente
Si bien Cx Cq todavía funciona, a partir de emacs 24.3 ahora llama a modo de solo lectura en lugar de alternar solo lectura y alternar solo lectura ha sido desactivado.
Paul Rubel
9

Para cambiar el estado de solo lectura de un búfer, use C-xC-q(alternar read-only-mode). Para cambiar los permisos del archivo, puede ejecutarlo direden el directorio del archivo ( C-xd), buscar el archivo C-sy usarlo Mpara cambiar su modo.

choroba
fuente
3
Aparentemente, te has perdido dired-jump(normalmente obligado C-x C-j). Se ejecuta diredy salta a la línea del archivo que está editando.
cjm
2
@cjm: No funciona para mí a menos que cargue dired-x.
choroba
Lo siento, olvidé que había configurado una carga automática hace dired-jumpunos 20 años. Lo recomiendo.
cjm
Molestamente toggle-read-onlyha sido reemplazado por read-only-mode, aunque la unión es la misma.
Charlie Martin
2

Si el flujo de trabajo requiere cambiar el permiso de archivo del búfer repetidamente, entonces tener una función personalizada ayudaría de la siguiente manera.

Esto funciona solo en máquinas Unix (ejecuta el comando del sistema "chmod"

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