all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Kenichi Handa <handa@m17n.org>
Cc: emacs-devel@gnu.org
Subject: Re: Fontset problem
Date: Thu, 26 Sep 2002 17:10:34 +0900 (JST)	[thread overview]
Message-ID: <200209260810.RAA12662@etlken.m17n.org> (raw)
In-Reply-To: <je4rd3qllv.fsf@sykes.suse.de> (message from Andreas Schwab on Fri, 06 Sep 2002 15:43:56 +0200)

Sorry for the late response.

In article <je4rd3qllv.fsf@sykes.suse.de>, Andreas Schwab <schwab@suse.de> writes:

> Kenichi Handa <handa@etl.go.jp> writes:
> |> So, please try this:
> |> 
> |> Emacs.Fontset-0: -*-courier-medium-r-normal--*-140-*-*-*-*-fontset-startup,\
> |> 	mule-unicode-2500-33ff:-*-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1,\
> |> 	mule-unicode-e000-ffff:-*-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1,\
> |> 	mule-unicode-0100-24ff:-*-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1

> That does not work either, now Emacs is using courier instead of fixed for
> the mule-unicode charsets.

Ah, I see.  You actually have courier iso10646-1 fonts.

Hmmm, currently, Emacs tries at first the family specified
by face, and if you have that font, Emacs uses it.

Perhaps, for finding a font or non-ASCII, non-Latin-1 chars,
Emacs should prefer the family specified in the fontset to
the family specified in the face.

I've just installed this change.  Please try it.  At least
it works for me with the above resource on the machine that
has courier iso10646-1 fonts.  Other people please check if
it doesn't break your font/fontset setting.  Font selection
routine is one of very delicate parts.

---
Ken'ichi HANDA
handa@m17n.org

2002-09-26  Kenichi Handa  <handa@etl.go.jp>

	* xfaces.c (try_font_list): New arg PREFER_FACE_FAMILY.  If it is
	nonzero, try face's family at first.  Otherwise try FAMILY at
	first.
	(choose_face_font): If C is a single byte char or latin-1, call
	try_font_list with PREFER_FACE_FAMILY 1.

Index: xfaces.c
===================================================================
RCS file: /cvs/emacs/src/xfaces.c,v
retrieving revision 1.262
retrieving revision 1.263
diff -u -c -r1.262 -r1.263
cvs server: conflicting specifications of output style
*** xfaces.c	13 Sep 2002 19:35:08 -0000	1.262
--- xfaces.c	26 Sep 2002 08:03:52 -0000	1.263
***************
*** 510,516 ****
  static int font_list P_ ((struct frame *, Lisp_Object, Lisp_Object,
  			  Lisp_Object, struct font_name **));
  static int try_font_list P_ ((struct frame *, Lisp_Object *, 
! 			      Lisp_Object, Lisp_Object, struct font_name **));
  static int try_alternative_families P_ ((struct frame *f, Lisp_Object,
  					 Lisp_Object, struct font_name **));
  static int cmp_font_names P_ ((const void *, const void *));
--- 510,517 ----
  static int font_list P_ ((struct frame *, Lisp_Object, Lisp_Object,
  			  Lisp_Object, struct font_name **));
  static int try_font_list P_ ((struct frame *, Lisp_Object *, 
! 			      Lisp_Object, Lisp_Object, struct font_name **,
! 			      int));
  static int try_alternative_families P_ ((struct frame *f, Lisp_Object,
  					 Lisp_Object, struct font_name **));
  static int cmp_font_names P_ ((const void *, const void *));
***************
*** 6324,6344 ****
     match.  A value of nil means include fonts of any registry and
     encoding.
     
     Return in *FONTS a pointer to a vector of font_name structures for
     the fonts matched.  Value is the number of fonts found.  */
  
  static int
