开始使用 Arch 后,我切换到 xterm 和 urxvt 终端并享受它们的灵活性(尤其是scaleHeight
资源)。但是,我不明白为什么配置有时与或Xterm
一起工作(小写与大写和)。xterm
XTerm
x
t
例如,我有一个在 Ubuntu 上运行的奇怪配置:
XTerm*faceName: terminus
XTerm*faceSize: 11
XTerm*saveLines: 16384
XTerm*loginShell: true
XTerm*charClass: 33:48,35:48,37:48,43:48,45-47:48,64:48,95:48,126:48
XTerm*termName: xterm-color
XTerm*eightBitInput: false
xterm*VT100.geometry: 100x80 ! <------ this line would not work with "Xterm" or "XTerm"
XTerm*scaleHeight: 1.3 ! <----- but all others work with "XTerm"
然而,我的 Arch 盒子在“xterm”上运行得很好。 URxvt 终端也是如此:我不能简单地将我的 Arch .Xresources 移植到 Ubuntu14 工作箱,因为它的一部分停止工作,并且运行后我得到不同的设置:
xrdb -merge .Xresources
xterm 上的 X.org 没有任何示例(搜索“xterm*”在该页面上没有返回任何内容)。我在网上看到了Xterm
,xterm
和的例子XTerm
...令我困惑的是上面的配置可以工作,因为它在语法上是关闭的。为什么会这样呢?这可能与 X 中的新资源或旧资源有关吗?谢谢!
ubuntu 上的 xterm 是 Xterm(297)。我目前无法访问我的 Arch 盒子,但它会是最新的。我不知道如何从 Arch 的存储库中区分 Xterm 版本,但也许是这样的:https://www.archlinux.org/packages/extra/i686/xterm/ 所以,如果该链接是正确的,那么是的,我正在运行不同的 Xterm 版本。
我尝试升级xterm,但仍然是297。
apt-get update && apt-get install --only-upgrade xterm
我现在无法执行此操作,但我可能会尝试重新编译最新版本以查看问题是否存在。
按照下面 ILMostro_7 的建议,我尝试了XTerm.vt100.geometry
,但仍然不起作用。这是 Ubuntu14 上的 Xterm (297)。所以基本上,.
或者*
它似乎只适用于很少的xt
.
appres XTerm xterm | grep geometry
感谢吉尔斯的结果。我没想到要查到底xrdb -merge
是什么导致了这个混乱。所以我的猜测是其中之一优先于其他一切?
xterm.VT100.geometry: 100x100
xterm*VT100.geometry: 100x80
xterm*VT100*geometry: 50x50
xterm.vt100.geometry: 160x40
xterm*vt100.geometry: 100x20
xterm.geometry: 5x5
xterm*geometry: 100x20
XTerm.VT100.geometry: 100x100
XTerm*VT100.geometry: 50x50
XTerm*VT100*geometry: 20x10
XTerm.vt100.geometry: 100x5
XTerm*vt100.geometry: 40x40
XTerm*geometry: 50x50
事实上,xterm.vt100.geometry: 160x40
自从我不断收到实例以来,它看起来优先于其他实例。另外,我以某种方式设法完全搞乱了 Xterm 菜单(Ctrl+鼠标单击)——它们显示为一条小黄线。呵呵
答案1
X11资源具有由一系列用点分隔的组件组成的名称,例如xterm.vt100.geometry
。第一个组件是应用程序的名称,第二个组件是该应用程序中的小部件,最后一个组件是小部件的属性。小部件可以嵌套,因此可以有三个以上的组件,或者对于应用程序的属性只有两个。
X 资源的规范可以应用于单个资源或匹配模式的一组资源。有两种方法可以使规范应用于多个资源。
您可以对任何组件使用类名称而不是实例名称。按照惯例,实例名称以小写字母开头,而类名称以大写字母开头。
- 在应用程序级别,给定应用程序的类名通常是固定的,通常为大写的应用程序名称,有时其他字母也为大写,例如
XTerm
,XCalc
,GV
,NetHack
, ... 使用X工具包-class
支持设置类名称以及-name
设置实例名称(默认为可执行文件的基本名称)的选项。例如,为该类的任何实例的小部件XTerm.vt100.geometry
设置属性值;它适用于但不适用于。geometry
vt100
XTerm
xterm -name foo
xterm -class Foo
- 在小部件级别,可以有多个具有相同类的小部件,例如同一窗口中的多个按钮。 Xterm 有一个
VT100
名为的类小部件vt100
,它是覆盖整个窗口的终端仿真器部分。其他小部件包括菜单mainMenu
、fontMenu
和vtMenu
类SimpleMenu
。
- 在应用程序级别,给定应用程序的类名通常是固定的,通常为大写的应用程序名称,有时其他字母也为大写,例如
- 有通配符:
?
表示“任何小部件”,*
表示“任何小部件序列”。例如,xterm*background
为 Xterm 窗口内的所有内容定义背景。
您可以使用以下命令探索支持 editres 协议的应用程序的资源树editres
。很少有应用程序支持该协议,但 Xterm 是其中之一。
给定资源可以与多个模式匹配。在这种情况下,优先规则适用。请参阅手动的了解完整规则。
在您的情况下,很可能在某个地方有另一个条目与 not 更接近xterm.vt100.geometry
,xterm*VT100.geometry
并且该匹配会覆盖您的设置。其他人没有其他设置,所以无论你做什么都会获胜。
答案2
一些评论等并不准确。顺便说一句,X资源的描述在X(7) 手册页,在标题为资源。这就是最好的开始阅读的地方,在这里重复它没有什么意义。
这里有一些被忽视的点:
- 资源名称是区分大小写:
XTerm
与 不一样 与Xterm
不一样 等等xterm
。 - 按照惯例X 资源名称使用前导大写字母班级姓名。
- 当类名的第一个字母是 时
X
,有一个习俗使第二个字母大写。所以我们得到XTerm
.其他示例包括XCalc
、、、、。XClock
XConsole
XLoad
XLogo
- 另一方面,我们有(
Xedit
小写e
)Xfd
、、、、、、。所以这个公约不是一个Xmag
Xman
Xmessage
Xvidtune
规则。 - X Toolkit 应用程序(例如
xterm
)使用XtOpenApplication
或者XtAppInitialize
初始化他们的应用程序资源。这些电话需要实例和班级姓名。 - 通常,实例名称是程序的实际名称(其文件名)。如果您碰巧重命名了程序(偶尔会发生,例如
xterm.real
),则会更改名称。该程序没有有这样做,但经常这样做。xterm
可以。 - 通常是班级名称是一个常量。它不在 中
xterm
,因为它需要两个类别之一:XTerm
或UXTerm
(3 个大写字母)。后者用于uxterm
脚本,简化了指定字体的方式。这日期从 2000 年开始,使其处于 X 历史的中途。快速检查 2000 年初/中期的 X 源代码树中的 30 个程序,XtAppInitialize
没有显示任何其他程序使用类名变量。 - 该
-class
选项是 xterm 特定的。实际上dbedizzy
接受一个-class
选项,对于视觉的班级。那不一样。 X Toolkit 没有这样的选项。 X(7) 手册页中列出了 X Toolkit 的常用选项选项。 xterm 手册更详细地介绍了这些内容,位于X 工具包选项。 editres
正如其手册页所示,适用于任何使用 X Toolkit 的程序。 X 源代码树中有 36 个程序使用上述两个初始化调用中的一个或另一个,因此适用于此的程序并不是“少数程序”。- 另一方面,
xterm
是其中之一很少这editres
不是很有用。它的资源设置太多。
xterm
为其他应用程序安装的应用程序默认文件按照惯例指定以星号 ( ) 开头的资源设置*
。这使他们独立于实例姓名。星号与小部件层次结构的任意数量的级别匹配,这通常是混乱的根源,例如 xterm FAQ为什么菜单很小?,其中用于小部件的几何资源可能VT100
被(错误)应用到菜单。对资源应用过于慷慨的匹配也存在类似的问题font
。解决这两个问题的方法是使用更具体的匹配,引用VT100
小部件(特定),使用点(.
)等。
由于 app-defaults 文件避免了不必要的使用'.'
,因此在您自己的配置中相对容易覆盖它们。如果您在获取资源时遇到困难,例如
xterm*VT100.geometry: 100.80
要申请,只有几个地方可以查看:
- 如果你用过那模式之前,它已经被使用,并且再次设置它(稍后在资源文件中)不会影响使用的值。
- 更具体的设置,例如使用通配符和
xterm.VT100.geometry
覆盖不太具体的设置。*
?