Salvar buffer a cada modificação

7

Gostaria de saber se é possível que o buffer seja salvo no momento exato da modificação; no instante do evento de ativação.

Hellon Canella Machado
fonte
11
Você receberá outras respostas, mas poderá estar interessado no aprimoramento automático de buffers de salvamento
lawlist
11
Você tem um motivo específico para querer isso? Isso seria bem insano. Não digito rápido, mas sei que mesmo um SSD rápido não conseguiu acompanhar minha digitação. (Pelo menos não em emacs)
PythonNut

Respostas:

9
(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)
Andreas Röhler
fonte
Isso deve vir com um aviso: apenas porque você pode fazer isso não significa que você deveria . Não testei, mas acho que isso provavelmente afetará substancialmente o desempenho.
NickD
@NickD Concordou. No entanto, acabou de responder à pergunta, não dando como dica de boas práticas.
Andreas Röhler
7

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.

ChillarAnand
fonte
3

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-hooktambé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-intervalpara 1:

(setq auto-save-interval 1)
Tu Do
fonte
2
O manual que você citou diz que algo menor que 20 fará o Emacs se comportar como se o valor fosse 20. Como ele funciona com 1 então?
Hakan Serce 28/10