summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/pdf-info.el28
-rw-r--r--test/pdf-info.ert13
2 files changed, 37 insertions, 4 deletions
diff --git a/lisp/pdf-info.el b/lisp/pdf-info.el
index fd68515..5bd40fb 100644
--- a/lisp/pdf-info.el
+++ b/lisp/pdf-info.el
@@ -167,6 +167,29 @@ server, that it never ran.")
(not (eq t pdf-info--queue))
(tq-process pdf-info--queue)))
+(defun pdf-info-check-epdfinfo (&optional interactive-p)
+ (interactive "p")
+ (let ((executable pdf-info-epdfinfo-program))
+ (unless (stringp executable)
+ (error "pdf-info-epdfinfo-program is unset or not a string"))
+ (unless (file-executable-p executable)
+ (error "pdf-info-epdfinfo-program is not executable"))
+ (let ((tempfile (make-temp-file "pdf-info-check-epdfinfo")))
+ (unwind-protect
+ (with-temp-buffer
+ (with-temp-file tempfile
+ (insert "quit\n"))
+ (unless (= 0 (call-process
+ executable tempfile (current-buffer)))
+ (error "Error running `%s': %s"
+ pdf-info-epdfinfo-program
+ (buffer-string))))
+ (when (file-exists-p tempfile)
+ (delete-file tempfile)))))
+ (when interactive-p
+ (message "The epdfinfo programm appears to be working."))
+ nil)
+
(defun pdf-info-process-assert-running (&optional force)
"Assert a running process.
@@ -197,10 +220,7 @@ error."
(when (eq pdf-info-restart-process-p 'ask)
(setq pdf-info-restart-process-p nil))
(error "The epdfinfo server quit"))
- (unless (and pdf-info-epdfinfo-program
- (file-executable-p pdf-info-epdfinfo-program))
- (error "The variable pdf-info-epdfinfo-program is unset or not executable: %s"
- pdf-info-epdfinfo-program))
+ (pdf-info-check-epdfinfo)
(let* ((process-connection-type) ;Avoid 4096 Byte bug #12440.
(proc (start-process
"epdfinfo" " *epdfinfo*" pdf-info-epdfinfo-program)))
diff --git a/test/pdf-info.ert b/test/pdf-info.ert
index a2596d9..75e0fb4 100644
--- a/test/pdf-info.ert
+++ b/test/pdf-info.ert
@@ -200,6 +200,19 @@
(when (file-exists-p tempfile)
(delete-file tempfile))))))
+(ert-deftest pdf-info-check-epdfinfo ()
+ (should (progn (pdf-info-check-epdfinfo) t))
+ (should-error
+ (let (pdf-info-epdfinfo-program)
+ (pdf-info-check-epdfinfo)))
+ (should-error
+ (let ((pdf-info-epdfinfo-program 42))
+ (pdf-info-check-epdfinfo)))
+ (should-error
+ (let ((pdf-info-epdfinfo-program
+ (make-temp-name "pdf-info")))
+ (pdf-info-check-epdfinfo))))
+
;; FIXME: Write me.
;; (ert-deftest pdf-info-getattachment-from-annot ()
;; (pdf-test-with-test-pdf