使用 Xrender 时改造 XClock:一条漫长而曲折的道路

使用 Xrender 时改造 XClock:一条漫长而曲折的道路

基本上,xclock它是一个很棒的工具,每个基本的 X 设置都会“内置”它。然而,配置 xclock(模拟)尽管保持XRender活跃绝对不适合胆小的人。特别是,初学者将没有任何机会配置模拟时钟无需深入研究该.Xresource领域,因为您在命令行中设置的所有内容都将是仅适用于非渲染模式(需要 option -norender)并默认忽略(这意味着XRender正在使用该选项)。另外,有关它的文档非常糟糕,而且示例实际上交易XRender母鸡的牙齿一样罕见。因此,我决定开始自己的方法。
我希望有一种更简单的方法来完成这一切,但显然没有。首先,这个问题可能会帮助新用户指导如何为“他们的”进行设置xclock;另一方面,我也想问一下大家是否有任何方法可以改进我的“配置文件”(注意引号)。奇怪的是,.Xresources它被广泛认为是“过时的”和“上个世纪的”,但是如果您使用的应用程序怎么办?依靠老式的方式,使用xrdb.Xresources以及所有的东西?

我个人比较喜欢一个夜间设计因为它非常适合我的桌面风格。这就是我所做的:

$ touch ~/.Xresources
$ vi ~/.Xresources

XClock*foreground: #fbfbfb
XClock*background: #000018
XClock*update: 1
XClock*geometry:          210x210+1020+12
XClock.Clock.majorColor:  rgba:f0/f0/19/7b
XClock.Clock.minorColor:  rgba:a0/c0/f0/c0
XClock.Clock.hourColor:   rgba:c9/66/11/72
XClock.Clock.minuteColor: rgba:00/82/9f/72
XClock.Clock.secondColor: rgba:50/93/30/6f

rgba代表“红、绿、蓝、阿尔法”——其中第四个参数, α,将以十六进制表示法指示不透明度级别:a00将使时钟指针或刻度线不可见; aff将关闭任何不透明度。
到目前为止,一切都很好。由于我们不想重新启动X服务器以使这些事情生效,因此我们只需将我们的设置合并到可能(或者像往常一样,可能不)已经存在的设置中:

$ xrdb -merge ~/.Xresources && xclock &

虽然我讨厌吹牛,但老实说我觉得它看起来方式比我桌面上默认的无聊设计要好。

但在我努力让它按照我想要的方式工作的过程中,我这边也出现了一个问题:我实际上XClock.Clock.<parameter>从以下资源文件中“窃取”了语法:

/etc/X11/app-defaults/XClock-color

有趣的是,所有以 结尾的参数都...Color需要相同的XClock..<parameter>语法如app-defaults;例如,XClock*hourColor: rgba:ff/ff/ff/80不会使时针变白,也不会将不透明度设置为0x80

为什么会这样?
到目前为止,我认为这*只是一个通配符的含义XClock<whatever><parameter>

答案1

你的假设是正确的。使用*通配符的资源规范。您的问题是因为您可能有两个都当前加载的资源数据库中的一个XClock*和一个规范。XClock.Clock在这种情况下,它会更喜欢显式条目而不是通配符条目。您可以使用以下命令查看当前在资源数据库中为 XClock 设置的内容appres XClock

 appres XClock
 XClock.input:   false

如果我使用通配符资源创建资源文件:

XClock*foreground: #fbfbfb
XClock*background: #000018
XClock*update: 1            
XClock*geometry:          210x210+1020+12
XClock*majorColor:  rgba:f0/f0/19/7b
XClock*minorColor:  rgba:a0/c0/f0/c0
XClock*hourColor:   rgba:c9/66/11/72
XClock*minuteColor: rgba:00/82/9f/72
XClock*secondColor: rgba:50/93/30/6f

然后使用一个加载它们的操作xrdb -merge xclockappres XClock现在显示:

$ appres XClock
XClock*secondColor:     rgba:50/93/30/6f
XClock*foreground:      #fbfbfb
XClock*hourColor:       rgba:c9/66/11/72
XClock*update:  1
XClock*background:      #000018
XClock*geometry:        210x210+1020+12
XClock*majorColor:      rgba:f0/f0/19/7b
XClock*minorColor:      rgba:a0/c0/f0/c0
XClock.input:   false
XClock*minuteColor:     rgba:00/82/9f/72

