Function: evil-select-quote-thing
evil-select-quote-thing is a byte-compiled function defined in
evil-common.el.
Signature
(evil-select-quote-thing THING BEG END TYPE COUNT &optional INCLUSIVE)
Documentation
Selection THING as if it described a quoted object.
THING is typically either evil-quote or evil-chars. This
function is called from evil-select-quote.
Source Code
;; Defined in ~/.emacs.d/elpa/evil-20251108.138/evil-common.el
(defun evil-select-quote-thing (thing beg end _type count &optional inclusive)
"Selection THING as if it described a quoted object.
THING is typically either `evil-quote' or `evil-chars'. This
function is called from `evil-select-quote'."
(save-excursion
(let* ((count (or count 1))
(dir (if (> count 0) 1 -1))
(bnd (let ((b (bounds-of-thing-at-point thing)))
(and b (< (point) (cdr b)) b)))
addcurrent
wsboth)
(if inclusive (setq inclusive t)
(when (= (abs count) 2)
(setq count dir)
(setq inclusive 'quote-only))
;; never extend with exclusive selection
(setq beg nil end nil))
;; check if the previously selected range does not contain a
;; string
(unless (and beg end
(save-excursion
(goto-char (if (> dir 0) beg end))
(forward-thing thing dir)
(and (<= beg (point)) (< (point) end))))
;; if so forget the range
(setq beg nil end nil))
;; check if there is a current object, if not fetch one
(when (not bnd)
(unless (and (zerop (forward-thing thing dir))
(setq bnd (bounds-of-thing-at-point thing)))
(error "No quoted string found"))
(if (> dir 0)
(setq end (point))
(setq beg (point)))
(setq addcurrent t))
;; check if current object is not selected
(when (or (not beg) (not end) (> beg (car bnd)) (< end (cdr bnd)))
;; if not, enlarge selection
(when (or (not beg) (< (car bnd) beg)) (setq beg (car bnd)))
(when (or (not end) (> (cdr bnd) end)) (setq end (cdr bnd)))
(setq addcurrent t wsboth t))
;; maybe count current element
(when addcurrent
(setq count (if (> dir 0) (1- count) (1+ count))))
;; enlarge selection
(goto-char (if (> dir 0) end beg))
(when (and (not addcurrent)
(= count (forward-thing thing count)))
(error "No quoted string found"))
(if (> dir 0) (setq end (point)) (setq beg (point)))
;; add whitespace
(cond
((not inclusive) (setq beg (1+ beg) end (1- end)))
((not (eq inclusive 'quote-only))
;; try to add whitespace in forward direction
(goto-char (if (> dir 0) end beg))
(if (setq bnd (bounds-of-thing-at-point 'evil-space))
(if (> dir 0) (setq end (cdr bnd)) (setq beg (car bnd)))
;; if not found try backward direction
(goto-char (if (> dir 0) beg end))
(if (and wsboth (setq bnd (bounds-of-thing-at-point 'evil-space)))
(if (> dir 0) (setq beg (car bnd)) (setq end (cdr bnd)))))))
(evil-range beg end
;; HACK: fixes #583
;; When not in visual state, an empty range is
;; possible. However, this cannot be achieved with
;; inclusive ranges, hence we use exclusive ranges
;; in this case. In visual state the range must be
;; inclusive because otherwise the selection would
;; be wrong.
(if (evil-visual-state-p) 'inclusive 'exclusive)
:expanded t))))