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

syn*_*ror 6 x-resources

基本上,它xclock是一个很棒的工具,每个基本的 X 设置都会“内置”它。但是,保持活动状态的同时配置 xclock(模拟)绝对不适合胆小的人。特别是,初学者将没有机会在不深入研究领域的情况下配置模拟时钟,因为您在命令行中设置的所有内容都将仅用于非渲染模式(需要 option )并且默认情况下会被忽略(这意味着,即正在使用)。另外,关于它的文档非常糟糕,而这实际上例子处理与比较少见,因为母鸡的牙齿。因此,我决定开始我自己的方法。XRender.Xresource-norenderXRenderXRender
我希望有一种更简单的方法来完成这一切,但显然没有。首先,这个问题可能会帮助新用户指导如何为“他们的”进行设置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
Run Code Online (Sandbox Code Playgroud)

rgba代表“红色、绿色、蓝色、alpha” - 其中第四个参数 alpha将以十六进制表示法表示不透明度级别:a00将使时钟指针或刻度线不可见;aff将关闭任何不透明度。
到现在为止还挺好。由于我们不想重新启动X服务器以使这些事情生效,我们将简单地将我们的设置合并到那些可能(或者像往常一样,可能不存在)已经存在的设置中:

$ xrdb -merge ~/.Xresources && xclock &
Run Code Online (Sandbox Code Playgroud)

虽然我不想吹牛,老实说,我认为它看起来方式比枯燥的设计,为默认我的桌面上更好。

但是在我努力让它按照我想要的方式工作的过程中,我身边也出现了一个问题:我实际上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>

Dra*_*oan 11

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

 appres XClock
 XClock.input:   false
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

然后用一个加载它们的xrdb -merge xclock操作,appres 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
Run Code Online (Sandbox Code Playgroud)

如果我启动 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
Run Code Online (Sandbox Code Playgroud)

并再次使用 合并资源文件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
Run Code Online (Sandbox Code Playgroud)

注意如何明确和通配符资源对XCLOCK类上市。在这种情况下,xclock将更喜欢显式资源而不是通配符资源,并且我得到了带有非 alpha 颜色的时钟。

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

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

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

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

*background: #000000
*foreground: #ffffff
Run Code Online (Sandbox Code Playgroud)

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

另一件需要了解(但不经常记录)的事情是,大多数 X11 命令都可以传递-name参数,这允许您拥有与默认应用程序设置分开的资源,例如,如果我有:

Leary*background: #ff0000
Run Code Online (Sandbox Code Playgroud)

作为资源设置,然后使用 xclock 运行xclock -name Leary我会得到一个带有强烈红色背景的 xclock。加载任何显式/通配符 XClock 资源设置,然后它们会被Leary类设置的内容覆盖。然后我可以使用它来应用相同的设置来说xterm,与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. 
Run Code Online (Sandbox Code Playgroud)