xterm

来自 ArchWiki

xtermX Window 系统 的标准终端模拟器X Window 系统。它具有高度可配置性,并具有许多实用和一些不寻常的功能。

安装

安装 xterm 软件包。

配置

资源文件设置

您可以在 X 资源文件中设置几个选项,这些选项可以使此终端模拟器使用起来更加愉快。请参阅 xterm(1) § RESOURCES 以获取完整列表。

TERM 环境变量

允许 xterm 正确报告 TERM 变量。不要从您的 ~/.bashrc~/.bash_profile 或类似文件中设置 TERM 变量。终端本身应向系统报告正确的 TERM,以便使用正确的 terminfo 文件。两个可用的 terminfo 名称是 xtermxterm-256color。要设置名称,请使用资源

XTerm.termName: xterm-256color

您可以使用以下任一命令在 xterm 中检查结果

$ echo $TERM
$ tset -q

UTF-8

确保您的 locale 设置为 UTF-8。如果您不使用 UTF-8,您可能需要强制 xterm 更严格地遵循您的 locale,方法是设置

XTerm.vt100.locale: true

要强制使用 UTF-8,请设置

XTerm.vt100.locale: false
XTerm.vt100.utf8: true

这通常是必要的,因为 XTerm 不支持所有 UTF-8 locale,包括 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+MCtrl+R 映射到最大化/恢复窗口

XTerm.vt100.translations: #override \n\
    Ctrl <Key>M: maximize() \n\
    Ctrl <Key>R: restore()

#override 表示这些绑定应覆盖任何现有绑定(对于自定义按键绑定,您几乎总是需要这样做)。每个绑定必须用转义序列 \n 分隔。如果要插入文字换行符,也需要转义(因此为 \n\)。有关完整动作列表和许多示例,请参阅 xterm(1) § KEY_BINDINGS

提示: 您还可以拥有单独的按键绑定集,并在它们之间切换。请参阅 man 手册中的 keymap() 动作。

滚动

当新行写入 xterm 窗口底部时,旧行将从顶部消失。要向上和向下滚动浏览屏幕外的行,可以使用鼠标滚轮、组合键 Shift+PageUpShift+PageDown 或滚动条。

默认情况下,保存 1024 行。您可以使用 saveLines 资源更改保存的行数

XTerm.vt100.saveLines: 4096

