Function: pdf-view-mouse-set-region
pdf-view-mouse-set-region is an interactive and natively compiled
function defined in pdf-view.el.
Signature
(pdf-view-mouse-set-region EVENT &optional ALLOW-EXTEND-P RECTANGLE-P SELECTION-STYLE)
Documentation
Select a region of text using the mouse with mouse event EVENT.
Allow for stacking of regions, if ALLOW-EXTEND-P is non-nil.
Create a rectangular region, if RECTANGLE-P is non-nil.
Overwrite pdf-view-selection-style with SELECTION-STYLE,
which is one of glyph, word, or line.
Stores the region in pdf-view-active-region(var)/pdf-view-active-region(fun).
Key Bindings
pdf-view-mode-map <down-mouse-1>
Source Code
;; Defined in /nix/store/63h5z2vmzn0mfavcxi2idi23g5xcgkbl-emacs-packages-deps/share/emacs/site-lisp/elpa/pdf-tools-20260102.1101/pdf-view.el
(defun pdf-view-mouse-set-region (event &optional allow-extend-p
rectangle-p
selection-style)
"Select a region of text using the mouse with mouse event EVENT.
Allow for stacking of regions, if ALLOW-EXTEND-P is non-nil.
Create a rectangular region, if RECTANGLE-P is non-nil.
Overwrite `pdf-view-selection-style' with SELECTION-STYLE,
which is one of `glyph', `word', or `line'.
Stores the region in `pdf-view-active-region'."
(interactive "@e")
(setq pdf-view--have-rectangle-region rectangle-p)
(unless (and (eventp event)
(mouse-event-p event))
(signal 'wrong-type-argument (list 'mouse-event-p event)))
(unless (and allow-extend-p
(or (null (get this-command 'pdf-view-region-window))
(equal (get this-command 'pdf-view-region-window)
(selected-window))))
(pdf-view-deactivate-region))
(put this-command 'pdf-view-region-window
(selected-window))
(let* ((window (selected-window))
(pos (event-start event))
(begin-inside-image-p t)
(begin (if (posn-image pos)
(posn-object-x-y pos)
(setq begin-inside-image-p nil)
(posn-x-y pos)))
(abs-begin (posn-x-y pos))
(page (if pdf-view-roll-minor-mode
(/ (+ 3 (posn-point pos)) 4)
(pdf-view-current-page)))
(margin (frame-char-height))
(selection-style (or selection-style pdf-view-selection-style))
pdf-view-continuous
region)
(setq pdf-view-active-region (list page))
(when (pdf-util-track-mouse-dragging (event 0.05)
(let* ((pos (event-start event))
(end (posn-object-x-y pos))
(end-inside-image-p
(and (eq window (posn-window pos))
(posn-image pos))))
(when (or end-inside-image-p
begin-inside-image-p)
(cond
((and end-inside-image-p
(not begin-inside-image-p))
;; Started selection outside the image, setup begin.
(let* ((xy (posn-x-y pos))
(dxy (cons (- (car xy) (car begin))
(- (cdr xy) (cdr begin))))
(size (pdf-view-image-size t)))
(setq begin (cons (max 0 (min (car size)
(- (car end) (car dxy))))
(max 0 (min (cdr size)
(- (cdr end) (cdr dxy)))))
;; Store absolute position for later.
abs-begin (cons (- (car xy)
(- (car end)
(car begin)))
(- (cdr xy)
(- (cdr end)
(cdr begin))))
begin-inside-image-p t)))
((and begin-inside-image-p
(not end-inside-image-p))
;; Moved outside the image, setup end.
(let* ((xy (posn-x-y pos))
(dxy (cons (- (car xy) (car abs-begin))
(- (cdr xy) (cdr abs-begin))))
(size (pdf-view-image-size t)))
(setq end (cons (max 0 (min (car size)
(+ (car begin) (car dxy))))
(max 0 (min (cdr size)
(+ (cdr begin) (cdr dxy)))))))))
(let* ((iregion (if rectangle-p
(list (min (car begin) (car end))
(min (cdr begin) (cdr end))
(max (car begin) (car end))
(max (cdr begin) (cdr end)))
(list (car begin) (cdr begin)
(car end) (cdr end))))
(y (cdr (posn-x-y pos)))
(dy (- y (cdr abs-begin))))
(setq region
(pdf-util-scale-pixel-to-relative iregion))
(pdf-view-display-region
(cons page (cons region (cdr pdf-view-active-region)))
rectangle-p
selection-style)
(if pdf-view-roll-minor-mode
(cond
((and (> dy 0) (< (- (window-text-height window t) y) margin))
(pdf-roll-scroll-forward
(min margin
(or (nth 3 (pos-visible-in-window-p (posn-point pos) window t)) 0))))
((and (< dy 0) (< (- y (window-header-line-height window)) margin))
(pdf-roll-scroll-backward
(min margin
(or (nth 2 (pos-visible-in-window-p (posn-point pos) window t)) 0)))))
(pdf-util-scroll-to-edges iregion))))))
(cl-callf append (cdr pdf-view-active-region) (list region))
(pdf-view--push-mark))))