all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* 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.