字体名与字体加载(Font names and font loading)
字体用于窗口标题、图标标题、菜单、窗口文本,可以通过Style中Font和IconFont样式设置,或者MenuStyle中的Font,以及DefaultFont命令来指定。另外,所有使用文本的模块都有配置字体的命令。所有这些样式和命令都以字体名称作为参数。本节介绍fvwm中的字体名称和fvwm加载的字体。
首先,可以使用我们可以称之为通常字体名(usual font name),例如:
-adobe-courier-bold-r-normal–10-*
-*-fixed-medium-o-normal–14-*-ISO8859-15
也就是说,可以使用X逻辑字体描述(简称XLFD,X Logical Font Description)。然后加载并使用匹配描述的“第一个”字体,这里的“第一个”字体取决于你的字体路径和你的语言环境。匹配语言环境字符集的字体按优先级顺序加载。例如,使用
。如果本地的字符集是ISO8859-1,fvwm会优先加载匹配
的字体。如果本地的字符集是ISO8859-15,fvwm会优先加载匹配
的字体。字体名称可以作为扩展的XLFD给出。下面是简单的XLFD字体名称列表,使用逗号分隔:
每个简单的字体名称都会进行尝试查找,直到找到与语言环境设置的字符集匹配的字体。如果失败,则尝试每个简单的字体名称,而不再受不受字符集限制。
有关XLFD的更多详细信息,请参见X手册页,XLFD约定文档、XLoadFont、XCreateFontSet手册页。常用的一些有用的XLFD字体工具有:xlsfonts,xfontsel,xfd,xset。
如果支持Xft,可以使用前缀为“xft:”的TrueType字体的Xft字体名,例如:
“xft:Luxi Mono:Medium:Roman:size=14:encoding=iso8859-1”
加载与描述匹配的“第一个”字体。”第一个”字体取决于Xft1的XftConfig配置文件和Xft2的/etc/fonts/fonts.conf文件,详细使用可以阅读Xft2的fontconfig的手册页及Xft手册页面。“xft:”后第一个字符串为Family,如第二个例子中Luxi Mono是Family(其他XFree TTF Family:“Luxi Serif”,“Luxi Sans”),Medium是权重(其他可能的权重:Light,DemiBold,Bold,Black),Roman是倾斜样式大小(其他可能性值为:Regular,Oblique,Italic),指定点的大小(像素大小使用pixelsize=),encoding允许强制执行字符集(仅适用于iso8859-1或iso10646-1;如果未给定编码,则假设使用本地字符集)。一个重要的参数是“minspace=bool”,其中bool是True或False。如果bool是False(默认值?),Xft给予fvwm更大的字体高度,bool为True则小一些。这可能会修改文本位置、图标和窗口标题高度、菜单和FvwmIdent中的行距,某些fvwm的模块中的按钮高度…等。使用液晶显示器,可以尝试添加“rgba=mode”,其中mode可以为rgb、bgr、vrgb、vbgr,用于启用子像素渲染。最好的mode值取决于你的LCD单元的排列方式。可以在“:”之间传递其他规范值,例如“foundry=foundry_name”;“spacing = type”,其中type可以是monospace、proportional、charcell;“charwidth=integer”;“charheight=integer”;“antialias=bool”,bool是True还是False。看来这些参数并不总是被考虑在内。
要确定哪些Xft字体真的被加载,可以在启动fvwm之前export XFT_DEBUG=1,并查看错误日志。如果使用Xft2,可以使用fc-list来列出可用的字体。无论如何,对于Xft的支持是实验性的(从X和fvwm的角度来看),渲染的质量取决于参数的数量(XFree和freetype版本以及你的显卡)。
在Xft字体名称后面可以添加“;”,XLFD字体名称(简单或扩展)为:
然后,如果加载Xft字体失败或者fvwm没有支持Xft,fvwm会加载“-adobe-courier-bold-r-normal-14-*”字体。这用于便携式配置文件。
字体与字符串编码(Font and string encoding)
一旦加载了一个字体,fvwm就使用它的名字(名字的最后两个字段)找到它的编码(或者字符集)。 fvwm假定用这种字体显示的字符串使用这种编码(一个例外是,如果加载了iso10646-1字体,则假定UTF-8为字符串编码)。 在正常情况下,(i)通过给出字体名称而不指定编码来加载字体,(ii)已加载字体的编码是本地语言编码,然后(iii)fvwm配置文件中的字符串以及窗口和图标名称应该使用本地语言设置编码。 使用Xft的情况有点不同,因为Xft只支持iso10646-1和iso8859-1。 如果您没有在Xft字体名称中指定这些编码之一,则fvwm将使用(iii)进行字符串转换。 请注意,使用多字节字体(特别是使用“CJK”字体)进行良好的文本渲染时,本地语言编码应该是字体的字符集。
要覆盖以前的规则,可以在字体描述的开始处指定字符串编码,如下所示:
其中enc是由fvwm支持的编码(通常是字体名称charset加上一些Unicode编码:UTF-8,USC-2,USC-4,UTF-16)。
例如,您可以使用iso8859-1语言环境字符集,并在koi8-r编码的俄语中使用FvwmForm。 在这种情况下,只需要通过在字体名中指定编码,来要求FvwmForm加载koi8-r字体。使用多字节语言(只有当语言环境编码是字体的字符集时,多字节字体才能正常工作),则应使用iso10646-1字体:
或者
,如果你的FvwmForm配置使用jisx0208.1983-0编码。另一种可能是为你的FvwmForm配置使用UTF-8编码,并使用iso10646-1字体:
或者
或者等价于
一般来说,iso10646-1字体与UTF-8字符串编码一起,允许显示给定菜单中的任何字符,FvwmForm等
越来越多,使用unicode,文本文件使用UTF-8编码。但是,在实际中,使用的字符会覆盖您的语言环境字符集(当您使用最新版本的KDE和GNOME生成带有fvwm-menu-desktop的菜单时,就是这种情况)。 为了节省内存(一个iso10646-1字体可能有很多字符),或者因为你有一个没有iso10646-1字符集的漂亮的字体,你可以指定字符串编码为UTF-8,并在区域中使用字体字符集:
在大多数情况下,fvwm可以正确地确定字体的编码。 但是,某些字体不会以有效的编码名称结尾。 当字体名称不正常时,例如:
你需要使用斜线作为分隔符,并在字体名称后添加编码。 例如:
如果fvwm找到一个编码,fvwm使用iconv系统函数在编码之间进行转换。 不幸的是,没有一个标准。对于iso8859-1和UTF-8之间的转换:GNU系统使用“ISO-8859-1”,其他系统使用“iso881”来定义转换器(这两个名称由fvwm支持)。 而且,在某些情况下,可能需要使用机器专用转换器。 所以,如果你遇到问题,你可以尝试获取有关iconv实现的信息(“man iconv”获取帮助),并在编码后的字体名末尾放置字体编码和UTF-8之间的转换器名称提示和一个”/“(另一个可能的解决方案是使用GNU libiconv)。 例如使用:
使用latin1来定义iso8859-1编码的转换器。 “/”之间的“*”表示fvwm从字体名末尾确定编码。 使用:
强制fvwm使用编码为iso8859-6的字体(这对双向性很有用),使用local_iso8859_6_iconv来定义转换器。
字体阴影效果(Font Shadow Effects)
specification) add
integer which defines the number of pixels to offset the shadow from the edge of the character. The default
offset is zero. directions is an optional set of directions the shadow emanates from the character. The
directions are a space separated list of fvwm directions:
direction is BottomRight. With the Center direction, the shadow surrounds the whole string. Since this is a
super set of all other directions, it is a waste of time to specify this along with any other directions.
the Colorset command. Please refer to the Colorsets section for details about colorsets.
look quite good.