Mercurial > hg > xemacs-beta
changeset 2597:d6a2e12b8411
[xemacs-hg @ 2005-02-19 16:18:52 by stephent]
autoconf and Xft docs <874qg8msql.fsf@tleepslib.sk.tsukuba.ac.jp>
author | stephent |
---|---|
date | Sat, 19 Feb 2005 16:18:56 +0000 |
parents | ad434b45ea15 |
children | 2f5d53e62972 |
files | man/ChangeLog man/internals/internals.texi |
diffstat | 2 files changed, 526 insertions(+), 48 deletions(-) [+] |
line wrap: on
line diff
--- a/man/ChangeLog Fri Feb 18 22:51:22 2005 +0000 +++ b/man/ChangeLog Sat Feb 19 16:18:56 2005 +0000 @@ -1,3 +1,48 @@ +2005-02-19 Stephen J. Turnbull <stephen@xemacs.org> + + * internals/internals.texi (Introduction to Writing C Code): + Change "mostly warning-free" to "warning-free" to encourage + reporting warnings as bugs. + (The configure Script): + Incorporate Malcolm Purvis's notes from configure.ac. Document + his implementations of keyword and complex options, and remove + descriptions of my obsolete code. + +2005-01-16 Stephen J. Turnbull <stephen@xemacs.org> + + * internals/internals.texi (Better Rendering Support -- + Configuration with the Interim Patches): + Improve notes on configuration. + +2004-12-15 Stephen J. Turnbull <stephen@xemacs.org> + + * internals/internals.texi (Better Rendering Support -- + Configuration with the Interim Patches): Menubar uses xftFont + resource, too. + +2005-02-03 Stephen J. Turnbull <stephen@xemacs.org> + + * internals/internals.texi (XEmacs from the Perspective of + Building): Mention autoconf. + (The Modules of XEmacs): Point Next the The Build Configuration + System and add Modules for Building XEmacs to the menu. + (A Summary of the Various XEmacs Modules): Add Modules for + Building XEmacs to menu, and Modules for Build Configuration, + Modules for Compiling XEmacs, and Modules for Preloading Lisp to + the table of sections. + (Low-Level Modules): Point Previous to Modules for Building XEmacs. + (Modules for Building XEmacs): + (Modules for Build Configuration): + (Modules for Compiling XEmacs): + (Modules for Preloading Lisp): + (The Build Configuration System): + (Adding Configurable Features): + (The configure Script): + (The Makefile Precursors): + New nodes. + (Rules When Writing New C Code): + Point Previous to The Build Configuration System. + 2005-02-18 Stephen J. Turnbull <stephen@xemacs.org> * XEmacs 21.5.19 "chives" is released.
--- a/man/internals/internals.texi Fri Feb 18 22:51:22 2005 +0000 +++ b/man/internals/internals.texi Sat Feb 19 16:18:56 2005 +0000 @@ -311,6 +311,7 @@ * XEmacs from the Perspective of Building:: * Build-Time Dependencies:: * The Modules of XEmacs:: +* The Build Configuration System:: * Rules When Writing New C Code:: * Regression Testing XEmacs:: * CVS Techniques:: @@ -2409,7 +2410,9 @@ The first step of building involves running the @file{configure} program and passing it various parameters to specify any optional features you want and compiler arguments and such, as described in the @file{INSTALL} -file. This determines what the build environment is, chooses the +file. (You may optionally run @file{autoconf} first to update the +@file{configure} script. @xref{Modules for Build Configuration}.) +This determines what the build environment is, chooses the appropriate @file{s/} and @file{m/} file, and runs a series of tests to determine many details about your environment, such as which library functions are available and exactly how they work. The reason for @@ -2520,12 +2523,13 @@ @code{custom-declare-variable-list} to prevent the @samp{void-variable} error. (Currently this is only needed for @file{make-docfile.el}.) -@node The Modules of XEmacs, Rules When Writing New C Code, Build-Time Dependencies, Top +@node The Modules of XEmacs, The Build Configuration System, Build-Time Dependencies, Top @chapter The Modules of XEmacs @cindex modules of XEmacs @menu * A Summary of the Various XEmacs Modules:: +* Modules for Building XEmacs:: * Low-Level Modules:: * Basic Lisp Modules:: * Modules for Standard Editing Operations:: @@ -2534,7 +2538,7 @@ * Modules for Interfacing with the Operating System:: @end menu -@node A Summary of the Various XEmacs Modules, Low-Level Modules, The Modules of XEmacs, The Modules of XEmacs +@node A Summary of the Various XEmacs Modules, Modules for Building XEmacs, The Modules of XEmacs, The Modules of XEmacs @section A Summary of the Various XEmacs Modules @cindex summary of the various XEmacs modules @cindex modules, summary of the various XEmacs @@ -2546,6 +2550,12 @@ @itemize @bullet @item +@ref{Modules for Build Configuration}. +@item +@ref{Modules for Compiling XEmacs}. +@item +@ref{Modules for Preloading Lisp}. +@item @ref{Low-Level Modules}. @item @ref{Basic Lisp Modules}. @@ -3022,7 +3032,65 @@ -@node Low-Level Modules, Basic Lisp Modules, A Summary of the Various XEmacs Modules, The Modules of XEmacs +@node Modules for Building XEmacs, Low-Level Modules, A Summary of the Various XEmacs Modules, The Modules of XEmacs +@section Modules for Building XEmacs +@cindex modules for building XEmacs +@cindex building XEmacs, modules for + +@menu +* Modules for Build Configuration:: +* Modules for Compiling XEmacs:: +* Modules for Preloading Lisp:: +@end menu + + + +@node Modules for Build Configuration, Modules for Compiling XEmacs, Modules for Building XEmacs, Modules for Building XEmacs +@subsection Modules for Build Configuration +@cindex modules for build configuration +@cindex build configuration, modules for + +@example +@file{configure} +@file{config.h.in} +@file{Makefile.in.in} +@end example + +@example +@file{configure.ac} +@file{configure.in} +@end example + +@xref{The configure Script}. + + + +@node Modules for Compiling XEmacs, Modules for Preloading Lisp, Modules for Build Configuration, Modules for Building XEmacs +@subsection Modules for Compiling XEmacs +@cindex modules for compiling xemacs +@cindex compiling xemacs, modules for + +@strong{Please write this node!} @c #### + +This node should contain descriptions of files like the various +Makefiles, and I guess cross-references to ellcc etc. + + + +@node Modules for Preloading Lisp, , Modules for Compiling XEmacs, Modules for Building XEmacs +@subsection Modules for Preloading Lisp +@cindex modules for preloading lisp +@cindex preloading lisp, modules for + +@strong{Please write this node!} @c #### + +This node should contain descriptions of files like dumped-lisp.el +(maybe that goes in Modules for Build Configuration supra?), +update-elcs.el, and so on. + + + +@node Low-Level Modules, Basic Lisp Modules, Modules for Building XEmacs, The Modules of XEmacs @section Low-Level Modules @cindex low-level modules @cindex modules, low-level @@ -4056,7 +4124,327 @@ This module provides some terminal-control code necessary on versions of AIX prior to 4.1. -@node Rules When Writing New C Code, Regression Testing XEmacs, The Modules of XEmacs, Top + + +@node The Build Configuration System, Rules When Writing New C Code, The Modules of XEmacs, Top +@chapter The Build Configuration System +@cindex build configuration +@cindex configuration, build + +@strong{Please write this node!} @c #### + +This node should describe XEmacs-specific techniques and idioms in the +configuration system. A particular example is the set of @samp{XE_} +macros in @file{configure.in} and @file{configure.ac}. + +@menu +* Adding Configurable Features:: +* The configure Script:: +* The Makefile Precursors:: +@end menu + + + +@node Adding Configurable Features, The configure Script, The Build Configuration System, The Build Configuration System +@section Adding Configurable Features +@cindex adding configurable features +@cindex configurable features, adding +@cindex features, adding configurable + +Adding a configurable feature requires at least adding an option to the +@file{configure} script and a macro definition to @file{src/config.h.in} +(@pxref{The configure Script}), and often changes to Makefile precursors +(@pxref{The Makefile Precursors}). + + + +@node The configure Script, The Makefile Precursors, Adding Configurable Features, The Build Configuration System +@section The configure Script +@cindex configure script +@cindex script, configure + +At the heart of the XEmacs build configuration system is the +@file{configure} script. This beast is maintained using the Autoconf +system, which is a truly terrifying monstrosity based on a fundamentally +flawed programming model (extensive use of macros), with an +implementation about which I've never heard a nice word (GNU @file{m4}), +used to string together a large set of @emph{ad hoc} tests, to implement +a configuration language with conventions that are unimportant in simple +cases and counterintuitive when things get complicated. If that doesn't +scare you off, Welcome! I think you're ready to become a configure +hacker! (But be prepared for things to go downhill from here.) + +@file{configure} is, of course, is written in POSIX shell language, and +autogenerated from a precursor (see? the first step was a doozy!) +Currently that precursor is called @file{configure.ac}, but in the +previous generation it was called @file{configure.in}. As of February +2005, @file{configure.ac} is used in the development mainline, but +because the semantics of many predefined macros changed drastically +between @file{autoconf} 2.13 and @file{autoconf} 2.50 (why not ``3.0''? +you got me), the XEmacs Project chose to stick with the devil it knew +for the stable line of XEmacs 21.4 releases. + +One reason for worrying about the semantic changes is the fact that +XEmacs uses a lot of homebrew code, including @file{m4} macros, to +implement special features in its @file{configure} script. Here are +some of the important features: + +@itemize +@item +Selectively enabling debugging, error checking, and tracing. +@item +Complex options, which are set-valued (@i{i.e.}, unordered; ordered +lists of options, for example ``take the first available from the +list,'' are neither used currently nor given special support). +@end itemize + +Where these are implemented as @file{m4} macros, the prefix @samp{XE_} +is used to identify them as XEmacs features in the @file{configure} +precursor code. Here is a list of prototypes of the convenience macros +provided for performing common operations: + +@c #### @var{}-ize the formal parameters of these functions? +@table @code +@item USAGE_ERROR(string) +prints a usage error and dies + +@item PRINT_VAR(var var ...) +prints values of shell variables + +@item XE_ADD_OBJS(foo.o ...) +@strong{#### Please document me!} + +@item XE_APPEND(value, varname) +@strong{#### Please document me!} + +@item XE_PREPEND(value, varname) +@strong{#### Please document me!} + +@item XE_DIE(message) +used for situations that can't lead to a successful build, such as +missing include files or conflicts between requested features. + +@item XE_CHECK_FEATURE_DEPENDENCY(feature1, feature2) +@strong{#### Please document me!} + +@item XE_STRIP_4TH_COMPONENT(var) +@strong{#### Please document me!} + +@item CANONICALIZE_PATH(varname) +@strong{#### Please document me!} + +@item XE_PROTECT_LINKER_FLAGS(shell_var) +@strong{#### Please document me!} + +@item COLON_TO_SPACE(path) +Allow use of either @samp{:} or spaces for lists of directories. + +@item XE_ADD_RUNPATH_DIR(directory) +@strong{#### Please document me!} + +@item XE_COMPUTE_RUNPATH() +@strong{#### Please document me!} + +@item XE_SPACE(var, words) +@strong{#### Please document me!} + +@item XE_SHLIB_STUFF +See @file{aclocal.m4}. +@end table + +@heading XEmacs keyword option support + +A @dfn{keyword} option is one that accepts one of a number of +pre-defined values (if support for sets of values is needed, see +``complex options'' below). For example, +@samp{--with-mail-locking=flock}. + +Keyword options use expanded forms of @samp{AC_ARG_[WITH|ENABLE]} called +@samp{XE_KEYWORD_ARG_[WITH|ENABLE]}, both taking 5 parameters. The +first 4 parameters of these macros are the same as original macros with +the exception that all four parameters are @strong{required}. The +@var{action-if-true} code is run after the argument list has been +parsed. + +The 5th parameter is a list of supported keywords. The whole list must +be quoted but the individual keywords should not. + +If the option value is a not a valid keyword then an error message is +generated, otherwise the value is left untouched. + +This support is implemented via the following @file{GNU m4} macros. +Macros labelled @dfn{internal} are not expected to be used by +@file{configure.ac} programmers; they are part of the implementation of +higher-level features. + +@table @code +@item XE_KEYWORD_ARG_WITH(package, help-string, action-if-true, action-if-false, [keyword1, keyword2, ....]) +Expanded version of @samp{AC_ARG_WITH} for keyword options. All the +parameters are required. The last argument is a comma-separated list of +supported keywords, @file{m4}-quoted with @samp{[]}. + +@item XE_KEYWORD_ARG_ENABLE(feature, help-string, action-if-true, action-if-false, [keyword1, keyword2, ....]) +Expanded version of @samp{AC_ARG_ENABLE} for keyword options. All the +parameters are required. The last argument is a comma-separated list of +supported keywords, @file{m4}-quoted with @samp{[]}. + +@item XE_PARSE_KEYWORD_OPTION(prefix, cmdline-flag) +Internal macro to parse the option values. If an undeclared option is +found then an error is generated. + +@item XE_KEYWORD(keyword) +Internal macro to declare an option value. + +@end table + +@heading XEmacs complex option support + +A @dfn{complex option} is one that takes a number of related values, as +a set. For example, we might use "--with-xft=all,nomenubars" for +compatibility with XFontSet i18n of menubars. (The example is +contrived, Xft looks much better than XFS.) Processing such an option +requires a number of auxiliary variables. + +Complex options use expanded forms of @samp{AC_ARG_[WITH|ENABLE]} called +@samp{XE_COMPLEX_ARG_[WITH|ENABLE]}, both taking 5 parameters. The +first 4 parameters of these macros are the same as original macros with +the exception that all four parameters are @strong{required}. The +@var{action-if-true} code is run after the argument list has been +parsed. + +The 5th parameter is a list of @samp{XE_COMPLEX_OPTION} macro calls that +define the valid components and their default values. The list must be +quoted but the individual macro calls should not. Here is how the +@samp{sound} flag is defined: + +@example +XE_COMPLEX_ARG_ENABLE([sound], + AC_HELP_STRING([--enable-sound],[Compile with sound support. + Valid types are `native', `nas' and `esd'. + Prefix a type with 'no' to disable. + The first type can be `none' or `all'. `none' means + `nonative,nonas,noesd'. `all' means `native,nas,esd'. + Later options override earlier ones for the same TYPE. + The default is to autodetect all sound support except + for ESD which defaults to off.]), + [], + [enable_sound_nas=""], + [XE_COMPLEX_OPTION([native],[""]), + XE_COMPLEX_OPTION([nas],[""]), + XE_COMPLEX_OPTION([esd],[no])]) +@end example + +(Note that the help string will be reformatted by @file{autoconf} so +that all whitespace is first compressed to a single space, then folded +to appear in the right-hand column as above. Thus the help string may +appear differently when @code{./configure --help} is invoked.) + +@c #### verify for INSTALL and xemacs Texinfo. +Each component is interpreted as a separate feature to be enabled or +disabled. As usual, the distinction between ``with'' and ``enable'' is +that ``with'' features require specific support from the system, usually +one or more optional libraries, and ``enable'' features are supported +entirely by code in XEmacs, but the user might want to switch it off for +some reason. Option values are stored in the variables +@samp{with_@var{package}_@var{component}} or +@samp{enable_@var{feature}_@var{component}} (@i{e.g.} +@samp{with_xft_menubars}). + +The user of @file{configure} specifies the configuration by providing a +list of components. The special components @samp{all} and @samp{none} +may occur first in the list, setting the defaults for all components to +@samp{yes} or @samp{no} respectively. + +In @file{configure.ac}, default values of option values may be +@samp{yes} which means that the option must be used and an error must +occur if there is a configuration problems (such as a missing library) +or @samp{no} which means that the option must not be used. The default +value can also be the null string @samp{""}, usually meaning that +@file{configure} will attempt to find support for the feature on the +system, and will enable the configuration if it is available. Sometimes +the null string means that @file{configure}'s default is +system-dependent. (This usage is not consistent, and depends on the +implementation of the feature detector rather than the argument parser.) +Users cannot specify the null string for an individual component from +the command line. + +There are two possible uses in XEmacs for this kind of facility. One is +exemplified by sound: there are alternative protocols (native, ESD, NAS) +and each is supported by a corresponding library. The other is a single +library which may or may not be supported by multiple components of +XEmacs, as exemplified by Xft. This latter usage may be more common +during development of a feature. Perhaps specialized APIs should be +provided, see comment on @samp{XE_COMPLEX_OPTION_HELP_STRING} below. + +@table @code +@item XE_COMPLEX_OPTION(option, yesno) +Declare a complex option and its default value. The value @strong{must} +be either @samp{yes} or @samp{no} or the null string @samp{""}. The +null string means ``maybe'', whose semantics are determined by the +implementation of the option, not by the parser. Typical semantics are +``use the library if found in the usual places'' or ``default is +platform-dependent''. + +@item XE_COMPLEX_OPTION_HELP_STRING(flag, long, short, components, libraries) +Format a boilerplate help string for complex options. + +This was originally written for the Xft option, and doesn't read so well +for options based on alternative libraries like sound. Hackers beware: +the API may be enhanced to deal with this in the future. + +@item XE_COMPLEX_ARG_WITH(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE, [XE_COMPLEX_OPTION(a,yes), ....]) +Extended version of @samp{AC_ARG_WITH} for complex options. All the +parameters are required. + +@item XE_COMPLEX_ARG_ENABLE(FEATURE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE, [XE_COMPLEX_OPTION(a,yes), ....]) +Expanded version of @samp{AC_ARG_ENABLE} for complex options. All the +parameters are required. + +@item XE_EXPAND_COMPLEX_OPTION(prefix, component, yesno) +Internal macro create the option's shell variable containing the default +value and to note the values in an option list. + +@item XE_EXPAND_COMPLEX_OPTIONS(prefix, option_list) +Internal macro which recursively expands an option list. + +@item XE_INIT_COMPLEX_OPTION(prefix, option_list) +Internal macro to initialise the complex option shell variables. + +Variables of the form @samp{@var{prefix}_@var{option}} contain the +default value for that option. @samp{@var{prefix}_types} contains a +space-separated list of all the options and @samp{@var{prefix}_default} +contains a comma-separated list of all the default values. + +@item XE_PARSE_COMPLEX_OPTION(prefix, cmdline-flag) +Internal macro to parse the option values. If an undeclared option is +found then an error is generated. + +@end table + + + +@node The Makefile Precursors, , The configure Script, The Build Configuration System +@section The Makefile Precursors +@cindex Makefile precursors +@cindex precursors, Makefile + +@strong{Please write this node!} @c #### + +As in other programs using a @file{configure} program, XEmacs's +Makefiles are not written, they are generated. The @file{configure} +program uses Makefile precursors, or templates, to generate the actual +Makefiles. In fact, it is a multistage process. The developer changes +the file @file{Makefile.in.in}, then @file{configure} first generates an +intermediate file @file{Makefile.in}, and finally produces a portable +Makefile called @file{Makefile}, and a Makefile optimized for @file{GNU +make} called @file{GNUmakefile}. + +This node describes XEmacs-specific techniques and idioms used in the +@file{Makefile.in.in} files. + + + +@node Rules When Writing New C Code, Regression Testing XEmacs, The Build Configuration System, Top @chapter Rules When Writing New C Code @cindex writing new C code, rules when @cindex C code, rules when writing new @@ -4090,8 +4478,8 @@ @cindex coding conventions The C code is actually written in a dialect of C called @dfn{Clean C}, -meaning that it can be compiled, mostly warning-free, with either a C -or C++ compiler. Coding in Clean C has several advantages over plain +meaning that it can be compiled, warning-free, with either a C or C++ +compiler. Coding in Clean C has several advantages over plain C. C++ compilers are more nit-picking, and a number of coding errors have been found by compiling with C++. The ability to use both C and C++ tools means that a greater variety of development tools are @@ -4102,6 +4490,7 @@ classes, strictly limiting the permissible operations and catching illegal implicit casts and such. +@c #### did Ben delete this, or just the CODING-STANDARDS file in ./etc? XEmacs follows the GNU coding standards, which are documented separately in @xref{top,,, standards, GNU Coding Standards}. This section mainly documents standards that are not included in that @@ -23222,6 +23611,7 @@ could "just work". + @node Future Work -- Better Rendering Support, , Future Work -- Lisp Engine Replacement, Future Work @section Future Work -- Better Rendering Support @cindex future work, better rendering support @@ -23231,7 +23621,7 @@ don't blame Ben (or Eric and Matthias, for that matter). Feel free to add, edit, and share the blame, guys! -@c #### make these @urlref's!! +@c #### Make these @urlref's!! As of late November 2004, this principally means adding support for the @file{Xft} library, which provides a more robust @emph{font configuration} mechanism via Keith Packard's @file{fontconfig} library @@ -23244,7 +23634,7 @@ @emph{face} support; @emph{widget} support (including the toolbar and menubar); and @emph{redisplay refactoring}. -@c Describe Alexey Gladkov and Yury Konovalov's work. +@c #### Describe Alexey Gladkov and Yury Konovalov's work. However, in late 2003 Eric Knauel <knauel@@informatik.uni-tuebingen.de> and Matthias Neubauer <neubauer@@informatik.uni-freiburg.de> put forward @@ -23255,15 +23645,15 @@ one may be made available for the Knauel-Matthias patch soon. @menu -* Better Rendering Support -- Issues:: +* Better Rendering Support -- Review Criteria:: * Better Rendering Support -- Implementation:: * Better Rendering Support -- Current Status:: * Better Rendering Support -- Configuration with the Interim Patches:: @end menu -@node Better Rendering Support -- Issues, Better Rendering Support -- Implementation, , Future Work -- Better Rendering Support -@subsection Better Rendering Support -- Issues +@node Better Rendering Support -- Review Criteria, Better Rendering Support -- Implementation, , Future Work -- Better Rendering Support +@subsection Better Rendering Support -- Review Criteria @cindex better rendering support, issues @cindex issues, better rendering support @@ -23300,7 +23690,7 @@ to properly support display of different faces in non-buffer, non-window contexts. -@node Better Rendering Support -- Implementation, Better Rendering Support -- Current Status, Better Rendering Support -- Issues, Future Work -- Better Rendering Support +@node Better Rendering Support -- Implementation, Better Rendering Support -- Current Status, Better Rendering Support -- Review Criteria, Future Work -- Better Rendering Support @subsection Better Rendering Support -- Implementation @cindex better rendering support, implementation @cindex implementation, better rendering support @@ -23324,6 +23714,15 @@ of @file{Xft}'s rendering functionality should be separated from use of @file{fontconfig}. +@item fontconfig +Fontconfig is dramatically different from the X model in several ways. +In particular, @emph{fontconfig always returns a font}. However, the +font returned need not be anything like the desired font. This means +that XEmacs must adopt a strategy of delegating the search to +fontconfig, then sanity-checking the return, rather than trying to use +the fontconfig API to search using techniques appropriate for the X11 +core font API. + @item Font menus The @samp{Options->Font} and @samp{Options->Font Sizes} menus are broken, by design, not just by @file{Xft}. Although they work better @@ -23492,6 +23891,26 @@ These menus don't work. All fonts are greyed out. All sizes are available, but many (most?) faces don't change size, in particular, @samp{default} does not. + +@item Antialiased text bleeding outside of reported extent +On my PowerBook G4 Titanium 15" screen, X.org server v6.8.1, + dimensions: 1280x833 pixels (433x282 millimeters), + resolution: 75x75 dots per inch, + depth of root window: 24 planes +(yes, those dimensions are broken), +with font "Bitstream Vera Sans Mono-16:dpi=75" antialiased text may +bleed out of the extent reported by XftTextExtents and other such +facilities. This is most obvious with the underscore character in that +font. The bottom of the underscore is antialiased, and insertions or +deletions in the same line before the underscore leave a series of +"phantom" underlines. Except that it doesn't happen on the very first +such insertion or deletion after a window refresh. A similar effect +sometimes occurs with deletions at the end of the line (no, I can't +define "sometimes"). See also comments in @file{redisplay-x.c}, +functions @code{x_output_string} and @code{x_output_display_block}. +(Mostly duplicated here.) + +I think this is probably an Xft bug, but I'm not sure. @end table @@ -23505,43 +23924,24 @@ @itemize @item -The only way to configure widget fonts at the present time is to use X -resources (or hack the source and rebuild). Currently supported widgets -are -@itemize -@item -menubars -@item -tab controls -@end itemize - -Here are the resources I use. @strong{Warning:} @emph{This interface -will change.} The tab control has separate Font and XftFont resources, -and uses the X resource manager to instantiate a FontStruct from the -Font resource. The menubar on the other hand uses Font for both, but -converts to FontStruct if Xft is not compiled in, and leaves it as a -string if Xft is compiled in. There is no equivalent facility for -XftFont yet, and creating one that handles both FontStruct and XftFont -depending on XEmacs's configuration and the font name seems error-prone -at best. Probably we will revert to a simple string representation for -this resource, and convert to a face in XEmacs rather than a font in -Xt/Xft. -@example -XEmacs*Tabs.xftFont: Bitstream Vera Sans-18 -XEmacs*menubar.font: Bitstream Vera Sans-18 -XEmacs.modeline.attributeFont: Bitstream Charter-26 -XEmacs.default.attributeFont: Bitstream Vera Sans Mono-24 -@end example -No, I don't understand why I need to use different point sizes to get -what looks like good balance to my eyes. I do highly recommend use of a -proportional font in the modeline because it allows a lot more text to -fit there. - -@item +Although the menus don't work, it is possible to specify fonts for +@emph{faces} using @code{set-face-font} (and other specifier-changing +functions). + +There currently is no explicit way to specify that a particular font be +used only for a given language. However, since many fonts support only +a limited repertoire such as ISO 8859/1, you can use the precedence of +specifications for a given specifier locale to get something of this +effect for non-Latin character sets. This will normally work rather +poorly for multiple Latin character sets, however, because the +repertoires tend to have large amounts of overlap. Support for +specifying font by @emph{language} as well as by character set is +planned. + Because fonts supporting other languages tend to support English as well, if you want to use one font for English and another for the other language, you must use the @code{append} method when adding font -specifications for the other language. +specifications for the @emph{other} language. However, this leaves you with a problem if you want to change the other language's font: you have to remove the existing specification so it @@ -23559,7 +23959,40 @@ (set-face-font 'default "Mikachan-14" nil '(lang-ja) 'remove-tag-set-append) @end example -@end itemize + +@item +The only way to configure widget fonts at the present time is to use X +resources (or hack the source and rebuild). Currently supported widgets +are +@itemize +@item +menubars +@item +tab controls +@end itemize + +Here are the resources I use. @strong{Warning:} @emph{This interface +will change.} The tab control and menubar have separate Font and +XftFont resources, and use the X resource manager to instantiate a +FontStruct from the Font resource. There is no converter facility for +XftFont yet, and creating one that handles both FontStruct and XftFont +depending on XEmacs's configuration and the font name seems error-prone +at best. Probably we will should to a simple string representation for +this resource, and convert to a face in XEmacs rather than a font in +Xt/Xft. +@example +XEmacs*Tabs.xftFont: Bitstream Vera Sans-16 +XEmacs*menubar*xftFont: Bitstream Vera Sans-16 +XEmacs.modeline.attributeFont: Bitstream Charter-16 +XEmacs.default.attributeFont: Bitstream Vera Sans Mono-16 +@end example +I highly recommend use of a proportional font in the modeline because it +allows a lot more text to fit there. (Previously the font sizes were +quite varied, and there was a comment that this weirdness gave good +balance. This isn't true on my main platform, Mac OS X, and needs to be +rechecked on Linux, where it was observed.) +@end itemize + @node Future Work Discussion, Old Future Work, Future Work, Top