Package: emacs;
Reported by: David Kastrup <dak <at> gnu.org>
Date: Fri, 13 Mar 2009 21:35:03 UTC
Severity: serious
Done: Chong Yidong <cyd <at> stupidchicken.com>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 2667 in the body.
You can then email your comments to 2667 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Fri, 13 Mar 2009 21:35:03 GMT) Full text and rfc822 format available.David Kastrup <dak <at> gnu.org>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Fri, 13 Mar 2009 21:35:03 GMT) Full text and rfc822 format available.Message #5 received at submit <at> emacsbugs.donarmstrong.com (full text, mbox):
From: David Kastrup <dak <at> gnu.org> To: emacs-pretest-bug <at> gnu.org Subject: 23.0.91; Inconsistent fonts Date: Fri, 13 Mar 2009 22:28:05 +0100
Please write in English if possible, because the Emacs maintainers usually do not have translators to read other languages for them. Your bug report will be posted to the emacs-pretest-bug <at> gnu.org mailing list. Please describe exactly what actions triggered the bug and the precise symptoms of the bug: If I write something like "Schätzchen" after selecting a Unicode-capable font in the font menu (in this case LMSans12), I get on the S character: S (83, #o123, #x53) preferred charset: ascii (ASCII (ISO646 IRV)) code point: 0x53 syntax: w which means: word category: .:Base, a:ASCII, l:Latin, r:Roman buffer code: #x53 file code: #x53 (encoded by coding system utf-8-emacs-unix) display: by this font (glyph code) xft:-unknown-LMSans12-normal-normal-normal-*-16-*-*-*-*-0-iso10646-1 (#x10C) Character code properties: customize what to show name: LATIN CAPITAL LETTER S general-category: Lu (Letter, Uppercase) There are text properties here: fontified t [back] But on the ä I get character: ä (228, #o344, #xe4) preferred charset: unicode (Unicode (ISO10646)) code point: 0xE4 syntax: w which means: word category: .:Base, j:Japanese, l:Latin buffer code: #xC3 #xA4 file code: #xC3 #xA4 (encoded by coding system utf-8-emacs-unix) display: by this font (glyph code) x:-misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1 (#xE4) Character code properties: customize what to show name: LATIN SMALL LETTER A WITH DIAERESIS old-name: LATIN SMALL LETTER A DIAERESIS general-category: Ll (Letter, Lowercase) decomposition: (97 776) ('a' '̈') There are text properties here: fontified t [back] What is wrong here? Why does it not use the LM font? 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 /usr/local/emacs-21/share/emacs/23.0.91/etc/DEBUG for instructions. In GNU Emacs 23.0.91.1 (i686-pc-linux-gnu, GTK+ Version 2.14.4) of 2009-03-13 on lola Windowing system distributor `The X.Org Foundation', version 11.0.10502000 configured using `configure 'CFLAGS=-g -O2 -fno-crossjumping' '--prefix=/usr/local/emacs-21' '--without-toolkit-scroll-bars'' 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: en_US.UTF-8 value of $XMODIFIERS: nil locale-coding-system: utf-8-unix default-enable-multibyte-characters: t Major mode: Message Minor modes in effect: buffer-face-mode: t shell-dirtrack-mode: t mml-mode: t gnus-message-citation-mode: t TeX-PDF-mode: t desktop-save-mode: t minibuffer-electric-default-mode: t tooltip-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-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 abbrev-mode: t Recent input: h SPC a u c h SPC i m SPC P r o i v <backspace> <backspace> <backspace> i v a t l e b e n SPC r e c h t SPC e r f o l g r e i c h SPC d u r c h g e <up> <down> z o g e n . M-q <up> C-k C-k C-k M-q u SPC g l a u b s t SPC g a r SPC n i c h t , SPC w i e v i e l e SPC <backspace> <backspace> SPC A u f w a n f <backspace> d SPC m a n SPC s i c h SPC s p a r e n SPC k a n n , SPC w e n n SPC m a n SPC E r o b e r u n g e n SPC s c h o n SPC i m SPC K e i m SPC a b s c h ü t t e l t . M-q M-q C-e <up> <up> <down> <down> <down> <down> <up> <up> <up> <down> C-e <up> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> <right> M-q <down> <up> <down> C-e M-q <help-echo> <help-echo> <help-echo> <help-echo> <help-echo> <help-echo> <help-echo> <help-echo> <help-echo> <help-echo> <help-echo> <menu-bar> <options> <menu-set-font> <down-mouse-3> <mouse-3> <down-mouse-1> <mouse-1> <down-mouse-3> <mouse-3> <S-down-mouse-1> <up> <up> <up> <down> <left> <left> <left> <left> C-u C-x = <right> C-u C-x = M-x e m a c s - r e [ p <backspace> <backspace> p o <tab> <backspace> <backspace> <backspace> <backspace> b u <tab> <backspace> <backspace> <backspace> C-a r e p o r t - C-e - b u <tab> <return> Recent messages: Generating summary...done call-interactively: Beginning of buffer Mark set [2 times] Auto-saving...done Auto-saving...done Auto-saving...done Buffer-Face mode enabled Type C-x 1 to delete the help window, C-M-v to scroll help. Char: h (104, #o150, #x68) point=1549 of 2036 (76%) <791-2037> column=2 Char: ä (228, #o344, #xe4, file ...) point=1550 of 2036 (76%) <791-2037> column=3 -- David Kastrup
bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Tue, 17 Mar 2009 07:45:03 GMT) Full text and rfc822 format available.Kenichi Handa <handa <at> m17n.org>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Tue, 17 Mar 2009 07:45:03 GMT) Full text and rfc822 format available.Message #10 received at 2667 <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Kenichi Handa <handa <at> m17n.org> To: David Kastrup <dak <at> gnu.org>, 2667 <at> debbugs.gnu.org Subject: Re: bug#2667: 23.0.91; Inconsistent fonts Date: Tue, 17 Mar 2009 16:39:56 +0900
In article <85r6115d0a.fsf <at> lola.goethe.zz>, David Kastrup <dak <at> gnu.org> writes: > If I write something like "Schätzchen" after selecting a Unicode-capable > font in the font menu (in this case LMSans12), I get on the S > character: S (83, #o123, #x53) [...] > xft:-unknown-LMSans12-normal-normal-normal-*-16-*-*-*-*-0-iso10646-1 (#x10C) [...] > But on the ä I get > character: ä (228, #o344, #xe4) [...] > x:-misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1 (#xE4) [...] > What is wrong here? Why does it not use the LM font? I can't reproduce it with the latest code. Please show me the result of this: % emacs -Q M-x set-default-font RET lmsans12 RET ESC : (setq font-log nil) RET ESC : (insert "Schätzchen") RET M-x font-show-log RET What I get in *Help* buffer is this: ---------------------------------------------------------------------- font for: (228) list: -unknown-LMSans12-*-iso10646-1 -unknown-LMSans12-normal-oblique-normal-*-0-iso10646-1 -unknown-LMSans12-normal-normal-normal-*-0-iso10646-1 sort-by: -*-normal-normal-normal-*-17-* xft:-unknown-LMSans12-normal-normal-normal-*-0-iso10646-1 font for: (228) list: -unknown-LMSans12-normal-*-normal-*-0-iso10646-1 -unknown-LMSans12-normal-normal-normal-*-0-iso10646-1 -unknown-LMSans12-normal-oblique-normal-*-0-iso10646-1 sort-by: -*-normal-italic-normal-*-17-* xft:-unknown-LMSans12-normal-oblique-normal-*-0-iso10646-1 open: -unknown-LMSans12-normal-oblique-normal-*-0-iso10646-1 xft:-unknown-LMSans12-normal-oblique-normal-*-17-*-0-iso10646-1 ---------------------------------------------------------------------- --- Kenichi Handa handa <at> m17n.org
bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Wed, 06 May 2009 04:25:03 GMT) Full text and rfc822 format available.Stefan Monnier <monnier <at> iro.umontreal.ca>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Wed, 06 May 2009 04:25:03 GMT) Full text and rfc822 format available.Message #15 received at 2667 <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Stefan Monnier <monnier <at> iro.umontreal.ca> To: 2667 <at> debbugs.gnu.org Subject: Still seeing inconsistent fonts Date: Wed, 06 May 2009 00:17:23 -0400
I also noticed recently that my fonts are inconsistent: when writing math symbols (mostly greek letters), I notice that they do not use my misc-fixed font but "DejaVu Sans" instead. E.g.: > xrdb -remove; rm ~/.Xdefaults > emacs -Q ~/re/papers/comp-deptypes/main.tex M-: (setq font-log nil) RET M-: (set-face-font 'default "-misc-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*") And now all my latin text uses my beloved misc-fixed: x:-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1 (#x3A) but all the math symbols use "DejaVu Sans": xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-13-*-*-*-*-0-iso10646-1 (#xC3E) The output of font-show-log is appended. The same steps with Emacs-22 correctly use the misc-fixed font, of course. Stefan font for: (8322) ftfont-list: -misc-fixed-*--*-iso8859-1 xfont-list: -misc-fixed-*-*-*--*-*-*-*-*-*-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-100-100-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-100-100-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-normal--9-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-normal--9-*-100-100-c-60-iso8859-1 -misc-fixed-medium-r-normal--8-*-75-75-c-50-iso8859-1 -misc-fixed-medium-r-normal--8-*-100-100-c-50-iso8859-1 -misc-fixed-medium-r-normal--7-*-75-75-c-50-iso8859-1 -misc-fixed-medium-r-normal--7-*-100-100-c-50-iso8859-1 -misc-fixed-medium-r-normal--6-*-75-75-c-40-iso8859-1 -misc-fixed-medium-r-normal--20-*-75-75-c-100-iso8859-1 -misc-fixed-medium-r-normal--20-*-100-100-c-100-iso8859-1 -misc-fixed-medium-r-normal--18-*-100-100-c-90-iso8859-1 -misc-fixed-medium-r-normal--15-*-75-75-c-90-iso8859-1 -misc-fixed-medium-r-normal--15-*-100-100-c-90-iso8859-1 -misc-fixed-medium-r-normal--14-*-75-75-c-70-iso8859-1 -misc-fixed-medium-r-normal--14-*-100-100-c-70-iso8859-1 -misc-fixed-medium-r-normal--13-*-75-75-c-80-iso8859-1 ... list: -misc-fixed-medium-r-semicondensed--*-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-100-100-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-100-100-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-75-75-c-60-iso8859-1 sort-by: -*-unspecified-unspecified-unspecified-*-13-* x:-misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 open: -misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 x:-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1 list: -misc-fixed-medium-r-semicondensed--*-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-100-100-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-100-100-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-75-75-c-60-iso8859-1 sort-by: -*-normal-normal-normal-*-13-* x:-misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 ftfont-list: -misc-fixed-*--*-c-*-iso8859-1 xfont-list: -misc-fixed-*-*-*--*-*-*-*-c-*-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-100-100-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-100-100-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-normal--9-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-normal--9-*-100-100-c-60-iso8859-1 -misc-fixed-medium-r-normal--8-*-75-75-c-50-iso8859-1 -misc-fixed-medium-r-normal--8-*-100-100-c-50-iso8859-1 -misc-fixed-medium-r-normal--7-*-75-75-c-50-iso8859-1 -misc-fixed-medium-r-normal--7-*-100-100-c-50-iso8859-1 -misc-fixed-medium-r-normal--6-*-75-75-c-40-iso8859-1 -misc-fixed-medium-r-normal--20-*-75-75-c-100-iso8859-1 -misc-fixed-medium-r-normal--20-*-100-100-c-100-iso8859-1 -misc-fixed-medium-r-normal--18-*-100-100-c-90-iso8859-1 -misc-fixed-medium-r-normal--15-*-75-75-c-90-iso8859-1 -misc-fixed-medium-r-normal--15-*-100-100-c-90-iso8859-1 -misc-fixed-medium-r-normal--14-*-75-75-c-70-iso8859-1 -misc-fixed-medium-r-normal--14-*-100-100-c-70-iso8859-1 -misc-fixed-medium-r-normal--13-*-75-75-c-80-iso8859-1 ... list: -misc-fixed-*-r-semicondensed--*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-75-75-c-60-iso8859-1 -misc-fixed-bold-r-semicondensed--13-*-75-75-c-60-iso8859-1 sort-by: -*-light-r-semicondensed-*-13-* x:-misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 open: -misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 x:-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1 list: -misc-fixed-*-r-semicondensed--*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-75-75-c-60-iso8859-1 -misc-fixed-bold-r-semicondensed--13-*-75-75-c-60-iso8859-1 sort-by: -*-light-r-semicondensed-*-13-* x:-misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 font for: (8321) ftfont-list: -misc-fixed-*--*-iso10646-1:script=symbol list: -misc-fixed-*--*-iso10646-1:script=symbol ftfont-list: -misc-fixed-*-iso10646-1:script=symbol list: -misc-fixed-*-iso10646-1:script=symbol ftfont-list: -*-fixed-*--*-iso10646-1:script=symbol list: -*-fixed-*--*-iso10646-1:script=symbol ftfont-list: -*-fixed-*-iso10646-1:script=symbol list: -*-fixed-*-iso10646-1:script=symbol ftfont-list: -misc-*--*-iso10646-1:script=symbol list: -misc-*--*-iso10646-1:script=symbol ftfont-list: -misc-*-iso10646-1:script=symbol list: -misc-*-iso10646-1:script=symbol ftfont-list: -*--*-iso10646-1:script=symbol -microsoft-Georgia-normal-italic-normal-*-0-iso10646-1 -monotype-Arial-bold-normal-normal-*-0-iso10646-1 -urw-Nimbus Mono L-normal-normal-normal-*-m-0-iso10646-1 -unknown-DejaVu Serif-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-normal-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-normal-italic-normal-*-0-iso10646-1 -unknown-Liberation Sans-normal-normal-normal-*-0-iso10646-1 -bitstream-Courier 10 Pitch-normal-italic-normal-*-m-0-iso10646-1 -monotype-Andale Mono-normal-normal-normal-*-m-0-iso10646-1 -urw-URW Bookman L-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-bold-italic-normal-*-0-iso10646-1 -unknown-DejaVu Serif-normal-italic-normal-*-0-iso10646-1 -urw-Nimbus Sans L-normal-normal-normal-*-0-iso10646-1 -microsoft-Trebuchet MS-bold-italic-normal-*-0-iso10646-1 -monotype-Arial Black-normal-normal-normal-*-0-iso10646-1 -monotype-Times New Roman-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-oblique-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-bold-italic-normal-*-0-iso10646-1 ... list: -*--*-iso10646-1:script=symbol -microsoft-Georgia-normal-italic-normal-*-0-iso10646-1 -monotype-Arial-bold-normal-normal-*-0-iso10646-1 -urw-Nimbus Mono L-normal-normal-normal-*-m-0-iso10646-1 -unknown-DejaVu Serif-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-normal-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-normal-italic-normal-*-0-iso10646-1 -unknown-Liberation Sans-normal-normal-normal-*-0-iso10646-1 -bitstream-Courier 10 Pitch-normal-italic-normal-*-m-0-iso10646-1 -monotype-Andale Mono-normal-normal-normal-*-m-0-iso10646-1 -urw-URW Bookman L-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-bold-italic-normal-*-0-iso10646-1 -unknown-DejaVu Serif-normal-italic-normal-*-0-iso10646-1 -urw-Nimbus Sans L-normal-normal-normal-*-0-iso10646-1 -microsoft-Trebuchet MS-bold-italic-normal-*-0-iso10646-1 -monotype-Arial Black-normal-normal-normal-*-0-iso10646-1 -monotype-Times New Roman-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-oblique-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-bold-italic-normal-*-0-iso10646-1 ... sort-by: -*-medium-r-semicondensed-*-13-* xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-0-iso10646-1 open: -unknown-DejaVu Sans-normal-normal-semi-condensed-*-0-iso10646-1:script=symbol xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-13-*-0-iso10646-1 font for: (8704) list: -misc-fixed-*--*-iso10646-1:script=symbol list: -misc-fixed-*-iso10646-1:script=symbol list: -*-fixed-*--*-iso10646-1:script=symbol list: -*-fixed-*-iso10646-1:script=symbol list: -misc-*--*-iso10646-1:script=symbol list: -misc-*-iso10646-1:script=symbol list: -*--*-iso10646-1:script=symbol -microsoft-Georgia-normal-italic-normal-*-0-iso10646-1 -monotype-Arial-bold-normal-normal-*-0-iso10646-1 -urw-Nimbus Mono L-normal-normal-normal-*-m-0-iso10646-1 -unknown-DejaVu Serif-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-normal-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-normal-italic-normal-*-0-iso10646-1 -unknown-Liberation Sans-normal-normal-normal-*-0-iso10646-1 -bitstream-Courier 10 Pitch-normal-italic-normal-*-m-0-iso10646-1 -monotype-Andale Mono-normal-normal-normal-*-m-0-iso10646-1 -urw-URW Bookman L-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-bold-italic-normal-*-0-iso10646-1 -unknown-DejaVu Serif-normal-italic-normal-*-0-iso10646-1 -urw-Nimbus Sans L-normal-normal-normal-*-0-iso10646-1 -microsoft-Trebuchet MS-bold-italic-normal-*-0-iso10646-1 -monotype-Arial Black-normal-normal-normal-*-0-iso10646-1 -monotype-Times New Roman-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-oblique-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-bold-italic-normal-*-0-iso10646-1 ... sort-by: -*-medium-r-semicondensed-*-13-* xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-0-iso10646-1 font for: (928) list: -misc-fixed-*--*-iso10646-1:script=symbol list: -misc-fixed-*-iso10646-1:script=symbol list: -*-fixed-*--*-iso10646-1:script=symbol list: -*-fixed-*-iso10646-1:script=symbol list: -misc-*--*-iso10646-1:script=symbol list: -misc-*-iso10646-1:script=symbol list: -*--*-iso10646-1:script=symbol -microsoft-Georgia-normal-italic-normal-*-0-iso10646-1 -monotype-Arial-bold-normal-normal-*-0-iso10646-1 -urw-Nimbus Mono L-normal-normal-normal-*-m-0-iso10646-1 -unknown-DejaVu Serif-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-normal-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-normal-italic-normal-*-0-iso10646-1 -unknown-Liberation Sans-normal-normal-normal-*-0-iso10646-1 -bitstream-Courier 10 Pitch-normal-italic-normal-*-m-0-iso10646-1 -monotype-Andale Mono-normal-normal-normal-*-m-0-iso10646-1 -urw-URW Bookman L-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-bold-italic-normal-*-0-iso10646-1 -unknown-DejaVu Serif-normal-italic-normal-*-0-iso10646-1 -urw-Nimbus Sans L-normal-normal-normal-*-0-iso10646-1 -microsoft-Trebuchet MS-bold-italic-normal-*-0-iso10646-1 -monotype-Arial Black-normal-normal-normal-*-0-iso10646-1 -monotype-Times New Roman-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-oblique-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-bold-italic-normal-*-0-iso10646-1 ... sort-by: -*-medium-r-semicondensed-*-13-* xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-0-iso10646-1 font for: (964) list: -misc-fixed-*--*-iso10646-1:script=symbol list: -misc-fixed-*-iso10646-1:script=symbol list: -*-fixed-*--*-iso10646-1:script=symbol list: -*-fixed-*-iso10646-1:script=symbol list: -misc-*--*-iso10646-1:script=symbol list: -misc-*-iso10646-1:script=symbol list: -*--*-iso10646-1:script=symbol -microsoft-Georgia-normal-italic-normal-*-0-iso10646-1 -monotype-Arial-bold-normal-normal-*-0-iso10646-1 -urw-Nimbus Mono L-normal-normal-normal-*-m-0-iso10646-1 -unknown-DejaVu Serif-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-normal-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-normal-italic-normal-*-0-iso10646-1 -unknown-Liberation Sans-normal-normal-normal-*-0-iso10646-1 -bitstream-Courier 10 Pitch-normal-italic-normal-*-m-0-iso10646-1 -monotype-Andale Mono-normal-normal-normal-*-m-0-iso10646-1 -urw-URW Bookman L-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-bold-italic-normal-*-0-iso10646-1 -unknown-DejaVu Serif-normal-italic-normal-*-0-iso10646-1 -urw-Nimbus Sans L-normal-normal-normal-*-0-iso10646-1 -microsoft-Trebuchet MS-bold-italic-normal-*-0-iso10646-1 -monotype-Arial Black-normal-normal-normal-*-0-iso10646-1 -monotype-Times New Roman-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-oblique-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-bold-italic-normal-*-0-iso10646-1 ... sort-by: -*-medium-r-semicondensed-*-13-* xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-0-iso10646-1 font for: (8614) list: -misc-fixed-*--*-iso10646-1:script=symbol list: -misc-fixed-*-iso10646-1:script=symbol list: -*-fixed-*--*-iso10646-1:script=symbol list: -*-fixed-*-iso10646-1:script=symbol list: -misc-*--*-iso10646-1:script=symbol list: -misc-*-iso10646-1:script=symbol list: -*--*-iso10646-1:script=symbol -microsoft-Georgia-normal-italic-normal-*-0-iso10646-1 -monotype-Arial-bold-normal-normal-*-0-iso10646-1 -urw-Nimbus Mono L-normal-normal-normal-*-m-0-iso10646-1 -unknown-DejaVu Serif-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-normal-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-normal-italic-normal-*-0-iso10646-1 -unknown-Liberation Sans-normal-normal-normal-*-0-iso10646-1 -bitstream-Courier 10 Pitch-normal-italic-normal-*-m-0-iso10646-1 -monotype-Andale Mono-normal-normal-normal-*-m-0-iso10646-1 -urw-URW Bookman L-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-bold-italic-normal-*-0-iso10646-1 -unknown-DejaVu Serif-normal-italic-normal-*-0-iso10646-1 -urw-Nimbus Sans L-normal-normal-normal-*-0-iso10646-1 -microsoft-Trebuchet MS-bold-italic-normal-*-0-iso10646-1 -monotype-Arial Black-normal-normal-normal-*-0-iso10646-1 -monotype-Times New Roman-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-oblique-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-bold-italic-normal-*-0-iso10646-1 ... sort-by: -*-medium-r-semicondensed-*-13-* xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-0-iso10646-1 font for: (8594) list: -misc-fixed-*--*-iso10646-1:script=symbol list: -misc-fixed-*-iso10646-1:script=symbol list: -*-fixed-*--*-iso10646-1:script=symbol list: -*-fixed-*-iso10646-1:script=symbol list: -misc-*--*-iso10646-1:script=symbol list: -misc-*-iso10646-1:script=symbol list: -*--*-iso10646-1:script=symbol -microsoft-Georgia-normal-italic-normal-*-0-iso10646-1 -monotype-Arial-bold-normal-normal-*-0-iso10646-1 -urw-Nimbus Mono L-normal-normal-normal-*-m-0-iso10646-1 -unknown-DejaVu Serif-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-normal-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-normal-italic-normal-*-0-iso10646-1 -unknown-Liberation Sans-normal-normal-normal-*-0-iso10646-1 -bitstream-Courier 10 Pitch-normal-italic-normal-*-m-0-iso10646-1 -monotype-Andale Mono-normal-normal-normal-*-m-0-iso10646-1 -urw-URW Bookman L-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-bold-italic-normal-*-0-iso10646-1 -unknown-DejaVu Serif-normal-italic-normal-*-0-iso10646-1 -urw-Nimbus Sans L-normal-normal-normal-*-0-iso10646-1 -microsoft-Trebuchet MS-bold-italic-normal-*-0-iso10646-1 -monotype-Arial Black-normal-normal-normal-*-0-iso10646-1 -monotype-Times New Roman-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-oblique-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-bold-italic-normal-*-0-iso10646-1 ... sort-by: -*-medium-r-semicondensed-*-13-* xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-0-iso10646-1 font for: (937) list: -misc-fixed-*--*-iso10646-1:script=symbol list: -misc-fixed-*-iso10646-1:script=symbol list: -*-fixed-*--*-iso10646-1:script=symbol list: -*-fixed-*-iso10646-1:script=symbol list: -misc-*--*-iso10646-1:script=symbol list: -misc-*-iso10646-1:script=symbol list: -*--*-iso10646-1:script=symbol -microsoft-Georgia-normal-italic-normal-*-0-iso10646-1 -monotype-Arial-bold-normal-normal-*-0-iso10646-1 -urw-Nimbus Mono L-normal-normal-normal-*-m-0-iso10646-1 -unknown-DejaVu Serif-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-normal-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-normal-italic-normal-*-0-iso10646-1 -unknown-Liberation Sans-normal-normal-normal-*-0-iso10646-1 -bitstream-Courier 10 Pitch-normal-italic-normal-*-m-0-iso10646-1 -monotype-Andale Mono-normal-normal-normal-*-m-0-iso10646-1 -urw-URW Bookman L-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-bold-italic-normal-*-0-iso10646-1 -unknown-DejaVu Serif-normal-italic-normal-*-0-iso10646-1 -urw-Nimbus Sans L-normal-normal-normal-*-0-iso10646-1 -microsoft-Trebuchet MS-bold-italic-normal-*-0-iso10646-1 -monotype-Arial Black-normal-normal-normal-*-0-iso10646-1 -monotype-Times New Roman-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-oblique-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-bold-italic-normal-*-0-iso10646-1 ... sort-by: -*-medium-r-semicondensed-*-13-* xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-0-iso10646-1 font for: (8658) list: -misc-fixed-*--*-iso10646-1:script=symbol list: -misc-fixed-*-iso10646-1:script=symbol list: -*-fixed-*--*-iso10646-1:script=symbol list: -*-fixed-*-iso10646-1:script=symbol list: -misc-*--*-iso10646-1:script=symbol list: -misc-*-iso10646-1:script=symbol list: -*--*-iso10646-1:script=symbol -microsoft-Georgia-normal-italic-normal-*-0-iso10646-1 -monotype-Arial-bold-normal-normal-*-0-iso10646-1 -urw-Nimbus Mono L-normal-normal-normal-*-m-0-iso10646-1 -unknown-DejaVu Serif-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-normal-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-normal-italic-normal-*-0-iso10646-1 -unknown-Liberation Sans-normal-normal-normal-*-0-iso10646-1 -bitstream-Courier 10 Pitch-normal-italic-normal-*-m-0-iso10646-1 -monotype-Andale Mono-normal-normal-normal-*-m-0-iso10646-1 -urw-URW Bookman L-normal-italic-normal-*-0-iso10646-1 -microsoft-Verdana-bold-italic-normal-*-0-iso10646-1 -unknown-DejaVu Serif-normal-italic-normal-*-0-iso10646-1 -urw-Nimbus Sans L-normal-normal-normal-*-0-iso10646-1 -microsoft-Trebuchet MS-bold-italic-normal-*-0-iso10646-1 -monotype-Arial Black-normal-normal-normal-*-0-iso10646-1 -monotype-Times New Roman-bold-normal-normal-*-0-iso10646-1 -unknown-DejaVu Sans-bold-oblique-semi-condensed-*-0-iso10646-1 -monotype-Times New Roman-bold-italic-normal-*-0-iso10646-1 ... sort-by: -*-medium-r-semicondensed-*-13-* xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-0-iso10646-1 font for: (937) list: -misc-fixed-*-r-semicondensed--*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-75-75-c-60-iso8859-1 -misc-fixed-bold-r-semicondensed--13-*-75-75-c-60-iso8859-1 sort-by: -*-bold-r-semicondensed-*-13-* x:-misc-fixed-bold-r-semicondensed--13-*-75-75-c-60-iso8859-1 open: -misc-fixed-bold-r-semicondensed--13-*-75-75-c-60-iso8859-1 x:-misc-fixed-bold-r-semicondensed--13-120-75-75-c-60-iso8859-1 font for: (937) list: -misc-fixed-medium-*-semicondensed--*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--13-*-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--12-*-75-75-c-60-iso8859-1 -misc-fixed-medium-o-semicondensed--13-*-75-75-c-60-iso8859-1 sort-by: -*-medium-italic-semicondensed-*-13-* x:-misc-fixed-medium-o-semicondensed--13-*-75-75-c-60-iso8859-1 open: -misc-fixed-medium-o-semicondensed--13-*-75-75-c-60-iso8859-1 x:-misc-fixed-medium-o-semicondensed--13-120-75-75-c-60-iso8859-1
Stefan Monnier <monnier <at> iro.umontreal.ca>
to control <at> emacsbugs.donarmstrong.com
.
(Wed, 06 May 2009 04:25:05 GMT) Full text and rfc822 format available.bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Fri, 08 May 2009 03:45:03 GMT) Full text and rfc822 format available.Chong Yidong <cyd <at> stupidchicken.com>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Fri, 08 May 2009 03:45:03 GMT) Full text and rfc822 format available.Message #22 received at 2667 <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Chong Yidong <cyd <at> stupidchicken.com> To: Stefan Monnier <monnier <at> iro.umontreal.ca> Cc: 2667 <at> debbugs.gnu.org Subject: Re: Still seeing inconsistent fonts Date: Thu, 07 May 2009 23:41:28 -0400
> I also noticed recently that my fonts are inconsistent: when writing > math symbols (mostly greek letters), I notice that they do not use my > misc-fixed font but "DejaVu Sans" instead. > > > xrdb -remove; rm ~/.Xdefaults > > emacs -Q ~/re/papers/comp-deptypes/main.tex > M-: (setq font-log nil) RET > M-: (set-face-font 'default > > "-misc-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*") > > And now all my latin text uses my beloved misc-fixed > but all the math symbols use "DejaVu Sans" I can't reproduce this. Could you provide a self-contained testcase?
bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Fri, 08 May 2009 20:05:07 GMT) Full text and rfc822 format available.Stefan Monnier <monnier <at> IRO.UMontreal.CA>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Fri, 08 May 2009 20:05:07 GMT) Full text and rfc822 format available.Message #27 received at 2667 <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Stefan Monnier <monnier <at> IRO.UMontreal.CA> To: Chong Yidong <cyd <at> stupidchicken.com> Cc: 2667 <at> debbugs.gnu.org Subject: Re: Still seeing inconsistent fonts Date: Fri, 08 May 2009 15:58:31 -0400
> I can't reproduce this. Could you provide a self-contained testcase? Sure: > xrdb -remove > rm ~/.Xdefaults > src/emacs -Q --eval '(set-face-font (quote default) \ "-misc-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*")' C-u C-\ TeX RET a \ ' e \ ' r \ f o r a l l "aéŕ" use misc-fixed-semicondensed (the first two with iso8859-1 and the last with iso8859-2), but "∀" is displayed with xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-13-*-*-*-*-0-iso10646-1 Note that Emacs-22.3 used -Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO10646-1 for both "ŕ" and "∀". Stefan
bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Mon, 11 May 2009 12:25:05 GMT) Full text and rfc822 format available.Kenichi Handa <handa <at> m17n.org>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Mon, 11 May 2009 12:25:05 GMT) Full text and rfc822 format available.Message #32 received at 2667 <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Kenichi Handa <handa <at> m17n.org> To: Stefan Monnier <monnier <at> IRO.UMontreal.CA>, 2667 <at> debbugs.gnu.org Cc: cyd <at> stupidchicken.com, 2667 <at> debbugs.gnu.org Subject: Re: bug#2667: Still seeing inconsistent fonts Date: Mon, 11 May 2009 21:21:45 +0900
Sorry for the late response on this matter. In article <jwv7i0rml4c.fsf-monnier+emacsbugreports <at> gnu.org>, Stefan Monnier <monnier <at> IRO.UMontreal.CA> writes: > > I can't reproduce this. Could you provide a self-contained testcase? > Sure: > xrdb -remove > rm ~/.Xdefaults > src/emacs -Q --eval '(set-face-font (quote default) \ > "-misc-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*")' > C-u C-\ TeX RET > a > \ ' e > \ ' r > \ f o r a l l > "aéŕ" use misc-fixed-semicondensed (the first two with iso8859-1 and > the last with iso8859-2), but "∀" is displayed with > xft:-unknown-DejaVu Sans-normal-normal-semi-condensed-*-13-*-*-*-*-0-iso10646-1 ∀ belongs to `symbol' script, but the xfont backend didn't support :script font property. That is because I was afraid that it made the font listing extremely slow (we must open all iso10646-1 fonts to check if it supports the requested characters). Actually my trial implementation of :script property supports took more than 1 minute to display HELLO file. But, if we can use this heuristic: X fonts that have the same property values except for size related properties supports the same set of characters on all display. For example, all these fonts -adobe-courier-medium-r-normal--8-80-75-75-m-50-iso10646-1 -adobe-courier-medium-r-normal--10-100-75-75-m-60-iso10646-1 -adobe-courier-medium-r-normal--11-80-100-100-m-60-iso10646-1 -adobe-courier-medium-r-normal--12-120-75-75-m-70-iso10646-1 -adobe-courier-medium-r-normal--14-100-100-100-m-90-iso10646-1 -adobe-courier-medium-r-normal--14-140-75-75-m-90-iso10646-1 -adobe-courier-medium-r-normal--17-120-100-100-m-100-iso10646-1 -adobe-courier-medium-r-normal--18-180-75-75-m-110-iso10646-1 -adobe-courier-medium-r-normal--20-140-100-100-m-110-iso10646-1 -adobe-courier-medium-r-normal--24-240-75-75-m-150-iso10646-1 -adobe-courier-medium-r-normal--25-180-100-100-m-150-iso10646-1 -adobe-courier-medium-r-normal--34-240-100-100-m-200-iso10646-1 suports the same set of characters. we can list fonts in a realistic time. Attached is the patch to try it. Could you please test it? As the change is not simple, I have not yet installed it. --- Kenichi Handa handa <at> m17n.org Index: xfont.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/xfont.c,v retrieving revision 1.28 diff -u -r1.28 xfont.c --- xfont.c 8 May 2009 06:22:40 -0000 1.28 +++ xfont.c 11 May 2009 12:03:16 -0000 @@ -256,20 +256,172 @@ return len; } -static Lisp_Object xfont_list_pattern P_ ((Lisp_Object, Display *, char *)); +static int xfont_chars_supported P_ ((Lisp_Object, XFontStruct *, + struct charset *, struct charset *)); + +/* Check if CHARS (cons or vector) is supported by XFONT whose + encoding charset is ENCODING (XFONT is NULL) or by a font whose + registry corresponds to ENCODING and REPERTORY. + Return 1 if supported, return 0 otherwise. */ + +static int +xfont_chars_supported (chars, xfont, encoding, repertory) + Lisp_Object chars; + XFontStruct *xfont; + struct charset *encoding, *repertory; +{ + struct charset *charset = repertory ? repertory : encoding; + + if (CONSP (chars)) + { + for (; CONSP (chars); chars = XCDR (chars)) + { + int c = XINT (XCAR (chars)); + unsigned code = ENCODE_CHAR (charset, c); + XChar2b char2b; + + if (code == CHARSET_INVALID_CODE (charset)) + break; + if (! xfont) + continue; + if (code >= 0x10000) + break; + char2b.byte1 = code >> 8; + char2b.byte2 = code & 0xFF; + if (! xfont_get_pcm (xfont, &char2b)) + break; + } + return (NILP (chars)); + } + else if (VECTORP (chars)) + { + int i; + + for (i = ASIZE (chars) - 1; i >= 0; i--) + { + int c = XINT (AREF (chars, i)); + unsigned code = ENCODE_CHAR (charset, c); + XChar2b char2b; + + if (code == CHARSET_INVALID_CODE (charset)) + continue; + if (! xfont) + break; + if (code >= 0x10000) + continue; + char2b.byte1 = code >> 8; + char2b.byte2 = code & 0xFF; + if (xfont_get_pcm (xfont, &char2b)) + break; + } + return (i >= 0); + } + return 0; +} + +/* A hash table recoding which font supports which scritps. Each key + is a vector of characteristic font propertis FOUNDRY to WIDTH and + ADDSTYLE, and each value is a list of script symbols. + + We assume that fonts that have the same value in the above + properties supports the same set of characters on all displays. */ + +static Lisp_Object xfont_scripts_cache; + +/* Return a list of scripts supported by the font of FONTNAME whose + characteristic properties are in PROPS and whose encoding charset + is ENCODING. A caller must call BLOCK_INPUT in advance. */ static Lisp_Object -xfont_list_pattern (frame, display, pattern) - Lisp_Object frame; +xfont_supported_scripts (display, fontname, props, encoding) + Display *display; + char *fontname; + Lisp_Object props; + struct charset *encoding; +{ + Lisp_Object scripts; + + /* Two special cases to avoid opening rather big fonts. */ + if (AREF (props, 2), Qja) + return Fcons (intern ("kana"), Fcons (intern ("han"), Qnil)); + if (AREF (props, 2), Qko) + return Fcons (intern ("hangul"), Qnil); + scripts = Fgethash (props, xfont_scripts_cache, Qt); + if (EQ (scripts, Qt)) + { + XFontStruct *xfont; + Lisp_Object val; + + scripts = Qnil; + xfont = XLoadQueryFont (display, fontname); + if (xfont) + { + if (xfont->per_char) + { + for (val = Vscript_representative_chars; CONSP (val); + val = XCDR (val)) + if (CONSP (XCAR (val)) && SYMBOLP (XCAR (XCAR (val)))) + { + Lisp_Object script = XCAR (XCAR (val)); + Lisp_Object chars = XCDR (XCAR (val)); + + if (xfont_chars_supported (chars, xfont, encoding, NULL)) + scripts = Fcons (script, scripts); + } + } + XFreeFont (display, xfont); + } + Fputhash (Fcopy_sequence (props), scripts, xfont_scripts_cache); + } + return scripts; +} + +extern Lisp_Object Vscalable_fonts_allowed; + +static Lisp_Object xfont_list_pattern P_ ((Display *, char *, + Lisp_Object, Lisp_Object)); + +static Lisp_Object +xfont_list_pattern (display, pattern, registry, script) Display *display; char *pattern; + Lisp_Object registry, script; { Lisp_Object list = Qnil; + Lisp_Object chars = Qnil; + struct charset *encoding, *repertory = NULL; int i, limit, num_fonts; char **names; /* Large enough to decode the longest XLFD (255 bytes). */ char buf[512]; + if (! NILP (registry) + && font_registry_charsets (registry, &encoding, &repertory) < 0) + /* Unknown REGISTRY, not supported. */ + return Qnil; + if (! NILP (script)) + { + chars = assq_no_quit (script, Vscript_representative_chars); + if (NILP (chars)) + /* We can't tell whether or not a font supports SCRIPT. */ + return Qnil; + chars = XCDR (chars); + if (repertory) + { + if (! xfont_chars_supported (chars, NULL, encoding, repertory)) + return Qnil; + script = Qnil; + } + } + if (! repertory && NILP (xfont_scripts_cache)) + { + Lisp_Object args[2]; + + args[0] = QCtest; + args[1] = Qequal; + xfont_scripts_cache = Fmake_hash_table (2, args); + } + BLOCK_INPUT; x_catch_errors (display); @@ -292,6 +444,8 @@ if (num_fonts > 0) { char **indices = alloca (sizeof (char *) * num_fonts); + Lisp_Object props = Fmake_vector (make_number (9), Qnil); + Lisp_Object scripts = Qnil; for (i = 0; i < num_fonts; i++) indices[i] = names[i]; @@ -300,47 +454,68 @@ for (i = 0; i < num_fonts; i++) { Lisp_Object entity; - int result; - char *p; if (i > 0 && xstrcasecmp (indices[i - 1], indices[i]) == 0) continue; - entity = font_make_entity (); - ASET (entity, FONT_TYPE_INDEX, Qx); xfont_decode_coding_xlfd (indices[i], -1, buf); - result = font_parse_xlfd (buf, entity); - if (result < 0) + font_parse_xlfd (buf, entity); + ASET (entity, FONT_TYPE_INDEX, Qx); + /* Avoid auto-scaled fonts. */ + if (XINT (AREF (entity, FONT_DPI_INDEX)) != 0 + && XINT (AREF (entity, FONT_AVGWIDTH_INDEX)) == 0) + continue; + /* Avoid not-allowed scalable fonts. */ + if (NILP (Vscalable_fonts_allowed)) { - /* This may be an alias name. Try to get the full XLFD name - from XA_FONT property of the font. */ - XFontStruct *font = XLoadQueryFont (display, indices[i]); - unsigned long value; - - if (! font) + if (XINT (AREF (entity, FONT_SIZE_INDEX)) == 0) continue; - if (XGetFontProperty (font, XA_FONT, &value)) - { - char *name = (char *) XGetAtomName (display, (Atom) value); - int len = strlen (name); + } + else if (CONSP (Vscalable_fonts_allowed)) + { + Lisp_Object tail, elt; - /* If DXPC (a Differential X Protocol Compressor) - Ver.3.7 is running, XGetAtomName will return null - string. We must avoid such a name. */ - if (len > 0) - { - xfont_decode_coding_xlfd (indices[i], -1, buf); - result = font_parse_xlfd (buf, entity); - } - XFree (name); + for (tail = Vscalable_fonts_allowed; CONSP (tail); + tail = XCDR (tail)) + { + elt = XCAR (tail); + if (STRINGP (elt) + && fast_c_string_match_ignore_case (elt, indices[i]) >= 0) + break; } - XFreeFont (display, font); + if (! CONSP (tail)) + continue; } - if (result == 0 - /* Avoid auto-scaled fonts. */ - && (XINT (AREF (entity, FONT_DPI_INDEX)) == 0 - || XINT (AREF (entity, FONT_AVGWIDTH_INDEX)) > 0)) + /* Update encoding and repertory if necessary. */ + if (! EQ (registry, AREF (entity, FONT_REGISTRY_INDEX))) + { + registry = AREF (entity, FONT_REGISTRY_INDEX); + if (font_registry_charsets (registry, &encoding, &repertory) < 0) + encoding = NULL; + } + if (! encoding) + /* Unknown REGISTRY, not supported. */ + continue; + if (repertory) + { + if (NILP (script) + || xfont_chars_supported (chars, NULL, encoding, repertory)) + list = Fcons (entity, list); + continue; + } + if (memcmp (&(AREF (props, 0)), &(AREF (entity, FONT_FOUNDRY_INDEX)), + sizeof (Lisp_Object) * 7) + || ! EQ (AREF (entity, FONT_SPACING_INDEX), AREF (props, 8))) + { + memcpy (&(AREF (props, 0)), &(AREF (entity, FONT_FOUNDRY_INDEX)), + sizeof (Lisp_Object) * 7); + ASET (props, 8, AREF (entity, FONT_SPACING_INDEX)); + scripts = xfont_supported_scripts (display, indices[i], + props, encoding); + } + if (NILP (script) + || ! NILP (Fmemq (script, scripts))) list = Fcons (entity, list); } XFreeFontNames (names); @@ -359,7 +534,7 @@ { FRAME_PTR f = XFRAME (frame); Display *display = FRAME_X_DISPLAY_INFO (f)->display; - Lisp_Object registry, list, val, extra; + Lisp_Object registry, list, val, extra, script; int len; /* Large enough to contain the longest XLFD (255 bytes) in UTF-8. */ char name[512]; @@ -370,9 +545,6 @@ val = assq_no_quit (QCotf, extra); if (! NILP (val)) return Qnil; - val = assq_no_quit (QCscript, extra); - if (! NILP (val)) - return Qnil; val = assq_no_quit (QClang, extra); if (! NILP (val)) return Qnil; @@ -382,8 +554,13 @@ len = font_unparse_xlfd (spec, 0, name, 512); if (len < 0 || (len = xfont_encode_coding_xlfd (name)) < 0) return Qnil; - ASET (spec, FONT_REGISTRY_INDEX, registry); - list = xfont_list_pattern (frame, display, name); + + val = assq_no_quit (QCscript, extra); + if (NILP (val)) + script = Qnil; + else + script = XCDR (val); + list = xfont_list_pattern (display, name, registry, script); if (NILP (list) && NILP (registry)) { /* Try iso10646-1 */ @@ -392,7 +569,7 @@ if (r - name + 10 < 256) /* 10 == strlen (iso10646-1) */ { strcpy (r, "iso10646-1"); - list = xfont_list_pattern (frame, display, name); + list = xfont_list_pattern (display, name, Qiso10646_1, script); } } if (NILP (list) && ! NILP (registry)) @@ -412,7 +589,7 @@ && ((r - name) + SBYTES (XCAR (alter))) < 256) { strcpy (r, (char *) SDATA (XCAR (alter))); - list = xfont_list_pattern (frame, display, name); + list = xfont_list_pattern (display, name, registry, script); if (! NILP (list)) break; } @@ -427,7 +604,7 @@ bcopy (SDATA (XCDR (val)), name, SBYTES (XCDR (val)) + 1); if (xfont_encode_coding_xlfd (name) < 0) return Qnil; - list = xfont_list_pattern (frame, display, name); + list = xfont_list_pattern (display, name, registry, script); } } @@ -996,6 +1173,8 @@ void syms_of_xfont () { + staticpro (&xfont_scripts_cache); + xfont_scripts_cache = Qnil; xfont_driver.type = Qx; register_font_driver (&xfont_driver, NULL); }
bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Mon, 11 May 2009 16:00:03 GMT) Full text and rfc822 format available.Chong Yidong <cyd <at> stupidchicken.com>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Mon, 11 May 2009 16:00:03 GMT) Full text and rfc822 format available.Message #37 received at 2667 <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Chong Yidong <cyd <at> stupidchicken.com> To: Stefan Monnier <monnier <at> IRO.UMontreal.CA> Cc: Kenichi Handa <handa <at> m17n.org>, 2667 <at> debbugs.gnu.org Subject: Re: bug#2667: Still seeing inconsistent fonts Date: Mon, 11 May 2009 11:56:16 -0400
Kenichi Handa <handa <at> m17n.org> writes: > But, if we can use this heuristic: > > X fonts that have the same property values except for > size related properties supports the same set of > characters on all display. > > we can list fonts in a realistic time. Attached is the > patch to try it. Could you please test it? As the change > is not simple, I have not yet installed it. I don't have a good sense of whether this problem is serious enough to justify the change, at this stage in the pretest. Stefan, what's your feeling about this?
bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Mon, 11 May 2009 17:30:04 GMT) Full text and rfc822 format available.Stefan Monnier <monnier <at> iro.umontreal.ca>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Mon, 11 May 2009 17:30:04 GMT) Full text and rfc822 format available.Message #42 received at 2667 <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Stefan Monnier <monnier <at> iro.umontreal.ca> To: Chong Yidong <cyd <at> stupidchicken.com> Cc: Kenichi Handa <handa <at> m17n.org>, 2667 <at> debbugs.gnu.org Subject: Re: bug#2667: Still seeing inconsistent fonts Date: Mon, 11 May 2009 13:23:38 -0400
>> But, if we can use this heuristic: >> X fonts that have the same property values except for >> size related properties supports the same set of >> characters on all display. >> we can list fonts in a realistic time. Attached is the >> patch to try it. Could you please test it? As the change >> is not simple, I have not yet installed it. > I don't have a good sense of whether this problem is serious enough to > justify the change, at this stage in the pretest. Stefan, what's your > feeling about this? Not sure either. I'll come back when I've tried it out some more. Stefan
bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Wed, 20 May 2009 19:50:06 GMT) Full text and rfc822 format available.Stefan Monnier <monnier <at> IRO.UMontreal.CA>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Wed, 20 May 2009 19:50:06 GMT) Full text and rfc822 format available.Message #47 received at 2667 <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Stefan Monnier <monnier <at> IRO.UMontreal.CA> To: Kenichi Handa <handa <at> m17n.org> Cc: 2667 <at> debbugs.gnu.org, cyd <at> stupidchicken.com Subject: Re: bug#2667: Still seeing inconsistent fonts Date: Wed, 20 May 2009 15:43:00 -0400
> ∀ belongs to `symbol' script, but the xfont backend didn't > support :script font property. That is because I was afraid > that it made the font listing extremely slow (we must open > all iso10646-1 fonts to check if it supports the requested > characters). Actually my trial implementation of :script > property supports took more than 1 minute to display HELLO > file. 1 minute would be a problem, indeed. > But, if we can use this heuristic: > X fonts that have the same property values except for > size related properties supports the same set of > characters on all display. For example, all these fonts > -adobe-courier-medium-r-normal--8-80-75-75-m-50-iso10646-1 > -adobe-courier-medium-r-normal--10-100-75-75-m-60-iso10646-1 > -adobe-courier-medium-r-normal--11-80-100-100-m-60-iso10646-1 > -adobe-courier-medium-r-normal--12-120-75-75-m-70-iso10646-1 > -adobe-courier-medium-r-normal--14-100-100-100-m-90-iso10646-1 > -adobe-courier-medium-r-normal--14-140-75-75-m-90-iso10646-1 > -adobe-courier-medium-r-normal--17-120-100-100-m-100-iso10646-1 > -adobe-courier-medium-r-normal--18-180-75-75-m-110-iso10646-1 > -adobe-courier-medium-r-normal--20-140-100-100-m-110-iso10646-1 > -adobe-courier-medium-r-normal--24-240-75-75-m-150-iso10646-1 > -adobe-courier-medium-r-normal--25-180-100-100-m-150-iso10646-1 > -adobe-courier-medium-r-normal--34-240-100-100-m-200-iso10646-1 > suports the same set of characters. That assumption is obviously not guaranteed to hold, and I don't think it really holds in practice, but it looks like an acceptable tradeoff, since the cases where it doesn't hold shouldn't be too frequent. > we can list fonts in a realistic time. Attached is the > patch to try it. Could you please test it? As the change > is not simple, I have not yet installed it. I tried it on my smallest machine, and it seems fast enough: C-h h takes approximately the same amount of time with it than it did under Emacs-22.3 (around 3s to 4s). [ And this even though the Emacs-22.3 I used was built with -O2 and such, whereas my Emacs-CVS is built with -O1, USE_LISP_UNION_TYPE, ENABLE_CHECKING, and a few additional runtime tests. ] The machines I used to test it were all running Debian testing, with a fairly standard set of fonts. I don't know how it would behave for people with many more fonts installed (most of which would presumably be scalable and hence wouldn't be affected by the heuristic). > -static Lisp_Object xfont_list_pattern P_ ((Lisp_Object, Display *, char *)); > +static int xfont_chars_supported P_ ((Lisp_Object, XFontStruct *, > + struct charset *, struct charset *)); Please just use ANSI-style declarations rather than K&R in new code. > + /* Two special cases to avoid opening rather big fonts. */ > + if (AREF (props, 2), Qja) > + return Fcons (intern ("kana"), Fcons (intern ("han"), Qnil)); > + if (AREF (props, 2), Qko) > + return Fcons (intern ("hangul"), Qnil); You need EQ (..) around those two tests. > + if (NILP (val)) > + script = Qnil; > + else > + script = XCDR (val); Aka: script = CDR (val); > + if (! repertory && NILP (xfont_scripts_cache)) > + { > + Lisp_Object args[2]; > + > + args[0] = QCtest; > + args[1] = Qequal; > + xfont_scripts_cache = Fmake_hash_table (2, args); > + } [...] > @@ -996,6 +1173,8 @@ > void > syms_of_xfont () > { > + staticpro (&xfont_scripts_cache); > + xfont_scripts_cache = Qnil; > xfont_driver.type = Qx; > register_font_driver (&xfont_driver, NULL); > } Why not just: @@ -996,6 +1173,8 @@ void syms_of_xfont () { + staticpro (&xfont_scripts_cache); + { + Lisp_Object args[2]; + args[0] = QCtest; + args[1] = Qequal; + xfont_scripts_cache = Fmake_hash_table (2, args); + } xfont_driver.type = Qx; register_font_driver (&xfont_driver, NULL); } Stefan
bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Thu, 21 May 2009 01:20:05 GMT) Full text and rfc822 format available.Kenichi Handa <handa <at> m17n.org>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Thu, 21 May 2009 01:20:05 GMT) Full text and rfc822 format available.Message #52 received at 2667 <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Kenichi Handa <handa <at> m17n.org> To: Stefan Monnier <monnier <at> IRO.UMontreal.CA> Cc: 2667 <at> debbugs.gnu.org, cyd <at> stupidchicken.com Subject: Re: bug#2667: Still seeing inconsistent fonts Date: Thu, 21 May 2009 10:15:56 +0900
In article <jwvbppnefy5.fsf-monnier+emacsbugreports <at> gnu.org>, Stefan Monnier <monnier <at> IRO.UMontreal.CA> writes: > > But, if we can use this heuristic: > > X fonts that have the same property values except for > > size related properties supports the same set of > > characters on all display. For example, all these fonts [...] > That assumption is obviously not guaranteed to hold, and I > don't think it really holds in practice, but it looks like > an acceptable tradeoff, since the cases where it doesn't > hold shouldn't be too frequent. So, you mean that we should install that change, right? > > -static Lisp_Object xfont_list_pattern P_ ((Lisp_Object, Display *, char *)); > > +static int xfont_chars_supported P_ ((Lisp_Object, XFontStruct *, > > + struct charset *, struct charset *)); > Please just use ANSI-style declarations rather than K&R in new code. Ah, I didn't realize that we switched to ANSI-style. > > + /* Two special cases to avoid opening rather big fonts. */ > > + if (AREF (props, 2), Qja) > > + return Fcons (intern ("kana"), Fcons (intern ("han"), Qnil)); > > + if (AREF (props, 2), Qko) > > + return Fcons (intern ("hangul"), Qnil); > You need EQ (..) around those two tests. Of course, sorry for the incorrect patch. > > + if (NILP (val)) > > + script = Qnil; > > + else > > + script = XCDR (val); > Aka: script = CDR (val); Ok. I didn't know CDR macro. > > + if (! repertory && NILP (xfont_scripts_cache)) > > + { > > + Lisp_Object args[2]; > > + > > + args[0] = QCtest; > > + args[1] = Qequal; > > + xfont_scripts_cache = Fmake_hash_table (2, args); > > + } > [...] > > @@ -996,6 +1173,8 @@ > > void > > syms_of_xfont () > > { > > + staticpro (&xfont_scripts_cache); > > + xfont_scripts_cache = Qnil; > > xfont_driver.type = Qx; > > register_font_driver (&xfont_driver, NULL); > > } > Why not just: > @@ -996,6 +1173,8 @@ > void > syms_of_xfont () > { > + staticpro (&xfont_scripts_cache); > + { > + Lisp_Object args[2]; > + args[0] = QCtest; > + args[1] = Qequal; > + xfont_scripts_cache = Fmake_hash_table (2, args); > + } > xfont_driver.type = Qx; > register_font_driver (&xfont_driver, NULL); > } I usually hesitate using a Lisp symbol Qxxxx in syms_of_XXX if I don't know where it is initialized, and wanted to avoid increasing the temacs size where possible. --- Kenichi Handa handa <at> m17n.org
bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Thu, 21 May 2009 11:35:03 GMT) Full text and rfc822 format available.Kenichi Handa <handa <at> m17n.org>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Thu, 21 May 2009 11:35:03 GMT) Full text and rfc822 format available.Message #57 received at 2667 <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Kenichi Handa <handa <at> m17n.org> To: 2667 <at> debbugs.gnu.org Cc: monnier <at> IRO.UMontreal.CA, cyd <at> stupidchicken.com, 2667 <at> debbugs.gnu.org Subject: Re: bug#2667: Still seeing inconsistent fonts Date: Thu, 21 May 2009 20:26:57 +0900
In article <E1M6wt2-0001YM-IL <at> etlken>, Kenichi Handa <handa <at> m17n.org> writes: > In article <jwvbppnefy5.fsf-monnier+emacsbugreports <at> gnu.org>, Stefan Monnier <monnier <at> IRO.UMontreal.CA> writes: > > > But, if we can use this heuristic: > > > X fonts that have the same property values except for > > > size related properties supports the same set of > > > characters on all display. For example, all these fonts > [...] > > That assumption is obviously not guaranteed to hold, and I > > don't think it really holds in practice, but it looks like > > an acceptable tradeoff, since the cases where it doesn't > > hold shouldn't be too frequent. > So, you mean that we should install that change, right? As Yidong said "go ahead", I've just installed the change (with slight modifications). --- Kenichi Handa handa <at> m17n.org
Chong Yidong <cyd <at> stupidchicken.com>
to control <at> emacsbugs.donarmstrong.com
.
(Thu, 21 May 2009 13:25:06 GMT) Full text and rfc822 format available.bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>
:bug#2667
; Package emacs
.
(Thu, 21 May 2009 14:55:07 GMT) Full text and rfc822 format available.Stefan Monnier <monnier <at> iro.umontreal.ca>
:Emacs Bugs <bug-gnu-emacs <at> gnu.org>
.
(Thu, 21 May 2009 14:55:07 GMT) Full text and rfc822 format available.Message #64 received at 2667 <at> emacsbugs.donarmstrong.com (full text, mbox):
From: Stefan Monnier <monnier <at> iro.umontreal.ca> To: Kenichi Handa <handa <at> m17n.org> Cc: 2667 <at> debbugs.gnu.org, cyd <at> stupidchicken.com Subject: Re: bug#2667: Still seeing inconsistent fonts Date: Thu, 21 May 2009 10:52:54 -0400
> I usually hesitate using a Lisp symbol Qxxxx in syms_of_XXX > if I don't know where it is initialized, and wanted to avoid > increasing the temacs size where possible. Since syms_of_<fontbackend> are all called very late, it's safe. Marginally increasing the temacs size is a non-issue in the light of the resulting code simplification. Stefan
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> emacsbugs.donarmstrong.com
.
(Fri, 19 Jun 2009 14:24:13 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.