Pregunta:
Estoy modificando desktop.el
para admitir la restauración de buffer-undo-list
, y estoy push
esa lista al final de la función desktop-buffer-info
porque el buffer-undo-list
no está incluido en la salida del función buffer-local-variables
.
P : ¿Existe un método integrado para incluir la buffer-undo-list
en la salida de la función buffer-local-variables
? Si no es así, ¿hay alguna razón por la que no esté incluido?
Para hacer que la buffer-undo-list
se almacene en el archivo del escritorio, agrego:
(push (cons 'buffer-undo-list buffer-undo-list) ll)
Funciona, pero me gustaría entender por qué una variable aparentemente local de búfer está excluida de la función buffer-local-variables
.
Respuesta:
La lista buffer-undo-list
IIUC no se encuentra buffer-local-variables
del buffer-local-variables
por accidente. El accidente es que una limpieza de código terminó haciendo buffer-local-variables
usen el mismo bucle sobre algunas de las variables locales del búfer, como el bucle utilizado cuando el recolector de basura busca referencias en un objeto de búfer.
Resulta que la buffer-undo-list
debe ser manejada especialmente por el GC porque tratamos de descartar elementos de él (es decir, algunas de las entradas se tratan como "referencias débiles"). Por ejemplo, desechamos las entradas de deshacer que manipulan marcadores que ya no se utilizan en ningún otro lugar.
IOW Creo que es solo un error simple, que le gustaría informar.