* bug#1127: Can't set default face to get the font I want
@ 2008-10-09 5:21 Stefan Monnier
0 siblings, 0 replies; 5+ messages in thread
From: Stefan Monnier @ 2008-10-09 5:21 UTC (permalink / raw
To: submit
Package: Emacs
Version: 23.0.60
Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:
After I do
% xrdb -remove
% src/emacs -Q --eval '(customize-face (quote default))'
I seem to be unable to select my beloved
"-misc-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*". If I set
family=fixed, foundry=misc, width=semicondensed, height=100,
I get -misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1;
It appears that the "semicondensed" part is ignored.
Stefan
If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
`bt full' and `xbacktrace'.
If you would like to further debug the crash, please read the file
/home/monnier/src/emacs/work/etc/DEBUG for instructions.
In GNU Emacs 23.0.60.1 (i686-pc-linux-gnu, GTK+ Version 2.12.11)
of 2008-10-05 on pastel
Windowing system distributor `The X.Org Foundation', version 11.0.10402000
configured using `configure 'CFLAGS=-Wall -Wno-pointer-sign -DUSE_LISP_UNION_TYPE -DSYNC_INPUT -DENABLE_CHECKING -DXASSERTS -DFONTSET_DEBUG -g -O0' 'LDFLAGS=-L/home/monnier/src/Xaw3d' 'CPPFLAGS=-I/home/monnier/src/Xaw3d''
Important settings:
value of $LC_ALL: nil
value of $LC_COLLATE: nil
value of $LC_CTYPE: nil
value of $LC_MESSAGES: nil
value of $LC_MONETARY: nil
value of $LC_NUMERIC: nil
value of $LC_TIME: nil
value of $LANG: fr_CH.UTF-8
value of $XMODIFIERS: nil
locale-coding-system: utf-8-unix
default-enable-multibyte-characters: t
Major mode: Group
Minor modes in effect:
gnus-undo-mode: t
url-handler-mode: t
global-reveal-mode: t
reveal-mode: t
auto-insert-mode: t
savehist-mode: t
minibuffer-electric-default-mode: t
cua-mode: t
mouse-wheel-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
global-auto-composition-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
<switch-frame> <select-window> SPC SPC N o SPC a m
o u n t SPC o SPC <backspace> f SPC c h a n g i n g
SPC t h e SPC : f a m i l y SPC <left> <left> <left>
<left> <left> <left> <left> <backspace> ` C-e <backspace>
' SPC s e t t i n g SPC w i l l SPC c h a n g e SPC
t h e SPC f o n t SPC u s e d SPC f o r SPC t h a t
SPC f a c e . <right> <up> <left> <right> <up> <left>
<right> <up> <left> <right> <up> <left> <right> <up>
<left> <right> <up> <left> <right> <down> <down> <left>
<right> <down> <left> <right> <down> <left> <right>
<down> <left> <right> <down> <left> <right> <up> <up>
<left> <right> <down> <left> <right> <down> <left>
<right> <return> <return> M-i S t e f a n <return>
<help-echo> <switch-frame> <select-window> <switch-frame>
<switch-frame> <select-window> <help-echo> <switch-frame>
<select-window> <switch-frame> <switch-frame> <select-window>
<help-echo> <switch-frame> <select-window> <switch-frame>
<select-window> <help-echo> <select-window> <switch-frame>
<switch-frame> <select-window> <select-window> <switch-frame>
<select-window> <switch-frame> <select-window> <select-window>
<switch-frame> <select-window> <switch-frame> <select-window>
<select-window> <switch-frame> <select-window> <switch-frame>
<select-window> <help-echo> <switch-frame> <select-window>
<switch-frame> <switch-frame> <select-window> <help-echo>
<switch-frame> <select-window> <switch-frame> <select-window>
<help-echo> <select-window> <switch-frame> <switch-frame>
<select-window> <select-window> <switch-frame> <select-window>
<switch-frame> <select-window> <help-echo> <switch-frame>
<select-window> <switch-frame> <switch-frame> <select-window>
<switch-frame> <select-window> <switch-frame> <select-window>
<help-echo> <select-window> <switch-frame> <switch-frame>
<select-window> <select-window> <switch-frame> <switch-frame>
<select-window> <help-echo> <switch-frame> <select-window>
<switch-frame> <switch-frame> <switch-frame> <select-window>
<switch-frame> <select-window> <help-echo> <switch-frame>
<switch-frame> <select-window> <help-echo> <switch-frame>
<select-window> <switch-frame> <help-echo> <up> <up>
<up> <up> <up> A p p a e n <backspace> <backspace>
r e n t l y SPC M-l C-a <return> M-q <backspace> <left>
<right> <down> <left> <right> <down> <left> <right>
C-c C-c <switch-frame> <select-window> <select-window>
<switch-frame> <switch-frame> <help-echo> <switch-frame>
<switch-frame> <help-echo> <select-window> <help-echo>
M-x M-p <return>
Recent messages:
Denied server nntp+gmane
Entering debugger...
Back to top level.
Mark set [2 times]
Auto-saving...done
Mark set [2 times]
Auto-saving...done
Sending...
Sending via mail...
Sending...done
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#1127: Can't set default face to get the font I want
@ 2008-10-12 4:30 Chong Yidong
2008-10-14 8:18 ` Kenichi Handa
0 siblings, 1 reply; 5+ messages in thread
From: Chong Yidong @ 2008-10-12 4:30 UTC (permalink / raw
To: Kenichi Handa; +Cc: 1127
Hi Handa-san,
> % xrdb -remove
> % src/emacs -Q --eval '(customize-face (quote default))'
>
> I seem to be unable to select my beloved
> "-misc-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*". If I set
> family=fixed, foundry=misc, width=semicondensed, height=100,
> I get -misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1;
> It appears that the "semicondensed" part is ignored.
This appears to be a problem in the font_score algorithm in font.c. The
font passed in as the argument has the `semicondensed' width property,
but the font found has `normal'.
Could you take a look?
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#1127: Can't set default face to get the font I want
@ 2008-10-14 4:40 Chong Yidong
0 siblings, 0 replies; 5+ messages in thread
From: Chong Yidong @ 2008-10-14 4:40 UTC (permalink / raw
To: Stefan Monnier; +Cc: 1127, Kenichi Handa
> The FONT_AVGWIDTH_INDEX entry also needs to be cleared out at this
> time, otherwise the font backend won't find the semicondensed font.
> I've checked in a fix.
Hmm... actually, this doesn't fix the bug for the recipe originally
given. It does, however, cause
(set-face-attribute 'default nil :family "fixed"
:foundry "misc" :weight 'medium :width 'semi-condensed)
to behave properly.
So there's probably still a bug lurking somewhere.
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#1127: Can't set default face to get the font I want
2008-10-12 4:30 bug#1127: Can't set default face to get the font I want Chong Yidong
@ 2008-10-14 8:18 ` Kenichi Handa
2008-10-14 14:45 ` Chong Yidong
0 siblings, 1 reply; 5+ messages in thread
From: Kenichi Handa @ 2008-10-14 8:18 UTC (permalink / raw
To: Chong Yidong; +Cc: 1127
In article <87iqryl9jc.fsf@cyd.mit.edu>, Chong Yidong <cyd@stupidchicken.com> writes:
> Hi Handa-san,
> > % xrdb -remove
> > % src/emacs -Q --eval '(customize-face (quote default))'
> >
> > I seem to be unable to select my beloved
> > "-misc-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*". If I set
> > family=fixed, foundry=misc, width=semicondensed, height=100,
> > I get -misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1;
> > It appears that the "semicondensed" part is ignored.
> This appears to be a problem in the font_score algorithm in font.c. The
> font passed in as the argument has the `semicondensed' width property,
> but the font found has `normal'.
I can reproduce that problem, but I don't think it's a
problem of font_score. For instance,
(list-fonts (font-spec :family "fixed" :foundry "misc")
nil nil
(font-spec :width 'semicondensed))
correctly prefers semicondensed fonts.
> I found the problem: in internal-set-lisp-face-attribute, we do the
> following:
> if (prop_index)
> /* If a font-related attribute other than QCfont and QCfontset
> is specified, and if the original QCfont attribute has a font
> (font-spec or font-object), set the corresponding property in
> the font to nil so that the font selector doesn't think that
> the attribute is mandatory. */
> font_clear_prop (XVECTOR (lface)->contents, prop_index);
> The FONT_AVGWIDTH_INDEX entry also needs to be cleared out at this time,
> otherwise the font backend won't find the semicondensed font. I've
> checked in a fix.
It's reasonable to clear FONT_AVGWIDTH_INDEX of a font if
:width is changed, but your change clears that
unconditionally. I think we should install the attached
change instead.
Anyway, I don't think that fixes the current problem. The
source of the problme I observed is this.
When multiple font-related attributes of a face are
customized, internal-set-lisp-face-attribute is called
multiple times. For instance, when we customize family,
foundry, and width (as you did),
internal-set-lisp-face-attribute is called with attr :family
and :width with these values in this sequence (note that my
defualt font is now "dejavu sans mono"):
(:family unspecified)
(:width normal)
(:family "dejavu sans mono")
(:width semi-condensed)
(:family "fixed")
As "dejavu sans mono" doesn't have semi-condensed variation,
the 4th call doesn't change the width, and then the 5th call
changes the family to "fixed".
Next, I tried this:
At first customize family and foudnry only, then customize
width to semi-condensed. But with the last customization of
width, internal-set-lisp-face-attribute is called as this:
(:family unspecified)
(:width unspecified)
(:width normal)
(:family "dejavu sans mono")
(:width semi-condensed)
(:family "fixed")
When the function is called to change width to
semi-condensed, somehow the family was already set back to
"dejavu sans mono", so, again, the font can't be changed to
semi-condensed.
At the moment, I don't know why
internal-set-lisp-face-attribute is called in that way.
---
Kenichi Handa
handa@ni.aist.go.jp
*** font.c.~1.87.~ 2008-10-14 13:55:27.000000000 +0900
--- font.c 2008-10-14 16:01:44.000000000 +0900
***************
*** 2996,3001 ****
--- 2996,3002 ----
if (! FONTP (font))
return;
if (NILP (AREF (font, prop))
+ && prop != FONT_WIDTH_INDEX
&& prop != FONT_FAMILY_INDEX && prop != FONT_FOUNDRY_INDEX
&& prop != FONT_SIZE_INDEX)
return;
***************
*** 3018,3023 ****
--- 3019,3026 ----
ASET (font, FONT_SPACING_INDEX, Qnil);
ASET (font, FONT_AVGWIDTH_INDEX, Qnil);
}
+ else if (prop == FONT_WIDTH_INDEX)
+ ASET (font, FONT_AVGWIDTH_INDEX, Qnil);
attrs[LFACE_FONT_INDEX] = font;
}
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#1127: Can't set default face to get the font I want
2008-10-14 8:18 ` Kenichi Handa
@ 2008-10-14 14:45 ` Chong Yidong
0 siblings, 0 replies; 5+ messages in thread
From: Chong Yidong @ 2008-10-14 14:45 UTC (permalink / raw
To: Kenichi Handa; +Cc: 1127
Kenichi Handa <handa@m17n.org> writes:
> It's reasonable to clear FONT_AVGWIDTH_INDEX of a font if
> :width is changed, but your change clears that
> unconditionally. I think we should install the attached
> change instead.
Yes, that looks like a better change. I checked it in. Thanks.
> When multiple font-related attributes of a face are
> customized, internal-set-lisp-face-attribute is called
> multiple times.
>
> As "dejavu sans mono" doesn't have semi-condensed variation,
> the 4th call doesn't change the width, and then the 5th call
> changes the family to "fixed".
Indeed, we may have to look at the logic in cus-face.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-10-14 14:45 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-12 4:30 bug#1127: Can't set default face to get the font I want Chong Yidong
2008-10-14 8:18 ` Kenichi Handa
2008-10-14 14:45 ` Chong Yidong
-- strict thread matches above, loose matches on Subject: below --
2008-10-14 4:40 Chong Yidong
2008-10-09 5:21 Stefan Monnier
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.