From 3084f651d6c0f5e6b4b3ac699b59742f98af2248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simen=20Heggest=C3=B8yl?= Date: Fri, 5 Jun 2020 19:32:30 +0200 Subject: [PATCH] Save project list as lisp data Save the project list file as lisp data instead of line separated strings to make it more extendable in the future. * lisp/progmodes/project.el (project--read-project-list) (project--write-project-list, project--add-to-project-list-front) (project--remove-from-project-list): Adjust to `project--list' now being an alist. --- lisp/progmodes/project.el | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 4d57fb25fd..3b007bc8dc 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -757,19 +757,13 @@ project--list "List of known project directories.") (defun project--read-project-list () - "Initialize `project--list' from the project list file." + "Initialize `project--list' from the file `project-list-file'." (let ((filename project-list-file)) (setq project--list - (when (file-exists-p filename) + (when (file-readable-p filename) (with-temp-buffer (insert-file-contents filename) - (let ((dirs (split-string (buffer-string) "\n" t)) - (project-list '())) - (dolist (dir dirs) - (cl-pushnew (file-name-as-directory dir) - project-list - :test #'equal)) - (reverse project-list))))))) + (car (read-from-string (buffer-string)))))))) (defun project--ensure-read-project-list () "Initialize `project--list' if it hasn't already been." @@ -780,7 +774,8 @@ project--write-project-list "Persist `project--list' to the project list file." (let ((filename project-list-file)) (with-temp-buffer - (insert (string-join project--list "\n")) + (insert ";;; -*- lisp-data -*-\n") + (pp project--list (current-buffer)) (write-region nil nil filename nil 'silent)))) (defun project--add-to-project-list-front (pr) @@ -788,9 +783,9 @@ project--add-to-project-list-front Save the result to disk if the project list was changed." (project--ensure-read-project-list) (let ((dir (project-root pr))) - (unless (equal (car project--list) dir) - (setq project--list (delete dir project--list)) - (push dir project--list) + (unless (equal (caar project--list) dir) + (setq project--list (assoc-delete-all dir project--list)) + (push (list dir) project--list) (project--write-project-list)))) (defun project--remove-from-project-list (pr-dir) @@ -798,8 +793,8 @@ project--remove-from-project-list If the directory was in the list before the removal, save the result to disk." (project--ensure-read-project-list) - (when (member pr-dir project--list) - (setq project--list (delete pr-dir project--list)) + (when (assoc pr-dir project--list) + (setq project--list (assoc-delete-all pr-dir project--list)) (message "Project `%s' not found; removed from list" pr-dir) (project--write-project-list))) -- 2.26.2