Guardar búfer en cada modificación

7

Me gustaría saber si es posible que el búfer se guarde en el momento exacto de modificación; en el instante del evento key up.

Hellon Canella Machado
fuente
1
Recibirá otras respuestas, pero puede estar interesado en el auto-save-buffers-mejorado: github.com/kentaro/auto-save-buffers-enhanced/blob/master/…
leyes
1
¿Tienes una razón específica para querer esto? Esto sería bastante loco. No escribo rápido, pero sé que incluso un SSD rápido no podría seguir con mi escritura. (Al menos no en emacs)
PythonNut

Respuestas:

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
fuente
Esto debe venir con una advertencia: sólo porque usted puede hacerlo no significa que usted debe . No lo he probado, pero creo que es probable que esto afecte sustancialmente el rendimiento.
NickD
@NickD De acuerdo. Sin embargo, acabo de responder la pregunta, sin dar indicio de buena práctica.
Andreas Röhler el
7

Tenía el mismo requisito y la función de guardado automático de emacs no me ha funcionado bien porque no se puede utilizar las funciones de c. Entonces, escribí un paquete real-auto-save para eso. Está disponible en melpa.

Puedes instalarlo por

M-x package-install RET real-auto-save 

y en tu configuración puedes agregar

(require 'real-auto-save)
(add-hook 'prog-mode-hook 'real-auto-save-mode)
(setq real-auto-save-interval 1) ;; in seconds

Después de cada segundo, si se modifica su búfer, se guardará automáticamente.

Si desea guardar específicamente después del evento key up, puede escribir una función lisp para eso.

ChillarAnand
fuente
3

Puede habilitar auto-save-mode, por lo que Emacs guarda automáticamente su búfer actual en un archivo diferente. Luego, agregue esta función para auto-save-hooktambién escribirla directamente en el archivo real que 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 acuerdo con el manual de Emacs sobre el control de guardado automático :

La variable intervalo de guardado automático especifica cuántos caracteres hay entre los guardados automáticos. Por defecto, es 300. Emacs no acepta valores que sean demasiado pequeños: si personaliza el intervalo de guardado automático a un valor inferior a 20, Emacs se comportará como si el valor fuera 20.

Entonces, si desea que Emacs guarde para cada pulsación de tecla, cambie auto-save-intervala 1:

(setq auto-save-interval 1)
Tu Do
fuente
2
El manual que citó dice que menos de 20 hará que Emacs se comporte como si el valor fuera 20. ¿Cómo funciona con 1 entonces?
Hakan Serce