summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.org7
-rw-r--r--lisp/pdf-annot.el8
-rw-r--r--lisp/pdf-loader.el25
-rw-r--r--lisp/pdf-view.el22
-rw-r--r--test/pdf-loader-test.el24
5 files changed, 62 insertions, 24 deletions
diff --git a/README.org b/README.org
index 34791f7..ff948d7 100644
--- a/README.org
+++ b/README.org
@@ -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))))