当前位置: 首页 > 文档资料 > Fluxbox 中文文档 >

章 10. 主题

优质
小牛编辑
137浏览
2023-12-01

主题的入门

本节由 Justin Rebelo aka "demerol" 贡献。

style 是什么以及它的工作原理?

style 主要就是指 Fluxbox 的主题。它其实就是一个简单的 ASCII 文本文件,用来指示 Fluxbox 来如何生成窗口管理器各个组件的外观的。 它们通常位于 ~/.fluxbox/styles 和 Fluxbox 的全局共享目录下, 至于具体位置,要依据您是如何安装 Fluxbox 而定了。

我自己该怎么制作主题?

用您最拿手的文本编辑器打开一个 style (我推荐 vim),从这里起步。看看这个 style,它的结构是什么样子, 它是如何组织的。稍加观察,您所有的疑问差不多就都能得到解答了。

style 的构成

style 由几个主要组件构成,每个组件又有自己独立的指令。其中, toolbar menu window 是 三个最主要的组件。 window.* 指令用于控制窗口框架 的外观, window.tab.* 控制窗口标签的外观。 menu.* 则控制您右击 桌面后弹出的菜单的外观。 toolbar.* 是位于屏幕顶部或底部的那一栏。 如果您没有明确设置 Slit (在其他窗口管理器中也称为 dock,wharf 等等) 的 style,它也同样由 toolbar 来控制。

我该如何改变 slit 的外观呢?

slit 通常和工具栏的 style 设置选项相同。大多数情况下这种方式运转的相当良好。 如果您要明确的设置 slit 的style,由三种 style 指令可供使用:

    slit: [texture option]
    slit.color: [color value]
    slit.colorTo: [color value]

这些命令的工作方式就像在菜单、窗口中那样,比如在给 Slit 配上纹理图案的时候。

我可以设置背景图案或颜色吗?

在 style 文件的某处,您或许会发现有一行以 rootCommand 打头,然后紧接着是一个设置 style 背景颜色或图案的命令。 Fluxbox 中的 bsetroot 程序是专门用来设置颜色和渐变式背景,而 fbsetbg 则是专门 用于设置图像背景的。

我可以在我的 style 文件中添加注解/注释吗?

当然可以啦,要注释的那一行用哈希( # )符号和一个感叹号( ! )开头, 或者用 C++风格的注释方法( // )就可以了。

我还有更多的问题...

瞧一下 Fluxbox 提供的 styles,您应该就能找到答案了,要么试试其他的设置。如果 还是还是摸不着北,到 OPN 上的#fluxbox 频道上来。我的昵称是 demerol。

主题的高阶编辑

本节的大部分内容取自 Fluxbox 0.1.13版 manpage 内容,或深受其影响。 通常,manpage 就是这方面的绝对权威,但这一节或许对刚起步的 style 设计人员来说 更有启蒙价值吧。

要理解 style 的工作机制,有一点对 X11 中的“资源”概念的了解是很有裨益的。

X11 的资源由键和键值组成。键由更小的键组成 (有时称为子键),每个子键用点 ( . ) 隔开。键也可以 包含星号( * ) 以作为通配符,意思是说已输入的某行文字将和多个键匹配。 在某些 styles 仅仅基于一或两种颜色的时候,这种方用法很有用。

Fluxbox 允许您对其三个主要组件进行配置: 工具栏,菜单,窗口修饰。slit 自动从工具栏继承了 style,但如果需要的话也可以另外设置。 拖拉窗口时用于显示坐标位置的小窗口,它的 style 则是从被拖拉窗口的标题栏那儿借来的。

这里有些容易上手的例子,说明了一些基本语法:

例子 10.1. Toolbar Clock style

    toolbar.clock.color:  green

这一项可将工具栏上时钟的“颜色”资源设置成 绿色 。另一个例子:

例子 10.2. Menu style

    menu*color: rgb:3/4/5

这个则是将菜单及所有子菜单的颜色设置成 rgb:3/4/5 。有关颜色命名的描述,请 请参见 X11 manpages。当然对于 menu.title.color menu.frame.color 也是适用的。再看一个:

例子 10.3. Font style

    *font: -b&h-lucida-medium-r-normal-*-*-140-*

所有键的“字体”资源的设置,像这样,一步即可到位。有关系统中所安装的字体的信息,您可以使用像 xfontselgfontselxlsfonts 这样的程序来了解。

其实 Fluxbox 之所以吸引人的一个重要特色在于它的纹理实时渲染功能。纹理描述直接由它们所适用的键来指定,例如:

例子 10.4. Texture style

    toolbar.clock:   Raised Gradient Diagonal Bevel1
    toolbar.clock.color: rgb:8/6/4
    toolbar.clock.colorTo: rgb:4/3/2

别急,我们马上就会解释这些指令的工作原理。一个纹理的描述由五个域组成,分别是:

表格 10.1. Texture directives

DirectiveDescription
Flat / Raised / Sunken / Tiled

让组件的外观分别是 flat, raised 或者 sunken。

Tiled 只对 pixmaps 起作用而且并不产生缩放效应。

Gradient / Solid绘制单色或渐变色的纹理。
Horizontal / Vertical / Diagonal / Crossdiagonal / Pipecross / Elliptic / Rectangle / Pyramid选择其中一个纹理类型。只有同时指定了 Gradient,它们才有效。
Interlacedinterlace the texture (darken every other line). 此选项常和渐变色纹理搭配使用,但自 Blackbox 0.60.3版后,(即所有的 Fluxbox 版本),同单色纹理也可一起使用。
Bevel1 / Bevel2使用 bevel 的种类。Bevel1 是默认值,阴影处于图像边缘处。Bevel2 是替代选项,阴影处于图像边缘内侧 一像素内。

除了纹理描述以外,还可以使用 ParentRelative 选项,可以让某个组件看起来就像 是其上一级的一部分。

所有渐变色纹理都有两个颜色值组成: color colorTo 。 在 Solid 模式 中使用 interlace 时, colorTo r用于查找 interlace 颜色。

提供了哪些键,每个键的取值情况怎样,这些问题的完整答案都可以在 附录 C, Theme Reference 中找到。

乍一看,那么冗长的一张清单,但别忘了,要构造您自己的 style ,有时候用一条指令就可以轻松设置许多键的,例如:

例子 10.5. Typical short style

    *color:             slategrey
    *colorTo:           darkslategrey
    *unfocus.color:     darkslategrey
    *unfocus.colorTo:   black
    *textColor:         white
    *unfocus.textColor: lightgrey
    *font:              lucidasans-10