unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: StrawberryTea <look@strawberrytea.xyz>
To: Eli Zaretskii <eliz@gnu.org>
Cc: yantar92@posteo.net, kevin.legouguec@gmail.com,
	65896@debbugs.gnu.org, juri@linkov.net
Subject: bug#65896: 30.0.50; folding text with text properties prevents background from extending past the newline
Date: Sat, 30 Sep 2023 17:55:27 -0500	[thread overview]
Message-ID: <87msx3uum1.fsf@strawberrytea.xyz> (raw)
In-Reply-To: <83sf6vai0i.fsf@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 2574 bytes --]

Basically, I want to be able to do this in Org mode:
<https://pasteboard.co/E17ioBts7HTl.png>

So I want a way to extend the heading background even when the heading is
folded. Currently this works when there are no nested headings:

(advice-add #’org-fold-core-region :around #’cae-org-fold-region-a)
(defun cae-org-fold-region-a (oldfun from to flag &optional spec-or-alias)
  (let ((shift-fold-p (and (eq to (point-max)) (not (eq from to)) flag)))
    (when shift-fold-p
      (setq to (1- to)))
    (funcall oldfun from to flag spec-or-alias)
    (remove-overlays from (1+ to) ’cae-org-fold-heading t)
    (when flag
      (let ((o (make-overlay to (1+ to) nil ’front-advance)))
        (overlay-put o ’evaporate t)
        (overlay-put o ’cae-org-fold-heading t)
        (overlay-put o ’face (save-excursion (goto-char from) (face-at-point)))
        (when shift-fold-p
          (overlay-put o ’display “\n”))))))

Basically, when the text is folded, it uses the face of the first visible
newline after the fold to determine the background.

The elisp approach is to maintain overlays at the end of each folded region and
it becomes complicated with nested headings. I was thinking that instead, we
could have the extend property (or an extra option on :extend) be used within
the line to colorize the background of the newline at the end.

Eli Zaretskii <eliz@gnu.org> writes:

>> From: StrawberryTea <look@strawberrytea.xyz>
>> Cc: Kévin Le Gouguec <kevin.legouguec@gmail.com>, Eli
>>  Zaretskii
>>  <eliz@gnu.org>, 65896@debbugs.gnu.org, Ihor Radchenko
>>  <yantar92@posteo.net>
>> Date: Fri, 29 Sep 2023 14:07:17 -0500
>>
>> Basically, it’s always possible to overlay the newline after a fold or shorten
>> the fold by one character and overlay a newline for the last character then set
>> a face and extend property for that newline.
>
> Sorry, I don’t think I follow.  Could you please show some example of
> this, perhaps with “ASCII art”?  What do you mean by “overlay the
> newline”, and what is “the fold” in this context?
>
>> What I think could be an alternative to adding all these overlays is a change on
>> the display engine side so that the extend property on a character extends its
>> face background regardless of whether it’s a newline character.
>
> That is a non-starter, since there’s no text in that part.  We don’t
> show any parts of the text area with any face unless that part is “in
> the middle of text”, and the part after EOB isn’t.

  reply	other threads:[~2023-09-30 22:55 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-12 18:00 bug#65896: 30.0.50; folding text with text properties prevents background from extending past the newline StrawberryTea
2023-09-12 18:51 ` Eli Zaretskii
2023-09-12 20:51   ` Kévin Le Gouguec
2023-09-12 21:35     ` LemonBreezes
2023-09-13 11:54       ` Eli Zaretskii
2023-09-20 12:50         ` Ihor Radchenko
2023-09-21 11:07           ` Eli Zaretskii
2023-09-22 10:12             ` Ihor Radchenko
2023-09-22 11:56               ` Eli Zaretskii
2023-09-22 12:00                 ` Ihor Radchenko
2023-09-22 12:48                   ` Eli Zaretskii
2023-09-23 10:51                     ` Ihor Radchenko
2023-09-23 11:11                       ` Eli Zaretskii
     [not found]                         ` <871qep2l2z.fsf@localhost>
2023-09-23 12:38                           ` Eli Zaretskii
2023-09-23 12:59                             ` Ihor Radchenko
2023-09-23 13:10                               ` Eli Zaretskii
2023-09-23 14:06                                 ` Ihor Radchenko
2023-09-23 18:33                                   ` StrawberryTea
2023-09-23 19:05                                     ` Eli Zaretskii
2023-09-23 19:05                                       ` StrawberryTea
2023-09-24  5:00                                         ` Eli Zaretskii
2023-09-24  7:53                                           ` StrawberryTea
2023-09-24 10:19                                             ` Ihor Radchenko
2023-09-24 11:59                                               ` Eli Zaretskii
2023-09-24 18:30                                                 ` StrawberryTea
2023-09-25  4:38                                                   ` Eli Zaretskii
2023-09-26  8:18                                                 ` Ihor Radchenko
2023-09-29  5:47                                                   ` Eli Zaretskii
2024-01-22 14:45                                                   ` Ihor Radchenko
2024-01-23 19:14                                                     ` Kévin Le Gouguec
2024-01-24 16:42                                                       ` Ihor Radchenko
2024-01-25  7:46                                                         ` Kévin Le Gouguec
2024-01-25 13:47                                                           ` Ihor Radchenko
2023-09-21 12:54           ` Eli Zaretskii
2023-09-21 21:07             ` Kévin Le Gouguec
2023-09-22  6:40               ` Juri Linkov
2023-09-22  7:20                 ` Eli Zaretskii
2023-09-29  7:12                 ` Kévin Le Gouguec
2023-09-29 15:41                   ` Juri Linkov
2023-09-29 19:07                     ` StrawberryTea
2023-09-30 13:49                       ` Eli Zaretskii
2023-09-30 22:55                         ` StrawberryTea [this message]
2023-10-01  8:42                           ` Eli Zaretskii
2023-10-02  4:28                             ` StrawberryTea
2023-10-02  6:05                               ` Eli Zaretskii
2023-10-05 20:59                                 ` StrawberryTea
2023-09-13 11:48     ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87msx3uum1.fsf@strawberrytea.xyz \
    --to=look@strawberrytea.xyz \
    --cc=65896@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    --cc=juri@linkov.net \
    --cc=kevin.legouguec@gmail.com \
    --cc=yantar92@posteo.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).