Function: add-remove--display-text-property

add-remove--display-text-property is a byte-compiled function defined in compat-31.el.

Signature

(add-remove--display-text-property START END SPEC VALUE &optional OBJECT REMOVE)

Documentation

[Compatibility function for add-remove--display-text-property, defined in
Emacs 31.0.50. See (compat) Emacs 31.0.50' for more details.]

Helper function for add-display-text-property and remove-display-text-property.

Source Code

;; Defined in ~/.emacs.d/elpa/compat-31.0.0.2/compat-31.el
;;;; Defined in subr-x.el

(compat-defun add-remove--display-text-property (start end spec value &optional object remove)  ;; <compat-tests:add-display-text-property>
  "Helper function for `add-display-text-property' and `remove-display-text-property'."
  (let ((sub-start start)
        (sub-end 0)
        (limit (if (stringp object)
                   (min (length object) end)
                 (min end (point-max))))
        disp)
    (while (< sub-end end)
      (setq sub-end (next-single-property-change sub-start 'display object
                                                 limit))
      (if (not (setq disp (get-text-property sub-start 'display object)))
          (unless remove
            (put-text-property sub-start sub-end 'display (list spec value)
                               object))
        (let ((changed nil)
              type)
          (setq disp
                (cond
                 ((vectorp disp)
                  (setq type 'vector)
                  (seq-into disp 'list))
                 ((or (not (consp (car-safe disp)))
                      (eq (caar disp) 'margin))
                  (setq type 'scalar)
                  (list disp))
                 (t
                  (setq type 'list)
                  disp)))
          (when-let* ((old (assoc spec disp)))
            (setq disp (if (eq type 'list)
                           (remove old disp)
                         (delete old disp))
                  changed t))
          (unless remove
            (setq disp (cons (list spec value) disp)
                  changed t))
          (when changed
            (if (not disp)
                (remove-text-properties sub-start sub-end '(display nil) object)
              (when (eq type 'vector)
                (setq disp (seq-into disp 'vector)))
              (put-text-property sub-start sub-end 'display disp object)))))
      (setq sub-start sub-end))))