From: Ergus <spacibba@aol.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Merging the underline attribute at EOL
Date: Mon, 16 Dec 2019 04:49:01 +0100 [thread overview]
Message-ID: <20191216034901.amvufpomffmjaivy@Ergus> (raw)
In-Reply-To: <83eex771ky.fsf@gnu.org>
Hi Eli:
Actually this seems to be related with the face merge we do latter to
fill the space until the window edge and how we calculate
extend_face_id.
It is taking the text-properties in the call to face_at_pos just before
the condition you mention.
So the problem seems to be in face_at_buffer_position in these lines:
/* Merge in attributes specified via text properties. */
if (!NILP (prop))
merge_face_ref (w, f, prop, attrs, true, NULL, attr_filter);
So maybe that is the condition we need to extend...
As a dumb test I just did:
if (!NILP (prop) && attr_filter > 0)
merge_face_ref (w, f, prop, attrs, true, NULL, attr_filter);
And it seems to solve this specific issue (in tui and gui)... but it is
inconsistent and I am not aware of the possible side effects...
Or probably we must fix this inside merge_face_ref. What do you think?
On Sat, Dec 14, 2019 at 10:28:45AM +0200, Eli Zaretskii wrote:
>Jimmy,
>
>The current code in extend_face_to_end_of_line says:
>
> /* Face extension extends the background and box of IT->extend_face_id
> to the end of the line. If the background equals the background
> of the frame, we don't have to do anything. */
> struct face *face = FACE_FROM_ID (f, (it->face_before_selective_p
> ? it->saved_face_id
> : extend_face_id));
>
> if (FRAME_WINDOW_P (f)
> && MATRIX_ROW_DISPLAYS_TEXT_P (it->glyph_row)
> && face->box == FACE_NO_BOX
> && FACE_COLOR_TO_PIXEL (face->background, f) == FRAME_BACKGROUND_PIXEL (f)
>#ifdef HAVE_WINDOW_SYSTEM
> && !face->stipple
>#endif
> && !it->glyph_row->reversed_p
> && !Vdisplay_fill_column_indicator)
> return;
>
>This has the effect that the underline property is not extended past
>EOL, and neither are overline and strike-through. Only the box
>attribute is extended. Was this how we intended things to be, or is
>this just an oversight?
>
>Currently, this creates some strange counter-intuitive effects. For
>example, try this in "emacs -Q":
>
> C-p
> M-x font-lock-mode RET
> M-: (add-text-properties (point) (1+ (point)) '(face (:underline t :extend t))) RET
>
>You will see that the underline is limited only to the newline at
>point, it is not extended to the edge of the window. But if you now
>do this:
>
> C-SPC
> C-n
>
>suddenly the entire last line is underlined, in addition to having the
>background color from the region face.
>
>If you replace the :underline with :box in the above example, then the
>last line has the box attribute extended to EOL even before setting
>the region, as expected.
>
>So I think this is a bug, and we should add conditions to the above
>'if' clause. Am I missing something?
>
next prev parent reply other threads:[~2019-12-16 3:49 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-14 8:28 Merging the underline attribute at EOL Eli Zaretskii
2019-12-16 3:12 ` Ergus
2019-12-16 16:12 ` Eli Zaretskii
2019-12-16 3:49 ` Ergus [this message]
2019-12-16 16:17 ` Eli Zaretskii
2019-12-16 16:11 ` Ergus
2019-12-16 17:05 ` Eli Zaretskii
2019-12-16 20:31 ` Ergus
2019-12-17 3:22 ` Eli Zaretskii
2019-12-17 14:13 ` Ergus
2019-12-17 17:18 ` Eli Zaretskii
2019-12-19 1:19 ` Ergus
2019-12-19 15:38 ` Eli Zaretskii
2019-12-22 22:46 ` Ergus
2019-12-23 13:35 ` 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=20191216034901.amvufpomffmjaivy@Ergus \
--to=spacibba@aol.com \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
/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).