配置文件中的“Xterm”或“xterm”

配置文件中的“Xterm”或“xterm”

开始使用 Arch 后,我切换到 xterm 和 urxvt 终端并享受它们的灵活性(尤其是scaleHeight资源)。但是,我不明白为什么配置有时与或Xterm一起工作(小写与大写和)。xtermXTermxt

例如,我有一个在 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设置属性值;它适用于但不适用于。geometryvt100XTermxterm -name fooxterm -class Foo
    • 在小部件级别,可以有多个具有相同类的小部件,例如同一窗口中的多个按钮。 Xterm 有一个VT100名为的类小部件vt100,它是覆盖整个窗口的终端仿真器部分。其他小部件包括菜单mainMenufontMenuvtMenuSimpleMenu
  • 有通配符:?表示“任何小部件”,*表示“任何小部件序列”。例如,xterm*background为 Xterm 窗口内的所有内容定义背景。

您可以使用以下命令探索支持 editres 协议的应用程序的资源树editres。很少有应用程序支持该协议,但 Xterm 是其中之一。

给定资源可以与多个模式匹配。在这种情况下,优先规则适用。请参阅手动的了解完整规则。

在您的情况下,很可能在某个地方有另一个条目与 not 更接近xterm.vt100.geometryxterm*VT100.geometry并且该匹配会覆盖您的设置。其他人没有其他设置,所以无论你做什么都会获胜。

答案2

一些评论等并不准确。顺便说一句,X资源的描述在X(7) 手册页,在标题为资源。这就是最好的开始阅读的地方,在这里重复它没有什么意义。

这里有一些被忽视的点:

  • 资源名称是区分大小写:XTerm与 不一样 与Xterm不一样 等等xterm
  • 按照惯例X 资源名称使用前导大写字母班级姓名。
  • 当类名的第一个字母是 时X,有一个习俗使第二个字母大写。所以我们得到XTerm.其他示例包括XCalc、、、、。XClockXConsoleXLoadXLogo
  • 另一方面,我们有(Xedit小写eXfd、、、、、、。所以这个公约不是一个XmagXmanXmessageXvidtune规则
  • X Toolkit 应用程序(例如xterm)使用XtOpenApplication或者XtAppInitialize初始化他们的应用程序资源。这些电话需要实例班级姓名。
  • 通常,实例名称是程序的实际名称(其文件名)。如果您碰巧重命名了程序(偶尔会发生,例如xterm.real),则会更改名称。该程序没有这样做,但经常这样做。 xterm可以。
  • 通常是班级名称是一个常量。它不在 中xterm,因为它需要两个类别之一:XTermUXTerm(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覆盖不太具体的设置。*?

相关内容