! try_font_list (f, attrs, family, registry, fonts)
       struct frame *f;
       Lisp_Object *attrs;
       Lisp_Object family, registry;
       struct font_name **fonts;
  {
    int nfonts = 0;
    Lisp_Object face_family = attrs[LFACE_FAMILY_INDEX];
  
!   if (STRINGP (face_family))
!     nfonts = try_alternative_families (f, face_family, registry, fonts);
  
  #ifdef MAC_OS
    /* When realizing the default face and a font spec does not matched
--- 6325,6352 ----
     match.  A value of nil means include fonts of any registry and
     encoding.
     
+    If PREFER_FACE_FAMILY is nonzero, perfer face's family to FAMILY.
+    Otherwise, prefer FAMILY.
+ 
     Return in *FONTS a pointer to a vector of font_name structures for
     the fonts matched.  Value is the number of fonts found.  */
  
  static int
! try_font_list (f, attrs, family, registry, fonts, prefer_face_family)
       struct frame *f;
       Lisp_Object *attrs;
       Lisp_Object family, registry;
       struct font_name **fonts;
+      int prefer_face_family;
  {
    int nfonts = 0;
    Lisp_Object face_family = attrs[LFACE_FAMILY_INDEX];
+   Lisp_Object try_family;
+ 
+   try_family = prefer_face_family ? face_family : family;
  
!   if (STRINGP (try_family))
!     nfonts = try_alternative_families (f, try_family, registry, fonts);
  
  #ifdef MAC_OS
    /* When realizing the default face and a font spec does not matched
***************
*** 6346,6357 ****
       default font.  On the Mac, this is mac-roman, which does not work
       if the family is -etl-fixed, e.g.  The following widens the
       choices and fixes that problem.  */
!   if (nfonts == 0 && STRINGP (face_family) && STRINGP (registry)
        && xstricmp (SDATA (registry), "mac-roman") == 0)
!     nfonts = try_alternative_families (f, face_family, Qnil, fonts);
  #endif
  
!   if (nfonts == 0 && !NILP (family))
      nfonts = try_alternative_families (f, family, registry, fonts);
  
    /* Try font family of the default face or "fixed".  */
--- 6354,6368 ----
       default font.  On the Mac, this is mac-roman, which does not work
       if the family is -etl-fixed, e.g.  The following widens the
       choices and fixes that problem.  */
!   if (nfonts == 0 && STRINGP (try_family) && STRINGP (registry)
        && xstricmp (SDATA (registry), "mac-roman") == 0)
!     nfonts = try_alternative_families (f, try_family, Qnil, fonts);
  #endif
  
!   if (! prefer_face_family)
!     family = face_family;
! 
!   if (nfonts == 0 && STRINGP (family))
      nfonts = try_alternative_families (f, family, registry, fonts);
  
    /* Try font family of the default face or "fixed".  */
***************
*** 6425,6431 ****
  
    /* Get a list of fonts matching that pattern and choose the
       best match for the specified face attributes from it.  */
!   nfonts = try_font_list (f, attrs, XCAR (pattern), XCDR (pattern), &fonts);
    width_ratio = (SINGLE_BYTE_CHAR_P (c)
  		 ? 1
  		 : CHARSET_WIDTH (CHAR_CHARSET (c)));
--- 6436,6444 ----
  
    /* Get a list of fonts matching that pattern and choose the
       best match for the specified face attributes from it.  */
!   nfonts = try_font_list (f, attrs, XCAR (pattern), XCDR (pattern), &fonts,
! 			  (SINGLE_BYTE_CHAR_P (c)
! 			   || CHAR_CHARSET (c) == charset_latin_iso8859_1));
    width_ratio = (SINGLE_BYTE_CHAR_P (c)
  		 ? 1
  		 : CHARSET_WIDTH (CHAR_CHARSET (c)));

  reply	other threads:[~2002-09-26  8:10 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-09-03 13:44 Fontset problem Andreas Schwab
2002-09-06 13:01 ` Kenichi Handa
2002-09-06 13:43   ` Andreas Schwab
2002-09-26  8:10     ` Kenichi Handa [this message]
2002-09-26 13:35       ` Andreas Schwab
2002-09-26 14:06       ` Stefan Monnier
2002-09-26 14:20         ` Andreas Schwab
2002-09-26 14:32           ` Stefan Monnier
2002-09-26 14:39             ` Andreas Schwab
2002-09-26 14:40               ` Stefan Monnier
2002-09-26 14:42                 ` Andreas Schwab
2002-09-26 14:48                   ` Stefan Monnier
2002-09-27  1:46                     ` Kenichi Handa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200209260810.RAA12662@etlken.m17n.org \
    --to=handa@m17n.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.