影响滚动的其他 X 资源包括 jumpScrollmultiScrollfastScroll(都在 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+鼠标按钮 时,菜单仍然可以作为弹出窗口使用。菜单项调用的操作通常可以使用命令行选项或通过设置资源值来完成。

提示: 如果弹出菜单窗口仅显示为小方框,则可能是因为您的资源文件中有一行类似于 XTerm*geometry: 80x32 的行。这确实以 80 列乘 32 行的主窗口启动 xterm,但它也强制菜单窗口为 80 像素乘 32 像素!这就是为什么您应该完全指定资源
XTerm.vt100.geometry: 80x32

下面讨论一些菜单选项。

主选项菜单

使用 Ctrl+鼠标左键 打开

  • 安全键盘 尝试确保只有 xterm 窗口,而没有其他应用程序接收您的击键。调用它时,显示会变为反相视频。如果显示不是反相视频,则安全键盘模式未生效。请阅读 xterm(1) § SECURITY 以了解此选项的限制。
  • 允许发送事件 允许其他进程向 xterm 窗口发送按键和鼠标事件。由于存在安全风险,除非您非常确定自己知道自己在做什么,否则不要启用此选项。
  • 记录到文件 – 日志文件将命名为 Xterm.log.hostname.yyyy.mm.dd.hh.mm.ss.XXXXXX。此文件将包含所有打印的输出和所有光标移动。日志记录可能存在安全风险。
  • 六个 发送 *** 信号 菜单项通常没有用,除非您的键盘出现故障。HUPTERMKILL 将关闭 xterm 窗口。应避免使用 KILL,因为它不允许运行任何清理代码。
  • 退出 菜单项也将关闭 xterm 窗口 – 它与发送 HUP 信号相同。大多数用户将使用键盘组合 Ctrl+d 或键入 exit 来关闭 xterm 实例。

VT 选项菜单

使用 Ctrl+鼠标中键 打开

  • 选择到剪贴板 – 通常,选定的文本存储在 PRIMARY 中,以便使用 Shift+Insert 或使用鼠标中键粘贴。通过将此选项切换为开启,选定的文本将使用 CLIPBOARD,允许您使用 Ctrl+v 将 xterm 窗口中选定的文本粘贴到 GUI 应用程序中。相应的资源是 XTerm.vt100.selectToClipboard
  • 显示备用屏幕 – 当您使用终端应用程序(如 vimless)时,将打开备用屏幕。主 VT 窗口(现在已隐藏)仍保留在内存中。您可以通过切换此菜单选项来查看此主窗口,但不能在其中发出任何命令。您可以从此主窗口中选择和复制文本。
    提示: 挂起在备用屏幕中运行的进程,然后恢复它比使用 显示备用屏幕 提供更多功能。使用 bash shell,按 Ctrl+z 挂起进程;然后发出命令 fg 恢复它。
  • 显示 Tek 窗口切换到 Tek 模式Tektronix 4014 是 1970 年代用于 CAD 和绘图应用程序的图形终端。来自 plotutils 的命令行程序 graph 和应用程序 gnuplot 可以设置为使用 xterm 的 Tek 仿真;大多数人会更喜欢更现代的显示选项来绘制数据图表。请参阅下面的#Tek 4014 演示

VT 字体菜单

使用 Ctrl+鼠标右键 打开

  • 当使用 XLFD 字体时,前七个菜单项将更改当前 xterm 窗口中使用的字体和字体大小。如果您使用的是 Xft 字体,则只会更改字体大小,字体不会随不同的选择而更改。
    提示: 如果您希望关注进程但不希望在终端窗口上占用大量屏幕空间,则 UnreadableTiny 很有用。一个示例用途可能是长时间的编译过程,您只想查看操作是否完成。
  • 使用 XLFD 字体名称时,Selection 允许您切换到存储在 PRIMARY 选择(或 CLIPBOARD)中的字体名称。

Tek 选项菜单

Tek 窗口 使用 Ctrl+鼠标中键 打开。

第一个部分中的选项允许您更改 Tek 窗口字体大小。第二组选项用于在 Tek 仿真窗口和主窗口或 VT 窗口之间移动焦点,以及关闭或隐藏 Tek 窗口。

复制和粘贴

首先,在 xterm 中使用鼠标突出显示文本(或在其他应用程序中),将选择要复制的文本,然后单击鼠标中键将粘贴突出显示的文本。组合键 Shift+Insert 将粘贴突出显示的文本(但并非在所有应用程序中)。

有关术语和一般信息,请参阅 剪贴板#选择

PRIMARY 或 CLIPBOARD

本文或章节需要扩充。

原因: 可以定义 CLIPBOARD 的单独快捷方式,而不是使用选择到剪贴板,类似于 VTE 类型的终端。例如,请参阅 [1](在 Talk:Xterm 中讨论)

默认情况下,xterm 将突出显示的文本复制到名为 PRIMARY 选择的缓冲区中,一旦突出显示另一段文本,该文本就会立即被新的 PRIMARY 选择替换。PRIMARY 选择可以通过按鼠标中键或 Shift+Insert 在 xterm 中粘贴。

CLIPBOARD 选择用于显式复制/粘贴命令,例如通过快捷键 Ctrl+cCtrl+xCtrl+v

xterm 允许用户使用 #VT 选项菜单上的 选择到剪贴板 或使用 XTerm.vt100.selectToClipboard 资源在 PRIMARY 或 CLIPBOARD 之间切换。

PRIMARY 和 CLIPBOARD

使用上述设置,您可以选择是否要使用 PRIMARY 或 CLIPBOARD,但您也可以对其进行破解以将选择添加到两者。只需覆盖释放鼠标左键的 #按键绑定

<Btn1Up>: select-end(PRIMARY, CLIPBOARD, CUT_BUFFER0)

您可以添加类似于其他终端复制/粘贴行为(例如 gnome 终端)的 按键绑定

Ctrl Shift <Key>C: copy-selection(CLIPBOARD) \n\
Ctrl Shift <Key>V: insert-selection(CLIPBOARD)

选择文本

新用户通常会发现可以使用鼠标左键“单击并拖动”来选择文本。双击将选择一个单词,其中单词定义为连续的字母字符加上下划线,或基本正则表达式 (BRE) [A-Za-z_]。三击选择一行,其中“制表符”字符通常复制为多个“空格”字符。

另一种选择文本的方式,在复制多个全屏时尤其有用,是

  1. 在预期选择的开头单击鼠标左键。
  2. 滚动到选择的结尾可见的位置。
  3. 在选择的结尾处单击鼠标右键。
您不必立即精确地单击鼠标右键 – 可以使用鼠标右键单击来扩展或缩短任何突出显示的选择。

您可以通过在 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
注意: 可以通过多种不同的方式指定使用 X 库的应用程序的颜色。

某些颜色可以通过分配的名称指定。如果安装了 emacsvim,您可以检查 /usr/share/emacs/*/etc/rgb.txt/usr/share/vim/*/rgb.txt 以查看颜色名称及其十进制 RGB 值的列表。颜色也可以使用十六进制 RGB 值指定,格式为 rgb:RR/GG/BB,或较旧且不鼓励使用的语法 #RRGGBB

颜色 PapayaWhiprgb:ff/ef/d5 相同,也与 #ffefd5 相同。

有关颜色语法的更完整描述,请参阅 X(7),来自 xorg-docs

可以在论坛主题 终端颜色方案截图 中查看许多颜色方案建议。

提示: 许多人在其 X 资源文件中指定颜色,而不指定应用程序类或应用程序实例
*foreground: rgb:b2/b2/b2
*background: rgb:08/08/08
上面的示例为所有使用这些资源的 Xlib 应用程序(xclock、xfontsel 等)设置了前景色和背景色值。这是一种实现统一颜色方案的简单易行的方法。

字体

默认字体

xterm 的默认字体是由 X 逻辑字体描述 别名 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 字体菜单切换 TrueType 字体 来在两者之间切换。您还可以使用以下资源选择默认字体

! start with TrueType fonts disabled
XTerm.vt100.renderFont: false

粗体和下划线字体

当在 xterm 中使用 XLFD 名称时,斜体字体显示为带下划线的字符。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-dfAURxorg-transsetAUR复合窗口管理器,例如 Xcompmgr。然后将以下行添加到您的 ~/.bashrc

[ -n "$XTERM_VERSION" ] && transset-df --id "$WINDOWID" >/dev/null

现在,每次您在 xterm 中启动 shell 并且复合管理器正在运行时,xterm 窗口都将是透明的。transset-df 前面的测试使其在未定义 XTERM_VERSION 时不会执行。请注意,如果您以这种方式启动 shell 以外的程序,您的终端将不会透明。如果您需要此功能,则可能可以解决此问题。

另请参阅 按应用程序透明

启用响铃紧急提示

要使响铃字符通知窗口管理器紧急性,请设置

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

有关格式信息,请参阅 #颜色

调整行距

文本行有时可能太靠近,或者它们可能显得间隔太宽。例如,使用DejaVu Sans Mono,低位下划线字形可能会与 CJK 字形或下方行中的光标块碰撞。行距(排版人员称为行距)可以使用以下资源进行调整,例如,要加宽间距

XTerm.vt100.scaleHeight: 1.01

有效值范围为 0.91.5,其中 1.0 为默认值。

Tek 4014 演示

如果您安装了 plotutils,则可以使用 xterm 的 Tektronix 4014 仿真来查看 plotutils 软件包的一些测试文件。从 #VT 选项菜单 菜单项 切换到 Tek 模式 打开 Tek 窗口,或使用以下命令启动新的 xterm 实例

$ xterm -t -tn tek4014

如果 PS1 提示符出现,它将无法正确呈现。在新窗口中,输入命令,

cat /usr/share/tek2plot/dmerc.tek

世界地图将出现在 Tek 窗口中。您还可以查看来自同一目录的其他 *.tek 文件。要关闭 Tek 窗口,可以使用 xterm 菜单。

防止 X11 输入监听

#主选项菜单 激活 安全键盘 模式可能很不方便。您可以改为使用 #按键绑定 调用 secure() 动作

Ctrl Alt <Key>S: secure()

故障排除

滚动时闪烁

注意: 双缓冲可能会导致非位图字体呈现不正确。

使用 ABS 重建 xterm 并包含 --enable-double-buffer 标志

./configure --prefix=/usr \
     ...
     --with-utempter \
     --enable-double-buffer

有关详细信息,请参阅 Xterm 修改

配置未应用

某些应用程序(例如 i3)调用 uxterm 包装器而不是 xterm。可以通过为 uxterm 添加相同的配置来解决此问题,例如

UXTerm.vt100.reverseVideo: true

如果您希望配置文件中没有重复条目,则可以使用通配符匹配

*.vt100.reverseVideo: true

字体大小菜单无法更改字体大小

如果您在更改字体大小方面遇到问题,请安装 xorg-mkfontscale 软件包。

参见