fix: isolate project bookmarks from globals, mu4e maildir format

This commit is contained in:
2026-07-17 15:17:55 -04:00
parent 5be49106d3
commit 453bda34b7
2 changed files with 50 additions and 14 deletions

View File

@@ -2316,8 +2316,8 @@ only injects when the project's context-tag matches current mu4e context."
("Drafts" . ?D)
("Trash" . ?T)
("Archive" . ?A)))
(push (cons (format "[%s] %s" proj-tag (car folder))
(format "maildir:/%s.%s" (car folder) proj-tag))
(push (cons (format "maildir:/%s.%s" (car folder) proj-tag)
(cdr folder))
project-bm)))
;; Inject into mu4e-maildir-shortcuts
(setq gortium/project-mu4e-bookmarks project-bm)
@@ -3572,11 +3572,19 @@ Returns alist ((NAME . URL) ...) where URL is the link target."
(nreverse bookmarks))))))
(defun gortium//append-bookmark-to-plan (name url)
"Add a bookmark NAME with URL to the project's .bookmarks file."
"Add a bookmark NAME with URL to the project's .bookmarks file.
Saves only project bookmarks without contaminating global list."
(when (projectile-project-p)
(let ((proj-file (expand-file-name ".bookmarks" (projectile-project-root))))
(let* ((proj-file (expand-file-name ".bookmarks" (projectile-project-root)))
(saved-alist (copy-tree bookmark-alist)))
;; Save globals first, then load project bookmarks
(bookmark-save)
(when (file-exists-p proj-file)
(bookmark-load proj-file t))
(bookmark-store name `((filename . ,url)) nil)
(bookmark-save nil proj-file)
;; Restore globals
(setq bookmark-alist saved-alist)
(message "Bookmark added to .bookmarks"))))
(defun gortium//remove-bookmark-from-plan (name)
"Remove a bookmark entry from * Bookmarks in the Plan file."
@@ -3608,10 +3616,20 @@ Project bookmarks go to .bookmarks file in project root."
(name (read-string (format "[%s] Bookmark name: " tag)))
(proj-file (expand-file-name
".bookmarks" (projectile-project-root)))
(bm (bookmark-make-record)))
(bookmark-store name (cdr bm) nil)
(saved-alist (copy-tree bookmark-alist))
(record (bookmark-make-record)))
;; Save current globals to disk first
(bookmark-save)
;; Load existing .bookmarks (if any)
(when (file-exists-p proj-file)
(bookmark-load proj-file t))
;; Add new bookmark to alist
(bookmark-store name (cdr record) nil)
;; Write ONLY project bookmarks to .bookmarks
(bookmark-save nil proj-file)
(message "Project bookmark saved to .bookmarks"))
;; Restore global bookmarks
(setq bookmark-alist saved-alist)
(message "Project bookmark \"%s\" saved to .bookmarks" name))
(user-error "Not in a Projectile project"))))))
(defun gortium/list-project-bookmarks ()

View File

@@ -1470,8 +1470,8 @@ only injects when the project's context-tag matches current mu4e context."
("Drafts" . ?D)
("Trash" . ?T)
("Archive" . ?A)))
(push (cons (format "[%s] %s" proj-tag (car folder))
(format "maildir:/%s.%s" (car folder) proj-tag))
(push (cons (format "maildir:/%s.%s" (car folder) proj-tag)
(cdr folder))
project-bm)))
;; Inject into mu4e-maildir-shortcuts
(setq gortium/project-mu4e-bookmarks project-bm)
@@ -2642,11 +2642,19 @@ Returns alist ((NAME . URL) ...) where URL is the link target."
(nreverse bookmarks))))))
(defun gortium//append-bookmark-to-plan (name url)
"Add a bookmark NAME with URL to the project's .bookmarks file."
"Add a bookmark NAME with URL to the project's .bookmarks file.
Saves only project bookmarks without contaminating global list."
(when (projectile-project-p)
(let ((proj-file (expand-file-name ".bookmarks" (projectile-project-root))))
(let* ((proj-file (expand-file-name ".bookmarks" (projectile-project-root)))
(saved-alist (copy-tree bookmark-alist)))
;; Save globals first, then load project bookmarks
(bookmark-save)
(when (file-exists-p proj-file)
(bookmark-load proj-file t))
(bookmark-store name `((filename . ,url)) nil)
(bookmark-save nil proj-file)
;; Restore globals
(setq bookmark-alist saved-alist)
(message "Bookmark added to .bookmarks"))))
(defun gortium//remove-bookmark-from-plan (name)
"Remove a bookmark entry from * Bookmarks in the Plan file."
@@ -2678,10 +2686,20 @@ Project bookmarks go to .bookmarks file in project root."
(name (read-string (format "[%s] Bookmark name: " tag)))
(proj-file (expand-file-name
".bookmarks" (projectile-project-root)))
(bm (bookmark-make-record)))
(bookmark-store name (cdr bm) nil)
(saved-alist (copy-tree bookmark-alist))
(record (bookmark-make-record)))
;; Save current globals to disk first
(bookmark-save)
;; Load existing .bookmarks (if any)
(when (file-exists-p proj-file)
(bookmark-load proj-file t))
;; Add new bookmark to alist
(bookmark-store name (cdr record) nil)
;; Write ONLY project bookmarks to .bookmarks
(bookmark-save nil proj-file)
(message "Project bookmark saved to .bookmarks"))
;; Restore global bookmarks
(setq bookmark-alist saved-alist)
(message "Project bookmark \"%s\" saved to .bookmarks" name))
(user-error "Not in a Projectile project"))))))
(defun gortium/list-project-bookmarks ()