如果我启动 xclock,我会得到你漂亮闪亮的“夜间”主题。现在,如果我要编辑该资源文件并用显式资源替换通配符资源(注意!是注释行):

XClock*foreground: #fbfbfb
XClock*background: #000018
XClock*update: 1
XClock*geometry:          210x210+1020+12
XClock.Clock.majorColor:  rgba:f0/f0/19/ff
XClock.Clock.minorColor:  rgba:a0/c0/f0/ff
XClock.Clock.hourColor:   rgba:c9/66/11/ff
XClock.Clock.minuteColor: rgba:00/82/9f/ff
XClock.Clock.secondColor: rgba:50/93/30/ff
!XClock*majorColor:  rgba:f0/f0/19/7b
!XClock*minorColor:  rgba:a0/c0/f0/c0
!XClock*hourColor:   rgba:c9/66/11/72
!XClock*minuteColor: rgba:00/82/9f/72
!XClock*secondColor: rgba:50/93/30/6f

并再次将资源文件与 合并xrdb -merge xclockappres XClock现在显示:

XClock.Clock.secondColor:       rgba:50/93/30/ff
XClock.Clock.minorColor:        rgba:a0/c0/f0/ff
XClock.Clock.hourColor: rgba:c9/66/11/ff
XClock.Clock.minuteColor:       rgba:00/82/9f/ff
XClock.Clock.majorColor:        rgba:f0/f0/19/ff
XClock*secondColor:     rgba:50/93/30/6f
XClock*foreground:      #fbfbfb
XClock*hourColor:       rgba:c9/66/11/72
XClock*update:  1
XClock*background:      #000018
XClock*geometry:        210x210+1020+12
XClock*majorColor:      rgba:f0/f0/19/7b
XClock*minorColor:      rgba:a0/c0/f0/c0
XClock*minuteColor:     rgba:00/82/9f/72
XClock.input:   false

注意如何两个都显式资源和通配符资源针对 XClock 类列出。在这种情况下,xclock我会更喜欢显式资源而不是通配符资源,并且我得到带有非 Alpha 颜色的时钟。

要解决此问题,请使用-load操作而不是-merge操作(-load如果不提供任何选项,则xrdb 默认xrdb file为 ie xrdb -load file)。

这会有效地清除您的资源数据库,加载系统默认值,然后在该文件中添加您的 XClock 资源设置。需要知道的一个好技巧是您可以使用 恢复“系统默认值” xrdb /dev/null。您可以通过以下方式获取现有资源数据库(包括系统默认值)的副本:xrdb -query -all可以将其重定向到文件,然后根据您的喜好进行编辑。

在大多数系统上,将它们放入 .Xresources 或 .Xdefaults 中意味着它们将在创建 X 会话时加载,因此您不必在 X 会话之间手动加载它们。

我使用通配符将大多数应用程序设置为黑底白字(我不喜欢白底黑字):

*background: #000000
*foreground: #ffffff

至于可以为 xclock 设置哪些资源,它们在手册页中有所介绍(大多数 X11 命令在手册页中介绍了它们的资源)。

另一件有用的事情是,大多数 X11 命令都可以传递-name参数,这允许您拥有独立于默认应用程序设置的资源,例如,如果我有:

Leary*background: #ff0000

作为资源设置,然后运行 ​​xclockxclock -name Leary我将得到一个带有暴力红色背景的 xclock。加载任何显式/通配符 XClock 资源设置,然后用Leary类设置的设置覆盖它们。然后我可以使用它来应用相同的设置,例如xterm, with xterm -name Leary

大多数 X11 命令使用许多“标准”命令行选项:

-display host:n
     Location of the X server. 
-geometry wxh+x+y
     Window size and location. 
-bg color
     Window background color. 
-fg color
     Text and graphics color. 
-fn font
    Text font. 
-iconic
    Initial window to be started iconized. 
-title strings
    Window header title. 

相关内容