elisp – ¿Por qué se excluye la `buffer-undo-list` de` (buffer-local-variables) `?

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.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım