summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/pdf-view.el21
-rw-r--r--test/pdf-view-test.el9
2 files changed, 28 insertions, 2 deletions
diff --git a/lisp/pdf-view.el b/lisp/pdf-view.el
index f1e3846..78f8127 100644
--- a/lisp/pdf-view.el
+++ b/lisp/pdf-view.el
@@ -32,6 +32,8 @@
(require 'bookmark)
(require 'password-cache)
+(declare-function cua-copy-region "cua-base")
+
;; * ================================================================== *
;; * Customizations
@@ -377,10 +379,15 @@ PNG images in Emacs buffers."
;; Enable transient-mark-mode, so region deactivation when quitting
;; will work.
(setq-local transient-mark-mode t)
- ;; Disable cua-mode, since it does not work with pdf-view-mode.
+ ;; In Emacs >= 24.4, `cua-copy-region' should have been advised when
+ ;; loading pdf-view.el so as to make it work with
+ ;; pdf-view-mode. Disable cua-mode if that is not the case.
;; FIXME: cua-mode is a global minor-mode, but setting cua-mode to
;; nil seems to do the trick.
- (when (bound-and-true-p cua-mode)
+ (when (and (bound-and-true-p cua-mode)
+ (not (and (fboundp 'advice-member-p)
+ (advice-member-p #'cua-copy-region--pdf-view-advice
+ 'cua-copy-region))))
(setq-local cua-mode nil))
(add-hook 'window-configuration-change-hook
@@ -405,6 +412,16 @@ PNG images in Emacs buffers."
;; Setup initial page and start display
(pdf-view-goto-page (or (pdf-view-current-page) 1)))
+(when (fboundp 'advice-add)
+ (defun cua-copy-region--pdf-view-advice (&rest _)
+ "If current buffer is in `pdf-view' mode, call
+`pdf-view-kill-ring-save'."
+ (when (eq major-mode 'pdf-view-mode)
+ (pdf-view-kill-ring-save)))
+ (advice-add 'cua-copy-region
+ :before-until
+ #'cua-copy-region--pdf-view-advice))
+
(defun pdf-view-check-incompatible-modes (&optional buffer)
"Check BUFFER for incompatible modes, maybe issue a warning."
(with-current-buffer (or buffer (current-buffer))
diff --git a/test/pdf-view-test.el b/test/pdf-view-test.el
index 58f6be5..982850d 100644
--- a/test/pdf-view-test.el
+++ b/test/pdf-view-test.el
@@ -17,3 +17,12 @@
(should (numberp (pdf-info-number-of-pages temp)))))
(when (file-exists-p temp)
(delete-file temp))))
+
+(ert-deftest pdf-view-cua-copy-region ()
+ (pdf-test-with-test-pdf
+ (pdf-view-mark-whole-page)
+ (should (string-match-p "PDF Tools\\(?:.\\|\n\\)*in memory"
+ (let (kill-ring)
+ (require 'cua-base)
+ (cua-copy-region)
+ (car kill-ring))))))