* Lucid menu faces
@ 2022-07-20 14:54 Manuel Giraud
2022-07-20 16:05 ` Eli Zaretskii
0 siblings, 1 reply; 8+ messages in thread
From: Manuel Giraud @ 2022-07-20 14:54 UTC (permalink / raw)
To: help-gnu-emacs
Hi,
The bug found by Colin earlier led me to the following question: how
hard would it be to have the Lucid menu rebuilt from elisp code?
As it is, if I do this:
--8<---------------cut here---------------start------------->8---
(let ((class '((class color) (min-colors 89))))
(custom-theme-set-faces
'user
`(menu ((,class (:family "Iosevka" :foregroud "red" :background "blue"))))))
--8<---------------cut here---------------end--------------->8---
only the background color of the menu is changed. Not the family font
nor the foreground color.
Best regards,
--
Manuel Giraud
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Lucid menu faces
2022-07-20 14:54 Lucid menu faces Manuel Giraud
@ 2022-07-20 16:05 ` Eli Zaretskii
2022-07-21 1:21 ` Po Lu
2022-07-21 13:23 ` Manuel Giraud
0 siblings, 2 replies; 8+ messages in thread
From: Eli Zaretskii @ 2022-07-20 16:05 UTC (permalink / raw)
To: help-gnu-emacs
> From: Manuel Giraud <manuel@ledu-giraud.fr>
> Date: Wed, 20 Jul 2022 16:54:52 +0200
>
> Hi,
>
> The bug found by Colin earlier led me to the following question: how
> hard would it be to have the Lucid menu rebuilt from elisp code?
>
> As it is, if I do this:
> --8<---------------cut here---------------start------------->8---
> (let ((class '((class color) (min-colors 89))))
> (custom-theme-set-faces
> 'user
> `(menu ((,class (:family "Iosevka" :foregroud "red" :background "blue"))))))
> --8<---------------cut here---------------end--------------->8---
>
> only the background color of the menu is changed. Not the family font
> nor the foreground color.
Isn't it true that the appearance of toolkit menus can be fully
controlled only through X resources? Toolkits are not part of Emacs,
so they don't abide by our Lisp trickery. We are all spoiled rotten
by Emacs letting us control everything via Lisp objects and
properties, but the truth is that it only works because Emacs has code
to make it work. Toolkits don't: they have no idea what is a 'face'
in its Emacs interpretation.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Lucid menu faces
2022-07-20 16:05 ` Eli Zaretskii
@ 2022-07-21 1:21 ` Po Lu
2022-07-21 13:23 ` Manuel Giraud
1 sibling, 0 replies; 8+ messages in thread
From: Po Lu @ 2022-07-21 1:21 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: help-gnu-emacs
Eli Zaretskii <eliz@gnu.org> writes:
> Isn't it true that the appearance of toolkit menus can be fully
> controlled only through X resources? Toolkits are not part of Emacs,
> so they don't abide by our Lisp trickery. We are all spoiled rotten
> by Emacs letting us control everything via Lisp objects and
> properties, but the truth is that it only works because Emacs has code
> to make it work. Toolkits don't: they have no idea what is a 'face'
> in its Emacs interpretation.
Yes. There is a hack in xfaces.c wrt the `menu' face:
static void
x_update_menu_appearance (struct frame *f)
{
struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
XrmDatabase rdb;
if (dpyinfo
&& (rdb = XrmGetDatabase (FRAME_X_DISPLAY (f)),
rdb != NULL))
{
char line[512];
char *buf = line;
ptrdiff_t bufsize = sizeof line;
Lisp_Object lface = lface_from_face_name (f, Qmenu, true);
struct face *face = FACE_FROM_ID (f, MENU_FACE_ID);
const char *myname = SSDATA (Vx_resource_name);
bool changed_p = false;
#ifdef USE_MOTIF
const char *popup_path = "popup_menu";
#else
const char *popup_path = "menu.popup";
#endif
if (STRINGP (LFACE_FOREGROUND (lface)))
{
exprintf (&buf, &bufsize, line, -1, "%s.%s*foreground: %s",
myname, popup_path,
SDATA (LFACE_FOREGROUND (lface)));
XrmPutLineResource (&rdb, line);
exprintf (&buf, &bufsize, line, -1, "%s.pane.menubar*foreground: %s",
myname, SDATA (LFACE_FOREGROUND (lface)));
XrmPutLineResource (&rdb, line);
changed_p = true;
}
if (STRINGP (LFACE_BACKGROUND (lface)))
{
exprintf (&buf, &bufsize, line, -1, "%s.%s*background: %s",
myname, popup_path,
SDATA (LFACE_BACKGROUND (lface)));
XrmPutLineResource (&rdb, line);
exprintf (&buf, &bufsize, line, -1, "%s.pane.menubar*background: %s",
myname, SDATA (LFACE_BACKGROUND (lface)));
XrmPutLineResource (&rdb, line);
changed_p = true;
}
if (face->font
/* On Solaris 5.8, it's been reported that the `menu' face
can be unspecified here, during startup. Why this
happens remains unknown. -- cyd */
&& FONTP (LFACE_FONT (lface))
&& (!UNSPECIFIEDP (LFACE_FAMILY (lface))
|| !UNSPECIFIEDP (LFACE_FOUNDRY (lface))
|| !UNSPECIFIEDP (LFACE_SWIDTH (lface))
|| !UNSPECIFIEDP (LFACE_WEIGHT (lface))
|| !UNSPECIFIEDP (LFACE_SLANT (lface))
|| !UNSPECIFIEDP (LFACE_HEIGHT (lface))))
{
Lisp_Object xlfd = Ffont_xlfd_name (LFACE_FONT (lface), Qnil);
#ifdef USE_MOTIF
const char *suffix = "List";
bool motif = true;
#else
#if defined HAVE_X_I18N
const char *suffix = "Set";
#else
const char *suffix = "";
#endif
bool motif = false;
#endif
if (! NILP (xlfd))
{
#if defined HAVE_X_I18N
char *fontsetname = xic_create_fontsetname (SSDATA (xlfd), motif);
#else
char *fontsetname = SSDATA (xlfd);
#endif
exprintf (&buf, &bufsize, line, -1, "%s.pane.menubar*font%s: %s",
myname, suffix, fontsetname);
XrmPutLineResource (&rdb, line);
exprintf (&buf, &bufsize, line, -1, "%s.%s*font%s: %s",
myname, popup_path, suffix, fontsetname);
XrmPutLineResource (&rdb, line);
changed_p = true;
if (fontsetname != SSDATA (xlfd))
xfree (fontsetname);
}
}
if (changed_p && f->output_data.x->menubar_widget)
free_frame_menubar (f);
if (buf != line)
xfree (buf);
}
}
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Lucid menu faces
2022-07-20 16:05 ` Eli Zaretskii
2022-07-21 1:21 ` Po Lu
@ 2022-07-21 13:23 ` Manuel Giraud
2022-07-21 13:27 ` Po Lu
1 sibling, 1 reply; 8+ messages in thread
From: Manuel Giraud @ 2022-07-21 13:23 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: help-gnu-emacs
Eli Zaretskii <eliz@gnu.org> writes:
[...]
> Isn't it true that the appearance of toolkit menus can be fully
> controlled only through X resources?
Yes of course and so far this is what I'm doing.
> Toolkits are not part of Emacs, so they don't abide by our Lisp
> trickery. We are all spoiled rotten by Emacs letting us control
> everything via Lisp objects and properties, but the truth is that it
> only works because Emacs has code to make it work.
Ok. I was just wondering as it partially work for the background of the
menu face.
As for my personal use case, I'd like to have that because I'm a exwm
user on a laptop (i.e. I do go from laptop screen to external ones back
and forth and so use differents resolutions). So being able to modify
the menu aspect *without* restarting Emacs would be an improvement… but
it is not of life-and-death importance either.
--
Manuel Giraud
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Lucid menu faces
2022-07-21 13:23 ` Manuel Giraud
@ 2022-07-21 13:27 ` Po Lu
2022-07-21 16:15 ` Manuel Giraud
0 siblings, 1 reply; 8+ messages in thread
From: Po Lu @ 2022-07-21 13:27 UTC (permalink / raw)
To: Manuel Giraud; +Cc: Eli Zaretskii, help-gnu-emacs
Manuel Giraud <manuel@ledu-giraud.fr> writes:
> As for my personal use case, I'd like to have that because I'm a exwm
> user on a laptop (i.e. I do go from laptop screen to external ones back
> and forth and so use differents resolutions). So being able to modify
> the menu aspect *without* restarting Emacs would be an improvement… but
> it is not of life-and-death importance either.
Why not use the no-toolkit build? There, the menu bar (but not the menu
itself) is drawn by redisplay itself.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Lucid menu faces
2022-07-21 13:27 ` Po Lu
@ 2022-07-21 16:15 ` Manuel Giraud
2022-07-22 1:04 ` Po Lu
0 siblings, 1 reply; 8+ messages in thread
From: Manuel Giraud @ 2022-07-21 16:15 UTC (permalink / raw)
To: Po Lu; +Cc: Eli Zaretskii, help-gnu-emacs
Po Lu <luangruo@yahoo.com> writes:
[...]
> Why not use the no-toolkit build? There, the menu bar (but not the menu
> itself) is drawn by redisplay itself.
Yes why not but last time I check it was a bit ugly… but maybe
no-toolkit needs some tweaks (or love).
--
Manuel Giraud
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Lucid menu faces
2022-07-21 16:15 ` Manuel Giraud
@ 2022-07-22 1:04 ` Po Lu
2022-07-22 6:38 ` Manuel Giraud
0 siblings, 1 reply; 8+ messages in thread
From: Po Lu @ 2022-07-22 1:04 UTC (permalink / raw)
To: Manuel Giraud; +Cc: Eli Zaretskii, help-gnu-emacs
Manuel Giraud <manuel@ledu-giraud.fr> writes:
> Yes why not but last time I check it was a bit ugly… but maybe
> no-toolkit needs some tweaks (or love).
The point is it can be made prettier by changing the `menu' face.
(Or at least until you actually open the menus.)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Lucid menu faces
2022-07-22 1:04 ` Po Lu
@ 2022-07-22 6:38 ` Manuel Giraud
0 siblings, 0 replies; 8+ messages in thread
From: Manuel Giraud @ 2022-07-22 6:38 UTC (permalink / raw)
To: Po Lu; +Cc: Eli Zaretskii, help-gnu-emacs
Po Lu <luangruo@yahoo.com> writes:
> Manuel Giraud <manuel@ledu-giraud.fr> writes:
>
>> Yes why not but last time I check it was a bit ugly… but maybe
>> no-toolkit needs some tweaks (or love).
>
> The point is it can be made prettier by changing the `menu' face.
> (Or at least until you actually open the menus.)
Yes I understood but there are some bugs/annoyances. Just one example,
if I do:
--8<---------------cut here---------------start------------->8---
(custom-set-faces
'(menu ((t (:family "Iosevka" :height 1.2))))
--8<---------------cut here---------------end--------------->8---
The height of the menu bar won't be correctly recalculated so menu-bar
entries will be truncated vertically.
I don't think that anybody really use the no-toolkit build nowadays.
And that why I said it might need some love to be usable again.
--
Manuel Giraud
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-07-22 6:38 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-20 14:54 Lucid menu faces Manuel Giraud
2022-07-20 16:05 ` Eli Zaretskii
2022-07-21 1:21 ` Po Lu
2022-07-21 13:23 ` Manuel Giraud
2022-07-21 13:27 ` Po Lu
2022-07-21 16:15 ` Manuel Giraud
2022-07-22 1:04 ` Po Lu
2022-07-22 6:38 ` Manuel Giraud
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).