summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorjao <jao@gnu.org>2024-02-15 23:52:08 +0000
committerjao <jao@gnu.org>2024-02-15 23:52:08 +0000
commitc23d9cbdf8f10fa6ec1a6fb16ea963d733d67d47 (patch)
treeb2df8084af8b4383e22807264199b89015774cb6
parent36f316b7ab542f4b1a23a59940b9bb60b89ea0a5 (diff)
downloadelibs-c23d9cbdf8f10fa6ec1a6fb16ea963d733d67d47.tar.gz
elibs-c23d9cbdf8f10fa6ec1a6fb16ea963d733d67d47.tar.bz2
jao-doc-session: using built-in persistent vars
-rw-r--r--init.el3
-rw-r--r--lib/doc/jao-doc-session.el40
2 files changed, 14 insertions, 29 deletions
diff --git a/init.el b/init.el
index 9527abf..f29fb75 100644
--- a/init.el
+++ b/init.el
@@ -94,6 +94,9 @@
(jao-load-site-el "pre")
;;; System Utilities
+;;; persist
+(require 'persist)
+
;;;; (no) backups
(setq vc-make-backup-files nil
make-backup-files nil)
diff --git a/lib/doc/jao-doc-session.el b/lib/doc/jao-doc-session.el
index 669b191..877a8cb 100644
--- a/lib/doc/jao-doc-session.el
+++ b/lib/doc/jao-doc-session.el
@@ -1,6 +1,6 @@
;;; jao-doc-session.el --- persistent document sessions -*- lexical-binding: t; -*-
-;; Copyright (C) 2022 jao
+;; Copyright (C) 2022, 2024 jao
;; Author: jao <mail@jao.io>
;; Keywords: docs
@@ -20,30 +20,18 @@
;;; Code:
-(defvar jao-doc-session-file "~/.emacs.d/cache/doc-view-session.eld")
+(persist-defvar jao-doc-session nil "Documents session")
+
(defvar-local jao-doc-session--is-doc nil)
(defun jao-doc-session-is-doc (&optional buffer)
+ "Check whether the given or current buffer belong to the doc session."
(buffer-local-value 'jao-doc-session--is-doc (or buffer (current-buffer))))
-(defun jao-doc-session--read-file (file)
- (let ((buff (find-file-noselect file)))
- (ignore-errors
- (with-current-buffer buff
- (goto-char (point-min)))
- (read buff))))
-
-(defun jao-doc-session--save-to-file (file value)
- (with-current-buffer (find-file-noselect file)
- (erase-buffer)
- (insert (format "%S" value))
- (save-buffer)))
-
-(defun jao-doc-session (&optional file)
- (let ((file (or file jao-doc-session-file)))
- (jao-doc-session--read-file file)))
+(defun jao-doc-session (&optional file) jao-doc-session)
(defun jao-doc-session-save (&optional skip-current force)
+ "Traverse all current buffers and update the value of `jao-doc-session'."
(interactive)
(let ((docs '())
(cb (and skip-current (current-buffer))))
@@ -51,27 +39,21 @@
(when-let (fs (and (not (eq cb b)) (jao-doc-session-is-doc b)))
(dolist (f fs) (add-to-list 'docs f))))
(when (or force (> (length docs) 0))
- (jao-doc-session--save-to-file jao-doc-session-file docs))))
-
-(defun jao-doc-session--save-session ()
- (let ((inhibit-message t)
- (message-log-max nil))
- (when (not jao-doc-session-inhibit-save) (jao-doc-session-save))
- t))
+ (setq jao-doc-session docs))))
(defun jao-doc-session-mark (&optional path)
+ "Mark the current buffer's file, or PATH, as persistent across sessions."
(unless (listp jao-doc-session--is-doc)
(setq jao-doc-session--is-doc (ensure-list jao-doc-session--is-doc)))
(cl-pushnew (or path (buffer-file-name)) jao-doc-session--is-doc)
- (jao-doc-session--save-session))
+ (jao-doc-session-save))
-(defun jao-doc-session--save-1 ()
+(defun jao-doc-session--maybe-save ()
(when (jao-doc-session-is-doc) (jao-doc-session-save t)))
(defvar jao-doc-session-inhibit-save nil)
-(add-hook 'kill-emacs-query-functions #'jao-doc-session--save-session)
-(add-hook 'kill-buffer-hook #'jao-doc-session--save-1)
+(add-hook 'kill-buffer-hook #'jao-doc-session--maybe-save)
(provide 'jao-doc-session)
;;; jao-doc-session.el ends here