pdf-tools 恢复上次关闭时的页面

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)