A menudo hago algo como:
Cx b foobarbaz RET
para obtener un nuevo búfer para tomar notas, etc. Me encantaría que emacs simplemente capturara instantáneamente y volcara todos los búferes abiertos en el disco ocasionalmente. Hay mucha documentación por ahí para mejorar la funcionalidad de copia de seguridad y guardado automático, pero todas están relacionadas con buffers que actualmente están visitando un archivo.
Me gustaría que emacs tome instantáneamente instantáneas / guarde TODOS los buffers en el disco. Esto seguramente hará que se escriban en el disco algunos buffers de 'salida' ruidosos, pero ¿a quién le importa? El espacio en disco es barato.
¿Hay algo incorporado para hacer esto? En este momento, si mi computadora (o emacs) falla, a menudo pierdo muchas notas que he tomado en varios buffers.
save-some-buffers
tiene una opción para los búferes que no visitan archivos, tal vez pueda casar eso con un temporizador y una función personalizada, quesave-some-buffers
acepta como argumento, vea la cadena de documentos. Probablemente ya haya algo que haga esto, por ejemplo, Google,"save-some-buffers" auto save
etc .; y, consulte la funciónauto-save-mode
desimple.el
algunas ideas. Recuerdo que el auto-guardar-buffers-mejorado puede haber hecho algo como esto: github.com/kentaro/auto-save-buffers-enhanced/blob/master/…deft
paquete.Respuestas:
Esto no responde a su pregunta como se planteó, así que siéntase libre de ignorar o rechazar.
Dudo que realmente desee que Emacs guarde todos los búferes en el disco, incluidos todos los búferes internos, normalmente invisibles. ¿Porqué querrías eso?
No se trata del espacio en disco. Se trata del ruido. ¿Realmente quieres extraer cosas de un directorio donde tus archivos importantes podrían mezclarse con esas cosas? ¿O desea pescar perlas ocasionales en un directorio temporal (cuyo propósito es esconder el ruido)?
Los buffers que tienen nombres como
*...*
(que no comienzan con un carácter espacial) son típicamente solo de salida (por ejemplo,*info*
) o para interacción temporal (por ejemplo*scratch*
). Para tales amortiguadores, mi recomendación sería dejar las cosas como están. Siempre puede guardar dicho búfer bajo demanda, utilizandoC-x C-w
, si realmente lo necesita.Lo que me lleva a lo que sospecho es su caso de uso real: " buffer [s] para tomar notas, etc. ". La respuesta aquí es usar en
C-x C-f
lugar deC-x b
. IOW, sí, visítalos como buffers de archivos. Si nunca guarda el búfer, no se crea ningún archivo, excepto un archivo de autoguardado , que probablemente sea justo lo que desea y necesita.Cuando visita un búfer como un búfer de archivos, usted controla automáticamente qué modo principal se usa de manera predeterminada (usando
auto-mode-alist
). Esto es tan importante para la toma de notas como lo es para el código de programación.En particular, sugeriría que si lo usa
*scratch*
para la interacción temporal de Lisp, podría reconsiderarlo. Muchos usuarios (incluyéndome a mí) han descubierto que es útil usarC-x C-f foo.el
(o cualquier otro*.el
nombre de archivo). Una razón es que obtienes archivos de autoguardado gratis (y archivos de respaldo, si guardas el búfer). Otra razón es que obtienes el modo Emacs-Lisp en lugar del modo de interacción Lisp. Una tercera razón es que sí, es posible que desee guardar su trabajo "temporal". Y como dices, el espacio en disco es barato.¿Qué pasa con el # 4 en conflicto con lo que dije en el # 1? No desea mezclar archivos de garabatos temporales con archivos importantes, y no desea extraer la perla ocasional de un directorio de archivos temporales. La respuesta aquí es que depende de usted organizar las cosas para minimizar este efecto. Trabajar con estos archivos de memoria virtual en un directorio particular puede ayudar, al igual que usar una convención de nomenclatura (especialmente un prefijo) que lo ayuda a distinguir dichos archivos.
Otra cosa que puede ayudar: Dired . Puede usar
~
y#
para marcar archivos de copia de seguridad y autoguardado para su eliminación (y luegox
para eliminarlos). Y si usa una convención de nomenclatura para sus archivos scratch presumiblemente temporales, entonces puede usar%
o similar para marcarlos a todos para su eliminación. Incluso puede ejecutar una función periódicamente para limpiar dichos archivos. Y puede cambiar fácilmente el nombre de cualquiera que realmente quiera conservar por más tiempo.Entonces, mi consejo es que quizás reconsidere cómo está interactuando con esos búferes temporales para tomar notas. Considere usar buffers de archivos, que se guardan automáticamente. En suma, use
C-x C-f foobarbaz.txt RET
(.el
o lo que sea) en lugar deC-x b foobarbaz RET
.fuente
C-x C-f
" en lugar de "En suma, useC-x b
" en el último párrafo. (No puedo sugerir una edición directamente porque este cambio tiene menos de 6 caracteres.)