В настоящее время я работаю над основным режимом elisp, который использует использование хэш-таблиц на всех сеансах. Поэтому каждый раз, когда основной режим инициализируется, таблицы загружаются в память. Во время и в конце сеанса они записываются в файл. Моя текущая реализация записывает данные следующим образом:Идиоматическая сериализация пути в emacs lisp
(with-temp-buffer
(prin1 hash-table (current-buffer))
(write-file ("path/to/file.el"))))
Загрузка данных в начале сессии осуществляется с помощью чтения и что-то вроде этого:
(setq name-of-table (car
(read-from-string
(with-temp-buffer
(insert-file-contents path-of-file)
(buffer-substring-no-properties
(point-min)
(point-max))))))))
Это работает, но у меня есть чувствуя, что это не самый красивый способ сделать это. Моя цель: я хочу, чтобы этот главный режим превратился в хороший чистый пакет, в котором хранятся его собственные данные в папке, где хранятся другие данные пакета.
Поместите инициализатору в Lisp код, который вы оцениваете так или иначе? Сохраняет вас от выполнения каких-либо сложных материалов при чтении - тогда вы можете просто «eval-buffer» и код, который вы добавляете, когда нужно писать, просто нужно быть '(setq variable' и закрывающий палец в конце. – tripleee
выглядит просто и выполнимо. ^^ Я посмотрю, как это работает, и если это пройдет гладко, я пометю ваше сообщение как ответ. :) –
Не нужно преобразовывать в строку, просто выполните '(read (current-buffer))' во временном буфере. – Lindydancer