Mercurial > emacs
comparison src/xfns.c @ 83271:1830bcd0eec0
Merged from miles@gnu.org--gnu-2005 (patch 39-44, 184-191)
Patches applied:
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-184
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-185
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-186
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-187
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-188
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-189
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-190
Update from CVS
* miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-191
Update from CVS
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-39
Merge from emacs--cvs-trunk--0
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-40
Update from CVS
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-41
Update from CVS
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-42
Update from CVS
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-43
Update from CVS
* miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-44
Merge from emacs--cvs-trunk--0
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-311
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Sat, 19 Mar 2005 17:55:13 +0000 |
parents | 48ba3f89c89f 41e456f361cc |
children | b877c1847af1 |
comparison
equal
deleted
inserted
replaced
83270:42406ecdf5bf | 83271:1830bcd0eec0 |
---|---|
1969 | 1969 |
1970 /* Create an X fontset on frame F with base font name BASE_FONTNAME. */ | 1970 /* Create an X fontset on frame F with base font name BASE_FONTNAME. */ |
1971 | 1971 |
1972 char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; | 1972 char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; |
1973 | 1973 |
1974 /* Create an Xt fontset spec from the name of a base font. | |
1975 If `motif' is True use the Motif syntax. */ | |
1974 char * | 1976 char * |
1975 xic_create_fontsetname (base_fontname) | 1977 xic_create_fontsetname (base_fontname, motif) |
1976 char *base_fontname; | 1978 char *base_fontname; |
1977 { | 1979 Bool motif; |
1980 { | |
1981 const char *sep = motif ? ";" : ","; | |
1982 char *fontsetname; | |
1983 | |
1978 /* Make a fontset name from the base font name. */ | 1984 /* Make a fontset name from the base font name. */ |
1979 if (xic_defaut_fontset == base_fontname) | 1985 if (xic_defaut_fontset == base_fontname) |
1980 /* There is no base font name, use the default. */ | 1986 { /* There is no base font name, use the default. */ |
1981 return base_fontname; | 1987 int len = strlen (base_fontname) + 2; |
1988 fontsetname = xmalloc (len); | |
1989 bzero (fontsetname, len); | |
1990 strcpy (fontsetname, base_fontname); | |
1991 } | |
1982 else | 1992 else |
1983 { | 1993 { |
1984 /* Make a fontset name from the base font name. | 1994 /* Make a fontset name from the base font name. |
1985 The font set will be made of the following elements: | 1995 The font set will be made of the following elements: |
1986 - the base font. | 1996 - the base font. |
1987 - the base font where the charset spec is replaced by -*-*. | 1997 - the base font where the charset spec is replaced by -*-*. |
1988 - the same but with the family also replaced with -*-*-. */ | 1998 - the same but with the family also replaced with -*-*-. */ |
1989 char *p = base_fontname; | 1999 char *p = base_fontname; |
1990 char *fontsetname; | |
1991 int i; | 2000 int i; |
1992 | 2001 |
1993 for (i = 0; *p; p++) | 2002 for (i = 0; *p; p++) |
1994 if (*p == '-') i++; | 2003 if (*p == '-') i++; |
1995 if (i != 14) | 2004 if (i != 14) |
1996 { /* As the font name doesn't conform to XLFD, we can't | 2005 { /* As the font name doesn't conform to XLFD, we can't |
1997 modify it to generalize it to allcs and allfamilies. | 2006 modify it to generalize it to allcs and allfamilies. |
1998 Use the specified font plus the default. */ | 2007 Use the specified font plus the default. */ |
1999 int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 2; | 2008 int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 3; |
2000 fontsetname = xmalloc (len); | 2009 fontsetname = xmalloc (len); |
2001 bzero (fontsetname, len); | 2010 bzero (fontsetname, len); |
2002 strcpy (fontsetname, base_fontname); | 2011 strcpy (fontsetname, base_fontname); |
2003 strcat (fontsetname, ","); | 2012 strcat (fontsetname, sep); |
2004 strcat (fontsetname, xic_defaut_fontset); | 2013 strcat (fontsetname, xic_defaut_fontset); |
2005 } | 2014 } |
2006 else | 2015 else |
2007 { | 2016 { |
2008 int len; | 2017 int len; |
2009 char *p1 = NULL; | 2018 char *p1 = NULL, *p2 = NULL; |
2010 char *font_allcs = NULL; | 2019 char *font_allcs = NULL; |
2011 char *font_allfamilies = NULL; | 2020 char *font_allfamilies = NULL; |
2021 char *font_all = NULL; | |
2012 char *allcs = "*-*-*-*-*-*-*"; | 2022 char *allcs = "*-*-*-*-*-*-*"; |
2013 char *allfamilies = "-*-*-"; | 2023 char *allfamilies = "-*-*-"; |
2024 char *all = "*-*-*-*-"; | |
2014 | 2025 |
2015 for (i = 0, p = base_fontname; i < 8; p++) | 2026 for (i = 0, p = base_fontname; i < 8; p++) |
2016 { | 2027 { |
2017 if (*p == '-') | 2028 if (*p == '-') |
2018 { | 2029 { |
2019 i++; | 2030 i++; |
2020 if (i == 3) | 2031 if (i == 3) |
2021 p1 = p + 1; | 2032 p1 = p + 1; |
2033 else if (i == 7) | |
2034 p2 = p + 1; | |
2022 } | 2035 } |
2023 } | 2036 } |
2024 /* Build the font spec that matches all charsets. */ | 2037 /* Build the font spec that matches all charsets. */ |
2025 len = p - base_fontname + strlen (allcs) + 1; | 2038 len = p - base_fontname + strlen (allcs) + 1; |
2026 font_allcs = (char *) alloca (len); | 2039 font_allcs = (char *) alloca (len); |
2031 /* Build the font spec that matches all families. */ | 2044 /* Build the font spec that matches all families. */ |
2032 len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1; | 2045 len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1; |
2033 font_allfamilies = (char *) alloca (len); | 2046 font_allfamilies = (char *) alloca (len); |
2034 bzero (font_allfamilies, len); | 2047 bzero (font_allfamilies, len); |
2035 strcpy (font_allfamilies, allfamilies); | 2048 strcpy (font_allfamilies, allfamilies); |
2036 bcopy (p1, font_allfamilies + (strlen (allfamilies)), p - p1); | 2049 bcopy (p1, font_allfamilies + strlen (allfamilies), p - p1); |
2037 strcat (font_allfamilies, allcs); | 2050 strcat (font_allfamilies, allcs); |
2051 | |
2052 /* Build the font spec that matches all. */ | |
2053 len = p - p2 + strlen (allcs) + strlen (all) + strlen (allfamilies) + 1; | |
2054 font_all = (char *) alloca (len); | |
2055 bzero (font_all, len); | |
2056 strcpy (font_all, allfamilies); | |
2057 strcat (font_all, all); | |
2058 bcopy (p2, font_all + strlen (all) + strlen (allfamilies), p - p2); | |
2059 strcat (font_all, allcs); | |
2038 | 2060 |
2039 /* Build the actual font set name. */ | 2061 /* Build the actual font set name. */ |
2040 len = strlen (base_fontname) + strlen (font_allcs) | 2062 len = strlen (base_fontname) + strlen (font_allcs) |
2041 + strlen (font_allfamilies) + 3; | 2063 + strlen (font_allfamilies) + strlen (font_all) + 5; |
2042 fontsetname = xmalloc (len); | 2064 fontsetname = xmalloc (len); |
2043 bzero (fontsetname, len); | 2065 bzero (fontsetname, len); |
2044 strcpy (fontsetname, base_fontname); | 2066 strcpy (fontsetname, base_fontname); |
2045 strcat (fontsetname, ","); | 2067 strcat (fontsetname, sep); |
2046 strcat (fontsetname, font_allcs); | 2068 strcat (fontsetname, font_allcs); |
2047 strcat (fontsetname, ","); | 2069 strcat (fontsetname, sep); |
2048 strcat (fontsetname, font_allfamilies); | 2070 strcat (fontsetname, font_allfamilies); |
2071 strcat (fontsetname, sep); | |
2072 strcat (fontsetname, font_all); | |
2049 } | 2073 } |
2050 return fontsetname; | 2074 } |
2051 } | 2075 if (motif) |
2076 strcat (fontsetname, ":"); | |
2077 return fontsetname; | |
2052 } | 2078 } |
2053 | 2079 |
2054 static XFontSet | 2080 static XFontSet |
2055 xic_create_xfontset (f, base_fontname) | 2081 xic_create_xfontset (f, base_fontname) |
2056 struct frame *f; | 2082 struct frame *f; |
2079 } | 2105 } |
2080 } | 2106 } |
2081 | 2107 |
2082 if (!xfs) | 2108 if (!xfs) |
2083 { | 2109 { |
2084 char *fontsetname = xic_create_fontsetname (base_fontname); | 2110 char *fontsetname = xic_create_fontsetname (base_fontname, False); |
2085 | 2111 |
2086 /* New fontset. */ | 2112 /* New fontset. */ |
2087 xfs = XCreateFontSet (FRAME_X_DISPLAY (f), | 2113 xfs = XCreateFontSet (FRAME_X_DISPLAY (f), |
2088 fontsetname, &missing_list, | 2114 fontsetname, &missing_list, |
2089 &missing_count, &def_string); | 2115 &missing_count, &def_string); |
2090 if (missing_list) | 2116 if (missing_list) |
2091 XFreeStringList (missing_list); | 2117 XFreeStringList (missing_list); |
2092 if (fontsetname != base_fontname) | 2118 xfree (fontsetname); |
2093 xfree (fontsetname); | |
2094 } | 2119 } |
2095 | 2120 |
2096 if (FRAME_XIC_BASE_FONTNAME (f)) | 2121 if (FRAME_XIC_BASE_FONTNAME (f)) |
2097 xfree (FRAME_XIC_BASE_FONTNAME (f)); | 2122 xfree (FRAME_XIC_BASE_FONTNAME (f)); |
2098 FRAME_XIC_BASE_FONTNAME (f) = xstrdup (base_fontname); | 2123 FRAME_XIC_BASE_FONTNAME (f) = xstrdup (base_fontname); |
4594 Lisp_Object buffer; | 4619 Lisp_Object buffer; |
4595 struct buffer *old_buffer; | 4620 struct buffer *old_buffer; |
4596 | 4621 |
4597 check_x (); | 4622 check_x (); |
4598 | 4623 |
4599 /* Use this general default value to start with until we know if | |
4600 this frame has a specified name. */ | |
4601 Vx_resource_name = Vinvocation_name; | |
4602 | 4624 |
4603 #ifdef MULTI_KBOARD | 4625 #ifdef MULTI_KBOARD |
4604 kb = dpyinfo->kboard; | 4626 kb = dpyinfo->kboard; |
4605 #else | 4627 #else |
4606 kb = &the_only_kboard; | 4628 kb = &the_only_kboard; |
4610 name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING); | 4632 name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING); |
4611 if (!STRINGP (name) | 4633 if (!STRINGP (name) |
4612 && !EQ (name, Qunbound) | 4634 && !EQ (name, Qunbound) |
4613 && !NILP (name)) | 4635 && !NILP (name)) |
4614 error ("Invalid frame name--not a string or nil"); | 4636 error ("Invalid frame name--not a string or nil"); |
4615 | |
4616 Vx_resource_name = name; | |
4617 | 4637 |
4618 frame = Qnil; | 4638 frame = Qnil; |
4619 GCPRO3 (parms, name, frame); | 4639 GCPRO3 (parms, name, frame); |
4620 f = make_frame (1); | 4640 f = make_frame (1); |
4621 XSETFRAME (frame, f); | 4641 XSETFRAME (frame, f); |