diff options
| -rw-r--r-- | README.org | 7 | ||||
| -rw-r--r-- | lisp/pdf-annot.el | 8 | ||||
| -rw-r--r-- | lisp/pdf-loader.el | 25 | ||||
| -rw-r--r-- | lisp/pdf-view.el | 22 | ||||
| -rw-r--r-- | test/pdf-loader-test.el | 24 |
5 files changed, 62 insertions, 24 deletions
@@ -158,6 +158,11 @@ $ sudo dnf install make automake autoconf gcc gcc-c++ ImageMagick libpng-devel zlib-devel poppler-glib-devel #+END_SRC +**** Compiling on Alpine Linux +#+BEGIN_SRC sh + $ apk add build-base g++ gcc automake autoconf libpng-dev glib-dev poppler-dev +#+END_SRC + **** Compiling on Windows PDF Tools can be built and used on Windows using the MSYS2 compiler. This will work with native (not cygwin) Windows builds of @@ -328,7 +333,7 @@ | Navigation | | |--------------------------------------------+-----------------------| | Scroll Up / Down by page-full | ~space~ / ~backspace~ | -| Scroll Up / Down by line | ~C-n~ / ~C-b~ | +| Scroll Up / Down by line | ~C-n~ / ~C-p~ | | Scroll Right / Left | ~C-f~ / ~C-b~ | | Top of Page / Bottom of Page | ~<~ / ~>~ | | Next Page / Previous Page | ~n~ / ~p~ | diff --git a/lisp/pdf-annot.el b/lisp/pdf-annot.el index 28aefef..f33125a 100644 --- a/lisp/pdf-annot.el +++ b/lisp/pdf-annot.el @@ -1473,13 +1473,13 @@ annotation's contents and otherwise `text-mode'. " (pdf-annot-edit-contents-minor-mode 1) (current-buffer)))) (with-current-buffer pdf-annot-edit-contents--buffer - (setq pdf-annot-edit-contents--annotation a) - (funcall pdf-annot-edit-contents-setup-function a) (let ((inhibit-read-only t)) (erase-buffer) (save-excursion (insert (pdf-annot-get a 'contents))) - (set-buffer-modified-p nil) - (current-buffer))))) + (set-buffer-modified-p nil)) + (setq pdf-annot-edit-contents--annotation a) + (funcall pdf-annot-edit-contents-setup-function a) + (current-buffer)))) (defun pdf-annot-edit-contents (a) (select-window diff --git a/lisp/pdf-loader.el b/lisp/pdf-loader.el index 1f5a862..d484ef3 100644 --- a/lisp/pdf-loader.el +++ b/lisp/pdf-loader.el @@ -58,20 +58,21 @@ see." (pdf-tools-install args))) (defun pdf-loader--install (loader) - (setf (alist-get pdf-loader--auto-mode-alist-item - auto-mode-alist nil nil #'equal) - loader) - (setf (alist-get pdf-loader--magic-mode-alist-item - magic-mode-alist nil nil #'equal) - loader)) + (pdf-loader--uninstall) + (push (cons pdf-loader--auto-mode-alist-item loader) + auto-mode-alist) + (push (cons pdf-loader--magic-mode-alist-item loader) + magic-mode-alist)) (defun pdf-loader--uninstall () - (setf (alist-get pdf-loader--auto-mode-alist-item - auto-mode-alist nil :remove #'equal) - nil) - (setf (alist-get pdf-loader--magic-mode-alist-item - magic-mode-alist nil :remove #'equal) - nil)) + (let ((elt (assoc pdf-loader--auto-mode-alist-item + auto-mode-alist))) + (when elt + (setq auto-mode-alist (remove elt auto-mode-alist)))) + (let ((elt (assoc pdf-loader--magic-mode-alist-item + magic-mode-alist))) + (when elt + (setq magic-mode-alist (remove elt magic-mode-alist))))) (provide 'pdf-loader) ;;; pdf-loader.el ends here diff --git a/lisp/pdf-view.el b/lisp/pdf-view.el index 1bf7ca8..f1e3846 100644 --- a/lisp/pdf-view.el +++ b/lisp/pdf-view.el @@ -331,6 +331,10 @@ PNG images in Emacs buffers." "-")))) (write-region nil nil tempfile nil 'no-message) (setq-local pdf-view--buffer-file-name tempfile))) + ;; Decryption needs to be done before any other function calls into + ;; pdf-info.el (e.g. from the mode-line during redisplay during + ;; waiting for process output). + (pdf-view-decrypt-document) ;; Setup scroll functions (if (boundp 'mwheel-scroll-up-function) ; not --without-x build @@ -350,7 +354,10 @@ PNG images in Emacs buffers." ;; Setup other local variables. (setq-local mode-line-position '(" P" (:eval (number-to-string (pdf-view-current-page))) - "/" (:eval (number-to-string (pdf-cache-number-of-pages))))) + ;; Avoid errors during redisplay. + "/" (:eval (or (ignore-errors + (number-to-string (pdf-cache-number-of-pages))) + "???")))) (setq-local auto-hscroll-mode nil) (setq-local pdf-view--server-file-name (pdf-view-buffer-file-name)) ;; High values of scroll-conservatively seem to trigger @@ -390,11 +397,10 @@ PNG images in Emacs buffers." 'pdf-view-new-window-function nil t) (image-mode-setup-winprops) - ;; Decryption needs to be done before any other function calls into - ;; pdf-info.el . - (pdf-view-decrypt-document) ;; Issue a warning in the future about incompatible modes. - (run-with-timer 1 nil #'pdf-view-check-incompatible-modes + (run-with-timer 1 nil (lambda (buffer) + (when (buffer-live-p buffer) + (pdf-view-check-incompatible-modes buffer))) (current-buffer)) ;; Setup initial page and start display (pdf-view-goto-page (or (pdf-view-current-page) 1))) @@ -490,10 +496,12 @@ Optional parameters IGNORE-AUTO and NOCONFIRM are defined as in (defun pdf-view-close-document () "Return immediately after closing document. -See also `pdf-info-close', which does not return immediately." +This function always suceeds. See also `pdf-info-close', which +does not return immediately." (when (pdf-info-running-p) (let ((pdf-info-asynchronous 'ignore)) - (pdf-info-close)))) + (ignore-errors + (pdf-info-close))))) ;; * ================================================================== * diff --git a/test/pdf-loader-test.el b/test/pdf-loader-test.el new file mode 100644 index 0000000..a7bc79f --- /dev/null +++ b/test/pdf-loader-test.el @@ -0,0 +1,24 @@ +;; -*- lexical-binding: t -*- + +(require 'pdf-loader) +(require 'ert) +(require 'cl-lib) + +(ert-deftest pdf-loader-activation () + :expected-result :failed ;; Until someone figures out how to run the + ;; tests w/o loading all of the package. + (should-not (memq 'pdf-tools features)) + (pdf-loader-install) + (with-current-buffer (find-file "test.pdf") + (should (eq major-mode 'pdf-view-mode)))) + +(ert-deftest pdf-loader-install/uninstall-alists () + (cl-labels ((alists-installed-p () + (and (assoc pdf-loader--auto-mode-alist-item + auto-mode-alist) + (assoc pdf-loader--magic-mode-alist-item + magic-mode-alist)))) + (pdf-loader--install #'ignore) + (should (alists-installed-p)) + (pdf-loader--uninstall) + (should-not (alists-installed-p)))) |
