From: "Daniel Martín via Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: luangruo@yahoo.com, 62573@debbugs.gnu.org,
Al Haji-Ali <abdo.haji.ali@gmail.com>
Subject: bug#62573: 29.0.60; Cursor color not being inverted in emacs-29
Date: Sat, 01 Apr 2023 21:56:33 +0200 [thread overview]
Message-ID: <m1sfdj2x72.fsf@yahoo.es> (raw)
In-Reply-To: <83bkk817rr.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 01 Apr 2023 08:38:48 +0300")
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Al Haji-Ali <abdo.haji.ali@gmail.com>
>> Cc: 62573@debbugs.gnu.org
>> Date: Fri, 31 Mar 2023 22:46:00 +0100
>>
>>
>> On 31/03/2023, Eli Zaretskii wrote:
>> > On which platform is that and with what Emacs configuration? (Using
>> > "M-x report-emacs-bug" would have collected this information
>> > automatically for you.)
>> Apologies, below are the details. I can also add the config of emacs 28.2 if that's helpful.
>> I am not sure what the issue is or how to debug it, so any hints are appreciated.
>>
>> ---------------------------------------------------------------------------
>> In GNU Emacs 29.0.60 (build 1, aarch64-apple-darwin22.3.0, NS
>> appkit-2299.40 Version 13.2.1 (Build 22D68)) of 2023-03-22 built on
>> HW-R9XXWKPJ4D
>> Windowing system distributor 'Apple', version 10.3.2299
>> System Description: macOS 13.2.1
>
> This is macOS, so I suspect the problem is specific to macOS. Can
> someone with access to macOS please try reproducing this, and perhaps
> debugging the problem?
This bug is a regression caused by
07715630ad9df9cb681cbadecbaf73fc9c698061. (Adding Po Lu to the CC.)
From what I see, the font display refactor removed this code from
src/nsterm.m:
- face = FACE_FROM_ID_OR_NULL (f, phys_cursor_glyph->face_id);
- if (face && NS_FACE_BACKGROUND (face)
- == ns_index_color (FRAME_CURSOR_COLOR (f), f))
- {
- [ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), f) set];
- hollow_color = FRAME_CURSOR_COLOR (f);
- }
- else
which seems to be responsible for the cursor color change when the
background face color is the same as the cursor color. I can't find
that logic in the current code, so I think we miss it from the
refactoring.
I've solved the bug by replicating that logic in the appropriate places,
nsterm.m and macfont.m:
diff --git a/src/macfont.m b/src/macfont.m
index d0cdbcd08c7..d14cf5f9c98 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -2933,9 +2933,15 @@ So we use CTFontDescriptorCreateMatchingFontDescriptor (no
{
if (s->hl == DRAW_CURSOR)
{
- CGColorRef colorref = get_cgcolor_from_nscolor (FRAME_CURSOR_COLOR (f), f);
- CGContextSetFillColorWithColor (context, colorref);
- CGColorRelease (colorref);
+ if (face && NS_FACE_BACKGROUND (face)
+ == [(NSColor*)FRAME_CURSOR_COLOR (f) unsignedLong])
+ CG_SET_FILL_COLOR_WITH_FACE_FOREGROUND (context, face);
+ else
+ {
+ CGColorRef colorref = get_cgcolor_from_nscolor (FRAME_CURSOR_COLOR (f), f);
+ CGContextSetFillColorWithColor (context, colorref);
+ CGColorRelease (colorref);
+ }
}
else
CG_SET_FILL_COLOR_WITH_FACE_BACKGROUND (context, face);
@@ -2949,9 +2955,15 @@ So we use CTFontDescriptorCreateMatchingFontDescriptor (no
CGContextScaleCTM (context, 1, -1);
if (s->hl == DRAW_CURSOR)
{
- CGColorRef colorref = get_cgcolor_from_nscolor (FRAME_BACKGROUND_COLOR (f), f);
- CGContextSetFillColorWithColor (context, colorref);
- CGColorRelease (colorref);
+ if (face && NS_FACE_BACKGROUND (face)
+ == [(NSColor*)FRAME_CURSOR_COLOR (f) unsignedLong])
+ CG_SET_FILL_COLOR_WITH_FACE_BACKGROUND (context, face);
+ else
+ {
+ CGColorRef colorref = get_cgcolor_from_nscolor (FRAME_BACKGROUND_COLOR (f), f);
+ CGContextSetFillColorWithColor (context, colorref);
+ CGColorRelease (colorref);
+ }
}
else
CG_SET_FILL_COLOR_WITH_FACE_FOREGROUND (context, face);
diff --git a/src/nsterm.m b/src/nsterm.m
index 46007ec4fcb..2f31a279bfc 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -3750,14 +3750,17 @@ Function modeled after x_draw_glyph_string_box ().
{
struct face *face = s->face;
if (!face->stipple)
- {
- if (s->hl != DRAW_CURSOR)
- [(NS_FACE_BACKGROUND (face) != 0
- ? [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)]
- : FRAME_BACKGROUND_COLOR (s->f)) set];
- else
- [FRAME_CURSOR_COLOR (s->f) set];
- }
+ {
+ if (s->hl != DRAW_CURSOR)
+ [(NS_FACE_BACKGROUND (face) != 0
+ ? [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)]
+ : FRAME_BACKGROUND_COLOR (s->f)) set];
+ else if (face && NS_FACE_BACKGROUND (face)
+ == [(NSColor*)FRAME_CURSOR_COLOR (s->f) unsignedLong])
+ [[NSColor colorWithUnsignedLong:NS_FACE_FOREGROUND (face)] set];
+ else
+ [FRAME_CURSOR_COLOR (s->f) set];
+ }
else
{
struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (s->f);
Could you give it a try on macOS and GNUstep? Thank you.
next prev parent reply other threads:[~2023-04-01 19:56 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-31 18:34 bug#62573: 29.0.60; Cursor color not being inverted in emacs-29 Al Haji-Ali
2023-03-31 19:15 ` Eli Zaretskii
2023-03-31 21:46 ` Al Haji-Ali
2023-04-01 5:38 ` Eli Zaretskii
2023-04-01 19:56 ` Daniel Martín via Bug reports for GNU Emacs, the Swiss army knife of text editors [this message]
2023-04-02 0:44 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-04-02 21:24 ` Daniel Martín via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-04-03 0:07 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-04-06 10:12 ` Daniel Martín via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-04-08 11:36 ` Eli Zaretskii
2023-04-02 5:09 ` Eli Zaretskii
2023-04-02 5:52 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-04-02 6:58 ` Eli Zaretskii
2023-04-02 11:01 ` Daniel Martín via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-04-02 11:12 ` Eli Zaretskii
2023-04-02 14:28 ` Al Haji-Ali
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m1sfdj2x72.fsf@yahoo.es \
--to=bug-gnu-emacs@gnu.org \
--cc=62573@debbugs.gnu.org \
--cc=abdo.haji.ali@gmail.com \
--cc=eliz@gnu.org \
--cc=luangruo@yahoo.com \
--cc=mardani29@yahoo.es \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.