Subject: Invisibility specs do not apply to specified spaces

From: Clément Pit-Claudel <[email-masked]>
Date: Sat, 25 Apr 2020 19:18:55 -0400

Consider the following program:

(with-current-buffer (get-buffer-create "*spaces*")
  (erase-buffer)
  (let ((indent (propertize " " 'display '(space :width 3))))
    (put-text-property (point) (progn (insert indent "r1\n") (point)) 'invisible 'a)
    (put-text-property (point) (progn (insert indent "r2\n") (point)) 'invisible 'b))
  (add-to-invisibility-spec 'a)
  (pop-to-buffer (current-buffer)))

The first record (r1) is hidden, but not the indentation that precedes it; so, instead of looking like this:

   r2

The buffer looks like this:

      r2

(This is because the invisible property doesn't apply to the display spec.)
It's easy to fix when the replacing display spec is a string (by putting the same invisibility spec on the string), but there doesn't seem to be a way to add an 'invisible property to the specified space.

Clément