Como modificar a permissão de gravação no buffer atual no emacs?

16

É possível alterar as permissões de gravação em um arquivo a partir do emacs, sem matar / reabrir o buffer?

Às vezes, esqueço de modificar as permissões em um arquivo antes de abri-lo. Posso modificar as permissões de dentro do emacs ( M-! chmod u+w filename), mas isso não atualiza o buffer que permanece protegido contra gravação e se recusa a modificar o arquivo.

Existe uma maneira de atualizar permissões dentro do buffer? Ponto de bônus se eu puder atribuir isso a um atalho!

rahmu
fonte

Respostas:

15

Depois de alterar o modo de arquivo e antes de fazer qualquer edição, execute M-x revert-bufferpara recarregar o arquivo. Se o arquivo estiver agora gravável, o buffer não será mais somente leitura.

Como alternativa, digite C-x C-q( read-only-mode). Isso faz com que o buffer não seja mais somente leitura. Você pode editar e até salvar, mas receberá uma solicitação de confirmação perguntando se deseja substituir o arquivo somente leitura.

Gilles 'SO- parar de ser mau'
fonte
Enquanto o Cx Cq ainda funciona, a partir do emacs 24.3 agora ele chama o modo somente leitura em vez de alternar somente leitura e alternar somente leitura foi desativado.
Paul Rubel
9

Para alterar o status somente leitura de um buffer, use C-xC-q(alternar read-only-mode). Para alterar as permissões do arquivo, você pode executar diredno diretório do arquivo ( C-xd), procurar o arquivo C-se usá-lo Mpara alterar seu modo.

choroba
fonte
3
Aparentemente, você perdeu dired-jump(normalmente vinculado a C-x C-j). Ele roda direde salta para a linha do arquivo que você está editando.
Cjm 10/09/12
2
@ cjm: Não funciona para mim, a menos que eu carregue dired-x.
choroba 10/09/12
Desculpe, esqueci que havia configurado um carregamento automático há dired-jumpcerca de 20 anos. Eu recomendo.
Cjm 10/09/12
Irritantemente toggle-read-onlyfoi substituído por read-only-mode, embora a ligação seja a mesma.
Charlie Martin
2

Se o fluxo de trabalho exigir alterar repetidamente a permissão de arquivo do buffer, ter uma função personalizada ajudaria da seguinte maneira.

Isso funciona apenas em máquinas unix (executa o comando do sistema "chmod"

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