使資源適用於 XTerm 和 UXTerm 類
為了將相同的資源應用於
xterm
anduxterm
,目前我的配置文件必須具有單獨的重複條目:XTerm*scrollBar: true UXTerm*scrollBar: true
例如,通配類名稱不會同時選擇它們:
! This works for xterm but not uxterm *XTerm*scrollBar: true
有沒有辦法讓某些資源適用於兩個程序(無論如何它們實際上是同一個程序),同時保留讓其他資源專門適用於一個或另一個的能力(排除,比如說,總是從
xterm
via開始xterm -class UXTerm
)?感謝您的任何想法。
如果您想擁有多個 XTerm 配置並在呼叫時選擇一個,您可以使用單個類和多個實例名稱:
XTerm.VT100.background: Black XTerm.VT100.scrollBar: true light.VT100.background: White
使用這些定義,
xterm -name light
具有白色背景並具有捲動條。您可以通過這種方式獲得兩層配置,但如果您想要三層,這將無濟於事。在這種特定情況下,您也許可以使用
?.VT100.background: Black Light.VT100.background: White
因為實際上,xterm 是唯一帶有
VT100
小元件的應用程序。通常,您不能僅使用基本的 X 資源語法來做到這一點。萬用字元匹配組件,而不是組件內的單個字元。
*XTerm
表示“XTerm
在層次結構的任何級別”,而不是“以 結尾的任何名稱XTerm
”。解決方案是依賴預處理器。
xrdb
(載入 X 資源的實用程序)預設使用C 預處理器(cpp
)。不幸的是,cpp 對於 X 資源語法不是很方便。特別是cpp宏的擴展不能有換行,所以不能定義宏來擴展多個X資源。但是,您可以使用包含文件解決 cpp 問題。將 和 的通用定義XTerm
放在UXTerm
一個單獨的文件xterm-common.Xresources
中。在您的主.Xresources
文件中,包含xterm-common.Xresources
兩次,每個類名一次。#include ".config/x11/xterm-common-Xresources" #define XTerm UXTerm #include ".config/x11/xterm-common-Xresources" #undef XTerm XTerm.font: my XTerm font UXTerm.font: my UXTerm font
我使用m4來預處理我的 X 資源。這意味著我不能依賴預設載入:我從 my or顯式
~/.Xresources
呼叫。我有程式碼為和應用一些資源:xrdb -cpp m4 ~/path/to/my/Xresources``.xinitrc``.xsession``XTerm``UXTerm
define(`XTERM_class_settings', ` … ') dnl end of `XTERM_class_settings' XTERM_class_settings define(`XTerm', `UXTerm') XTERM_class_settings undefine(`XTerm')
萬用字元在 X 資源中不起作用,因為您可能在 shell 中使用*glob表達式。*它更像是一個省略號“…”,替換零個或多個小元件層次結構。
如果使用 just 消除類名,
*scrollBar:true
這將適用於 xterm 和 uxterm(以及使用該資源名稱的任何其他應用程序)。