Me gustaría poder guardar una copia (o una instantánea) de un búfer en un archivo. El comportamiento sería similar write-file
, excepto que no establecería el búfer para visitar este archivo.
Para un caso de uso, imagine que tiene una sesión de shell y desea guardarlo rápidamente en un archivo de registro. No se debe cambiar el nombre del búfer (para que las funciones que dependen del nombre del búfer sigan funcionando), y no se debe visitar un archivo (para que el archivo no se sobrescriba accidentalmente y no haya ninguna advertencia al salir de emacs).
Puedo imaginar algunas formas sucias de hacer esto, publicaré una como respuesta propia, pero leyendo el manual, todo el sistema de "archivos visitados" es más complicado de lo que parece, y supongo que es fácil redactar un Solución incorrecta ¿Hay una forma oculta, incorporada, de lograr esto?
write-region
desde Lisp (por ejemplo, en su propio comando). Simplemente pásalo(point-min)
y(point-max)
, junto con el nombre del archivo.C-x h
M-x write-region
M-x write-region
comando real .Sucio
elisp
haciendo lo que quiero hacer:Esto parece mucho más complicado de lo necesario, ya que tenemos que ocuparnos tanto del archivo visitado como del nombre del búfer, y no podemos estar seguros de que no olvidamos nada más.
Otras soluciones que implican copiar el texto del búfer en un nuevo búfer, luego guardar y eliminar ese búfer probablemente funcionaría mejor, pero entonces me preocuparían los problemas de rendimiento con los búferes grandes.
fuente