xterm
xterm 是 终端模拟器 的标准 X Window System。它高度可配置,并具有许多有用甚至一些不寻常的功能。
安装
配置
资源文件设置
您可以在 X 资源 文件中设置多个选项,以使此终端模拟器使用起来更舒适。有关完整列表,请参阅 xterm(1) § RESOURCES。
TERM 环境变量
允许 xterm 正确报告 TERM 变量。不要在您的 ~/.bashrc 或 ~/.bash_profile 或类似文件中设置 TERM 变量。终端本身应向系统报告正确的 TERM,以便使用合适的 terminfo 文件。两个可用的 terminfo 名称是 xterm 和 xterm-256color。要设置名称,请使用资源
XTerm.termName: xterm-256color
您可以使用以下任一命令在 xterm 中检查结果
$ echo $TERM $ tset -q
UTF-8
确保您的 区域设置 配置为 UTF-8。如果您不使用 UTF-8,则可能需要通过设置强制 xterm 更严格地遵循您的区域设置
XTerm.vt100.locale: true
要强制使用 UTF-8,请设置
XTerm.vt100.locale: false XTerm.vt100.utf8: true
这通常是必要的,因为 XTerm 不支持所有 UTF-8 区域设置,包括 eo.UTF-8。
让 'Alt' 键表现得像其他终端模拟器一样
xterm 中默认的 Alt 键行为是作为修饰键发送八位字符,例如按下 Alt+f 插入 æ。要让 Alt 键发送 ^[ (escape) 键(如 gnome-terminal 和 konsole 中),请设置
XTerm.vt100.metaSendsEscape: true
修复退格键
在 Arch Linux 上,按下退格键时 xterm 发送 ^H。这会破坏 Emacs 中的 Ctrl+H 组合键。解决方法是在按下退格键时发送 ^?,通过设置资源来实现
XTerm.vt100.backarrowKey: false XTerm.ttyModes: erase ^?
快捷键
xterm 为操作终端定义了整套“动作”,例如 copy-selection()、hard-reset()、scroll-back() 等。可以使用 translations 资源将这些动作映射到鼠标/按键组合。例如,您可以将 Ctrl+M 和 Ctrl+R 映射到最大化/恢复窗口
XTerm.vt100.translations: #override \n\
Ctrl <Key>M: maximize() \n\
Ctrl <Key>R: restore()
#override 表示这些绑定应覆盖任何现有绑定(您几乎总是希望如此自定义按键绑定)。每个绑定必须用转义序列 \n 分隔。如果您想插入字面上的换行符,也需要转义(因此是 \n\)。有关动作的完整列表和许多示例,请参阅 xterm(1) § KEY_BINDINGS。
keymap() 动作。滚动
当新行写入 xterm 窗口底部时,旧行会从顶部消失。要上下滚动通过屏幕外行,可以使用鼠标滚轮、Shift+PageUp 和 Shift+PageDown 组合键,或滚动条。
默认情况下,会保存 1024 行。您可以使用 saveLines 资源更改保存的行数
XTerm.vt100.saveLines: 4096
影响滚动的其他 X 资源包括 jumpScroll、multiScroll 和 fastScroll(都在 XTerm.vt100 下,请参阅 xterm(1) § VT100 Widget Resources)。要在备用屏幕中滚动,请将 alternateScroll 设置为 true。
滚动条
默认情况下不显示滚动条。可以通过资源设置启用它并调整其外观(请注意“scrollbar”的大小写不同!)
XTerm.vt100.scrollBar: true XTerm.vt100.scrollbar.width: 8
有关其他滚动条资源,请参阅 xterm(1) § Scrollbar Resources。
滚动条的操作方式可能与您习惯的不同。
- 向下滚动
- 用鼠标左键单击滚动条,或者
- 用鼠标中键单击滚动条上的滑块下方。
- 向上滚动
- 用鼠标右键单击滚动条,或者
- 用鼠标中键单击滚动条上的滑块上方。
- 定位文本,向任一方向移动
- 用鼠标中键拖动滑块。
菜单
xterm 编译时禁用了 工具栏 或 菜单栏。菜单仍然可以通过在 xterm 窗口内按 Ctrl+MouseButton 来作为 弹出菜单 访问。菜单项调用的操作通常可以通过命令行选项或设置资源值来完成。
XTerm*geometry: 80x32。这确实会在 80 列 32 行的主窗口中启动 xterm,但它也会强制菜单窗口的大小为 80 像素 x 32 像素!这就是为什么您应该完整指定资源的原因XTerm.vt100.geometry: 80x32
下面将讨论一些菜单选项。
主选项菜单
通过 Ctrl+LeftMouse 打开
Secure Keyboard尝试确保只有 xterm 窗口,而不是其他应用程序,接收您的按键。调用时,显示会变为反向视频。如果显示不是反向视频,则 Secure Keyboard 模式无效。请阅读 xterm(1) § SECURITY 以了解此选项的局限性。Allow SendEvents允许其他进程向 xterm 窗口发送按键和鼠标事件。由于安全风险,除非您非常确定自己在做什么,否则不要启用此选项。Log to File– 日志文件的名称将是Xterm.log.hostname.yyyy.mm.dd.hh.mm.ss.XXXXXX。此文件将包含所有打印输出以及所有光标移动。日志记录可能存在安全风险。- 六个
Send *** Signal菜单项通常不怎么有用,除非您的键盘出现故障。HUP、TERM和KILL将关闭 xterm 窗口。应避免使用KILL,因为它不允许任何清理代码运行。 Quit菜单项也会关闭 xterm 窗口 – 它相当于发送HUP信号。大多数用户会使用Ctrl+d组合键或输入exit来关闭 xterm 实例。
VT 选项菜单
通过 Ctrl+MiddleMouse 打开
Select to Clipboard– 通常,选定的文本存储在 PRIMARY 中,可以通过Shift+Insert或使用鼠标中键粘贴。通过将此选项切换为开启,选定的文本将使用 CLIPBOARD,允许您将 xterm 窗口中选定的文本粘贴到 GUI 应用程序中,方法是使用Ctrl+v。相应的资源是XTerm.vt100.selectToClipboard。Show Alternate Screen– 当您使用 vim 或 less 等终端应用程序时,会打开备用屏幕。主 VT 窗口(现在隐藏)会保留在内存中。您可以通过切换此菜单选项来查看此主窗口,但无法在其中发出任何命令。您可以从此主窗口中选择和复制文本。提示 挂起在备用屏幕中运行的进程,然后恢复它,比使用Show Alternate Screen提供了更多功能。对于 bash shell,按Ctrl+z会挂起进程;输入fg命令会恢复它。Show Tek Window和Switch to Tek Mode– Tektronix 4014 是 1970 年代用于 CAD 和绘图应用的图形终端。来自 plotutils 的命令行程序graph和应用程序 gnuplot 可以使用 xterm 的 Tek 仿真;大多数人会更喜欢更现代的图表显示选项。请参阅下面的#Tek 4014 演示。
VT 字体菜单
通过 Ctrl+RightMouse 打开
- 使用 XLFD 字体时,前七个菜单项将更改当前 xterm 窗口中使用的字体面和字体大小。如果您使用的是 Xft 字体,则只会更改字体大小,字体面不会因不同的选择而改变。提示 如果您希望密切关注某个进程但又不想在屏幕上占用大量空间,
Unreadable和Tiny会很有用。例如,可以用于一个耗时较长的编译过程,而您只想看到操作是否完成。 Selection,在使用 XLFD 字体名称时,允许您切换到 PRIMARY 选择(或 CLIPBOARD)中存储的字体名称。
Tek 选项菜单
从 Tek Window 通过 Ctrl+MiddleMouse 打开。
第一部分的选项允许您更改 Tek 窗口字体大小。第二组选项用于在 Tek 仿真窗口和主(或VT)窗口之间移动焦点,以及关闭或隐藏 Tek 窗口。
复制和粘贴
首先,在 xterm(或另一个应用程序)中使用鼠标高亮文本会选择要复制的文本,然后单击鼠标中键会粘贴该高亮文本。Shift+Insert 组合键可以粘贴高亮文本(但并非所有应用程序都支持)。
有关术语和一般信息,请参阅 Clipboard#Selections。
PRIMARY 或 CLIPBOARD
默认情况下,xterm 将高亮文本复制到一个名为 PRIMARY 选择的缓冲区中,一旦另一个文本被高亮,该缓冲区中的文本就会被新的 PRIMARY 选择立即替换。PRIMARY 选择可以通过按鼠标中键或 Shift+Insert 在 xterm 中粘贴。
CLIPBOARD 选择用于显式的复制/粘贴命令,例如通过快捷键 Ctrl+c、Ctrl+x 或 Ctrl+v。
xterm 允许用户通过 #VT Options menu 上的 Select to Clipboard 或使用 XTerm.vt100.selectToClipboard 资源在 PRIMARY 或 CLIPBOARD 之间切换。
PRIMARY 和 CLIPBOARD
通过上述设置,您可以选择是使用 PRIMARY 还是 CLIPBOARD,但您也可以修改它以同时添加到两者。只需覆盖释放鼠标左键的#按键绑定
<Btn1Up>: select-end(PRIMARY, CLIPBOARD, CUT_BUFFER0)
您可以添加类似其他终端(如 gnome terminal)的复制/粘贴行为的按键绑定。
Ctrl Shift <Key>C: copy-selection(CLIPBOARD) \n\ Ctrl Shift <Key>V: insert-selection(CLIPBOARD)
选择文本
新用户通常会发现可以使用鼠标左键“点击并拖动”来选择文本。双击会选择一个单词,单词的定义是连续的字母字符加上下划线,或者说是基本正则表达式 (BRE) [A-Za-z_]。三击会选择一行,并且“制表符”通常会被复制为多个“空格”字符。
选择文本的另一种方法,尤其适用于复制一个以上全屏内容时,是
- 在预定选择的开始处单击鼠标左键。
- 滚动到可见的选择结束处。
- 在选择的结束处单击鼠标右键。
- 您不必立即在右键单击处做到精确——任何高亮选择都可以通过右键单击来扩展或缩短。
通过在 xterm 窗口中单击鼠标左键一次,可以清除任何选定的文本。
当一个字符应用程序在 xterm 中运行时,它会被允许接收鼠标事件。如果程序无法与 X11 剪贴板通信,这可能会成为一个问题。为了将这些事件传递给底层的 xterm,它们必须伴随 Shift 键。例如,在 links(而不是 xlinks -g)中,您可以鼠标单击 URL 和菜单项,但不能使用中键进行选择或粘贴。要进行复制粘贴,请按 Shift 键,然后执行鼠标单击(该键只需要在单击期间按下,因此在拖动鼠标选择文本块时无需按住它)。
颜色
xterm 默认是黑色文本,即前景颜色,在白色背景上。通过设置资源可以反转前景和背景颜色
XTerm.vt100.reverseVideo: true
或者,您可以使用资源直接更改前景和背景颜色(以及前十六种终端颜色)
XTerm.vt100.foreground: white XTerm.vt100.background: black XTerm.vt100.color0: rgb:28/28/28 ! ... XTerm.vt100.color15: rgb:e4/e4/e4
有些颜色可以通过指定名称来定义。如果安装了 emacs 或 vim,您可以检查 /usr/share/emacs/*/etc/rgb.txt 或 /usr/share/vim/*/rgb.txt 来查看带有十进制 RGB 值的颜色名称列表。颜色也可以使用十六进制 RGB 值指定,格式为 rgb:RR/GG/BB,或旧的不推荐使用的语法 #RRGGBB。
颜色 PapayaWhip 等同于 rgb:ff/ef/d5,也等同于 #ffefd5。
您可以在论坛帖子 Terminal Colour Scheme Screenshots 中查看许多关于配色方案的建议。
*foreground: rgb:b2/b2/b2 *background: rgb:08/08/08上面的示例为所有使用这些资源的Xlib 应用程序(xclock、xfontsel 等)设置了前景色和背景色值。这是一种实现统一配色方案的简单有效的方法。
字体
默认字体
xterm 的默认字体是 X Logical Font Description 别名 fixed 指定的位图字体,通常解析为
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-?
此字体,也别名为 6x13,具有非常广泛的 Unicode 字符覆盖。默认的“TrueType”字体是与名称 mono 匹配的 14 点字体。使用的FreeType 字体可以通过此命令找到
$ fc-match mono
根据字体是否为 TrueType,可以在您的资源中指定字体
XTerm.vt100.faceName: Liberation Mono:size=10:antialias=false XTerm.vt100.font: 7x13
要测试,您也可以在命令行中设置字体:-fa 用于 faceName,-fn 用于 font。如果您同时设置了两种字体,则可以通过切换 #VT Fonts menu 中的 TrueType Fonts 来在两者之间切换。您还可以通过以下资源选择默认字体
! start with TrueType fonts disabled XTerm.vt100.renderFont: false
粗体和下划线字体
在使用 XLFD 名称时,xterm 中的斜体字符显示为下划线字符。TrueType 字体应使用斜体字面。
如果您不在命令行(-fb)或通过 XTerm.vt100.boldFont 资源指定粗体字体,xterm 将尝试查找与正常字体匹配的粗体字体。如果找不到匹配的字体,则会通过“重叠”正常字体来创建粗体字体。
CJK 字体
许多字体不包含双宽的中文、日文和韩文字符。如果您经常使用这些语言,像 urxvt 这样的其他终端模拟器可能更适合。
在 xterm 中使用位图 XLFD 字体处理 CJK 有很多陷阱。使用 TrueType 字体显示 CJK 要容易得多,可以使用 faceNameDoublesize 资源。此示例使用DejaVu Sans Mono 作为正常字体,使用文泉驿文泉驿点阵宋作为双宽字体
XTerm.vt100.faceName: DejaVu Sans Mono:style=Book:antialias=false XTerm.vt100.faceNameDoublesize: WenQuanYi WenQuanYi Bitmap Song XTerm.vt100.faceSize: 8
技巧与提示
自动透明
安装一个 transset 包,如 transset-dfAUR 或 xorg-transsetAUR,以及一个合成管理器,如 Xcompmgr。然后将以下行添加到您的 ~/.bashrc
[ -n "$XTERM_VERSION" ] && transset-df --id "$WINDOWID" >/dev/null
现在,每次在 xterm 中启动 shell 并且合成管理器正在运行时,xterm 窗口都将是透明的。transset-df 前面的测试确保如果 XTERM_VERSION 未定义,则它不会执行。请注意,如果您通过这种方式启动了除 shell 以外的程序,您的终端将不会是透明的。如果您想要该功能,很可能可以解决此问题。
另请参阅 Per-application transparency。
启用铃声紧急通知
要让铃声字符通知窗口管理器紧急情况,请设置
XTerm.vt100.bellIsUrgent: true
字体技巧
使用颜色代替粗体和斜体
当使用小字号时,粗体或斜体字符可能难以阅读。一种解决方案是关闭粗体和下划线或斜体,转而使用颜色。此示例正是这样做的
! disable bold font faces, instead make text light blue. XTerm.vt100.colorBDMode: true XTerm.vt100.colorBD: rgb:82/a4/d3 ! disable underlined text, instead make it white. XTerm.vt100.colorULMode: true XTerm.vt100.colorUL: rgb:e4/e4/e4 ! similarly use colorIT for italics
有关格式信息,请参阅 #Colors。
调整行距
文本行有时可能靠得太近,或者显得间距过大。例如,使用DejaVu Sans Mono 时,低下划线字形可能会与 CJK 字形或下一行中的光标块碰撞。行距,在排版中称为行高,可以通过以下资源进行调整,例如以扩大间距
XTerm.vt100.scaleHeight: 1.01
有效范围值从 0.9 到 1.5,其中 1.0 是默认值。
Tek 4014 演示
如果您安装了 plotutils,您可以使用 xterm 的 Tektronix 4014 仿真来查看 plotutils 包的一些测试文件。从 #VT Options menu 菜单项 Switch to Tek Mode 打开 Tek 窗口,或使用此命令启动新的 xterm 实例
$ xterm -t -tn tek4014
您的 PS1 提示符将无法正确渲染,如果它显示出来的话。在新窗口中,输入命令,
cat /usr/share/tek2plot/dmerc.tek
世界地图将出现在 Tek 窗口中。您也可以查看同一目录中的其他 *.tek 文件。要关闭 Tek 窗口,您可以使用 xterm 菜单。
防止 X11 输入被窥探
从 #Main Options menu 激活 Secure Keyboard 模式可能不方便。您可以改为使用#Key binding调用 secure() 动作
Ctrl Alt <Key>S: secure()
故障排除
滚动时闪烁
使用 ABS 重建 xterm 并包含 --enable-double-buffer 标志
./configure --prefix=/usr \
...
--with-utempter \
--enable-double-buffer
有关详细信息,请参阅 Xterm modifications。
配置未生效
某些应用程序,例如 i3,会调用 uxterm 包装器而不是 xterm。这可以通过为 uxterm 添加相同的配置来解决,例如
UXTerm.vt100.reverseVideo: true
如果您希望配置文件中没有重复条目,可以使用通配符匹配
*.vt100.reverseVideo: true
字体大小菜单不改变字体大小
如果您在更改字体大小时遇到问题,请安装 xorg-mkfontscale 包。