xterm
xterm 是 X Window System 的标准终端模拟器。它具有高度的可配置性,并拥有许多实用且不同寻常的功能。
安装
配置
资源文件设置
你可以在 X 资源文件中设置多个选项,这些选项可以让终端模拟器使用起来更舒适。完整列表请参阅 xterm(1) § RESOURCES。
TERM 环境变量
允许 xterm 正确报告 TERM 变量。两个可用的 terminfo 名称是 xterm 和 xterm-256color。要设置名称,请使用以下资源
XTerm.termName: xterm-256color
你可以在 xterm 内使用以下任一命令检查结果
$ echo $TERM $ tset -q
UTF-8
确保你的区域设置(locale)已设置为 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 发送 ^[ (转义) 键(如同 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 在编译时默认禁用了工具栏或菜单栏。当你按下 Ctrl+鼠标按键 时,菜单仍然可以作为弹出窗口在 xterm 窗口内使用。菜单项触发的动作通常也可以通过命令行选项或设置资源值来实现。
XTerm*geometry: 80x32 的配置。这确实会以 80 列 32 行的窗口启动 xterm,但也会强制菜单窗口的大小也变为 80 像素 x 32 像素!这就是为什么你应该完整地指定资源XTerm.vt100.geometry: 80x32
下面将讨论一些菜单选项。
主选项菜单
通过 Ctrl+鼠标左键 打开
Secure Keyboard(安全键盘)尝试确保只有 xterm 窗口(没有其他应用程序)接收你的按键。启用此项时,显示将变为反色。如果显示未变为反色,则表示安全键盘模式未生效。请阅读 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+鼠标中键 打开
Select to Clipboard(选择到剪贴板)– 通常,选中的文本存储在 PRIMARY 中,可以通过Shift+Insert或鼠标中键进行粘贴。将此选项切换为启用后,选中的文本将使用 CLIPBOARD,允许你使用Ctrl+v将 xterm 窗口中选中的文本粘贴到 GUI 应用程序中。对应的资源是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 是 20 世纪 70 年代用于 CAD 和绘图应用的图形终端。命令行程序graph(来自 plotutils)和应用程序 gnuplot 可以设置为使用 xterm 的 Tek 仿真;大多数人会更喜欢用现代显示方案来绘制数据。请参阅下方的 #Tek 4014 演示。
VT 字体菜单
通过 Ctrl+鼠标右键 打开
- 当使用 XLFD 字体时,前七个菜单项会更改当前 xterm 窗口中使用的字体族和字体大小。如果你使用 Xft 字体,则只会更改字体大小,字体族不会随选择而改变。提示
Unreadable和Tiny在你想要关注某个进程但又不想为终端窗口占用大量屏幕空间时非常有用。例如,在长时间的编译过程中,你只需要确认操作完成即可。 - 使用 XLFD 字体名称时,
Selection允许你切换到存储在 PRIMARY 选择(或 CLIPBOARD)中的字体名称。
Tek 选项菜单
在 Tek 窗口中通过 Ctrl+鼠标中键 打开。
第一部分的选项允许你更改 Tek 窗口的字体大小。第二组选项用于在 Tek 仿真窗口和主窗口(或称 VT 窗口)之间切换焦点,以及关闭或隐藏 Tek 窗口。
复制与粘贴
首先,在 xterm(或其它应用程序)中通过鼠标高亮显示文本即选中要复制的内容,然后点击鼠标中键即可粘贴。组合键 Shift+Insert 也可以粘贴高亮文本(但在某些应用程序中不支持)。
有关术语和一般信息,请参阅 Clipboard#Selections。
PRIMARY 或 CLIPBOARD
默认情况下,xterm 将高亮文本复制到名为 PRIMARY 的缓冲区中,一旦高亮了新的文本,旧的 PRIMARY 选择就会立即被替换。可以通过按鼠标中键或 Shift+Insert 在 xterm 中粘贴 PRIMARY 选择内容。
CLIPBOARD 选择用于显式复制/粘贴命令,例如通过快捷键 Ctrl+c、Ctrl+x 或 Ctrl+v。
xterm 允许用户通过#VT 选项菜单中的 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_]。三击可以选择一行,其中“tab”字符通常被复制为多个“空格”字符。
另一种选择文本的方法(在复制超过一个完整屏幕的内容时特别有用)是:
- 在目标选区的起始处进行左键单击。
- 滚动直到选区的结束位置可见。
- 在选区的结束处进行右键单击。
- 你不必在右键单击时立即做到精确——任何高亮选区都可以通过右键单击进行扩展或缩短。
你可以通过在 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 逻辑字体描述 (XLFD) 别名 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 Fonts 在两者之间切换。你也可以使用以下资源选择默认值
! start with TrueType fonts disabled XTerm.vt100.renderFont: false
粗体和下划线字体
在 xterm 中使用 XLFD 名称时,斜体显示为带下划线的字符。TrueType 字体应该使用倾斜(oblique)字样。
如果你没有在命令行(-fb)或通过 XTerm.vt100.boldFont 资源指定粗体字体,xterm 将尝试查找与普通字体匹配的粗体字体。如果没有找到匹配的字体,则会通过“加粗(overstriking)”普通字体来创建粗体字体。
中日韩(CJK)字体
许多字体不包含中日韩双倍宽度语言的字形。如果你经常使用这些语言,其他终端模拟器(如 urxvt)可能更合适。
在 xterm 中使用位图 XLFD 字体处理 CJK 有许多陷阱。使用 faceNameDoublesize 资源,通过 TrueType 字体进行 CJK 显示要容易得多。此示例使用 DejaVu Sans Mono 作为普通字体,使用 WenQuanYi Bitmap Song 作为双倍宽度字体
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)。然后将以下行添加到你的 shell 启动文件中
[ -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 选项菜单菜单项 Switch to Tek Mode 打开 Tek 窗口,或使用以下命令启动新的 xterm 实例
$ xterm -t -tn tek4014
你的 PS1 提示符将无法正确渲染(如果它能显示的话)。在新窗口中,输入命令:
cat /usr/share/tek2plot/dmerc.tek
世界地图将出现在 Tek 窗口中。你也可以在该目录下查看其他 *.tek 文件。要关闭 Tek 窗口,可以使用 xterm 菜单。
防止 X11 输入窥探
从#主选项菜单激活 Secure Keyboard 模式可能很不方便。你可以改为通过#按键绑定调用 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 软件包。