Gostaria de saber se é possível que o buffer seja salvo no momento exato da modificação; no instante do evento de ativação.
Gostaria de saber se é possível que o buffer seja salvo no momento exato da modificação; no instante do evento de ativação.
Respostas:
(defun my-instant-save-buffer (eins zwei drei)
"To be hooked into list `after-change-functions'
`after-change-functions' expects functions receiving three arguments.
Arguments are ignored here, but slots needed by add-hook"
(save-buffer))
(add-hook 'after-change-functions 'my-instant-save-buffer)
Eu tinha o mesmo requisito e o recurso de salvamento automático do emacs não funcionou bem para mim porque não pode adicionar conselhos às funções c. Então, eu escrevi um pacote real-auto-save para isso. Está disponível em melpa.
Você pode instalá-lo
M-x package-install RET real-auto-save
e na sua configuração você pode adicionar
(require 'real-auto-save)
(add-hook 'prog-mode-hook 'real-auto-save-mode)
(setq real-auto-save-interval 1) ;; in seconds
Após cada segundo, se o seu buffer for modificado, ele será salvo automaticamente.
Se você deseja salvar especificamente após o evento de key up, você pode escrever uma função lisp para isso.
Você pode ativar auto-save-mode
, para que o Emacs salve automaticamente seu buffer atual em um arquivo diferente. Em seguida, adicione esta função para auto-save-hook
também gravá-la diretamente no arquivo real que você está editando:
(defun save-buffer-if-visiting-file (&optional args)
"Save the current buffer only if it is visiting a file"
(interactive)
(if (and (buffer-file-name) (buffer-modified-p))
(save-buffer args)))
(add-hook 'auto-save-hook 'save-buffer-if-visiting-file)
De acordo com o manual do Emacs sobre controle de salvamento automático :
A variável intervalo de salvamento automático especifica quantos caracteres existem entre os salvamentos automáticos. Por padrão, é 300. O Emacs não aceita valores muito pequenos: se você personalizar o intervalo de salvamento automático para um valor menor que 20, o Emacs se comportará como se o valor fosse 20.
Portanto, se você deseja que o Emacs salve a cada pressionamento de tecla, mude auto-save-interval
para 1
:
(setq auto-save-interval 1)