save-place-mode
不支持 pdf-tools,貌似 save-place-mode
也没法扩展,想恢复上次关闭时的页面得自己折腾,就像这个 issue 中提到的:
刚刚花了半小时自己实现了一个,基本上知道下面两个 API 就 OK 了
-
(pdf-view-current-page)
得到页码
-
(pdf-view-goto-page page)
跳转到指定页码
(defvar chunyang-pdf-alist nil
"List of (FILENAME . PAGE).")
(defun chunyang-pdf-view-mode-save-page ()
(when (and (eq major-mode 'pdf-view-mode)
buffer-file-name)
(setq chunyang-pdf-alist
(delq (assoc buffer-file-name chunyang-pdf-alist)
chunyang-pdf-alist))
(push (cons buffer-file-name (pdf-view-current-page))
chunyang-pdf-alist)))
(add-hook 'kill-buffer-hook #'chunyang-pdf-view-mode-save-page 'append)
(defun chunyang-pdf-view-mode-open-page ()
(when-let ((page (assoc-default buffer-file-name chunyang-pdf-alist)))
(pdf-view-goto-page page)))
(add-hook 'pdf-view-mode-hook #'chunyang-pdf-view-mode-open-page 'append)
emacs-news 里面提到了一个 package, pdf-view-restore,可以试试,但看样子它会为每个 pdf 文件创建一个记录页码的文件。
Centaur 的实现方案:
pdf-view-restore 倒是可以看看是否好用。
Update: pdf-view-restore 挺好用,准备集成进来可以简化代码。
或许可以实现一个扩展性更好的 save-place-mode
,支持自定义记录以及跳转回去的方式,而不是仅仅支持 (point)
和 (goto-char POINT)
。