Almacenamiento automático de buffers que no están visitando archivos


7

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-bufferstiene una opción para los búferes que no visitan archivos, tal vez pueda casar eso con un temporizador y una función personalizada, que save-some-buffersacepta como argumento, vea la cadena de documentos. Probablemente ya haya algo que haga esto, por ejemplo, Google, "save-some-buffers" auto saveetc .; y, consulte la función auto-save-modede simple.elalgunas ideas. Recuerdo que el auto-guardar-buffers-mejorado puede haber hecho algo como esto: github.com/kentaro/auto-save-buffers-enhanced/blob/master/…
leyes

¿En qué sistema operativo estás y cuál es tu versión de emacs? Estoy en RHEL 5.10 y emacs 25 (versión dev de git) y no recuerdo que emacs se haya bloqueado una vez, probablemente desde las 24.4 ..
Kaushal Modi

1
Para tomar notas rápidas que guarden automáticamente, sugeriría el deftpaquete.
Kaushal Modi

Verificará hábilmente - se ve genial.
Chris Clark

Respuestas:


6

Esto no responde a su pregunta como se planteó, así que siéntase libre de ignorar o rechazar.

  1. 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?

  2. 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)?

  3. 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, utilizando C-x C-w, si realmente lo necesita.

  4. 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-flugar de C-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 usar C-x C-f foo.el(o cualquier otro *.elnombre 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 luego xpara 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( .elo lo que sea) en lugar de C-x b foobarbaz RET.


1
Supongo que quiso decir "En suma, use C-x C-f" en lugar de "En suma, use C-x b" en el último párrafo. (No puedo sugerir una edición directamente porque este cambio tiene menos de 6 caracteres.)
YoungFrog

1
En las últimas dos semanas, he tratado de acostumbrarme a Cx Cf, y ha funcionado bastante bien. Combinado con un mejor uso de marcadores y Helm, puedo acceder a un directorio de notas y crear un nuevo archivo de memoria virtual muy rápidamente. Obtuve el hábito original Cx b <gibberish> a través de la eficaz sugerencia # 5 de Yegge emacs, pero si hay alguna posibilidad de que el búfer se quede, creo que tienes razón para acostumbrarte a usar un archivo adecuado. ¡Gracias!
Chris Clark

1
Me alegra que haya ayudado.
Dibujó el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.