Subject: bug#49695: 27.2; wrap-prefix text property doesn't work with display property

From: Shingo Tanaka <[email-masked]>
Date: Thu, 22 Jul 2021 21:51:23 +0900

Hi,

wrap-prefix text property doesn't work properly when a character with display
property is in the beginning of a line.  Here is how to reproduce.

1. Goto *scratch* buffer
2. Evaluate below preconditioning function.

(defun preconditioning ()
  (interactive)
  (goto-char (point-min))
  (insert "This is a sample text.\n")
  (forward-line -1)
  (put-text-property (line-beginning-position) (line-end-position)
                     'wrap-prefix "    ")
  (search-forward "This is a ")
  (put-text-property (point) (1+ (point)) 'display "X")
  (goto-char (point-min)))

3. Execute it with M-x preconditioning
4. Confirm the text "This is a sample text." is inserted in the beginning of
   the buffer and your cursor is as well.  Note that this text has wrap-prefix
   property and "X" is the character which has display property.
5. Start typing spaces (or any character) and observe how the text is wrapped.
6. You will see wrap-prefix works correctly until wrapped point gets "X" like:

                                                              This is a Xample
    text.

7. However, you will see it doesn't work when "X" gets in the beginning of the
   line like:

                                                                     This is a
Xample text.

This issue is reproducible either word-wrap is nil or t, and also with Emacs
28.0.50.

Regards,
Shingo