「XTerm」- Terminal Emulator for X

认识

官网:http://invisible-island.net/xterm/xterm.html
文档:http://invisible-island.net/xterm/manpage/xterm.html

XTerm,用于 X 的终端模拟器。

组成

命令程序 and 配置文件

koi8rxterm 一个包装的脚本,使用 KOI8-R 语言环境来设置 xterm。
resize 打印一个设置 TERM 和 TERMCAP 环境变量来指示 xterm 窗口的当前大小的 shell 命令。
uxterm 一个包装脚本,用于修改当前的语言环境为 UTF-8,并使用正确的设置来启动 xterm。
xterm 用于 X Window System 的终端模拟器。

性质

它提供 DEC VT102/VT220 和从 VT320/VT420/VT520(VTxxx)等更高级别的终端选择的功能。
它还为不能直接使用窗口系统的程序提供 Tektronix 4014 的仿真。
如果底层操作系统支持终端调整大小功能(例如,来自 4.3BSD 的系统中的 SIGWINCH 信号),每当调整大小时,xterm 将使用该设施来通知在窗口中运行的程序。

VTxxx 和 Tektronix 4014 终端每个都有自己的窗口,以便可以在一个中编辑文本,同时在另一个中的查看图形。为了保持正确的宽高比(高 / 宽),Tektronix 图形将被限制为最大框,具有适合窗口的 4014 宽高比。该框位于窗口的左上角区域。

虽然可以同时显示这两个窗口,但其中的一个被认为是用于接收键盘输入和终端输出的“活动”窗口。这是包含文本光标的窗口。可以通过转义序列VTxxx 窗口中的 VT 选项菜单4014 窗口中的 Tek 选项菜单来选择活动窗口。

构建

安装命令

从发行版的源中安装

# Ubuntu 16.04 LTS
apt-get install xterm

从源码中编译安装

应用

XTerm 设置

针对 XTerm 的配置文件,

  • 默认位置为 /etc/X11/app-defaults
  • 用户配置的 XTerm 信息需要写入$HOME/.Xresources 中。

当修改了.Xresources 之后,运行 xrdb .Xresources 使配置生效。

快捷键绑定

在 XTerm 中,定义了一系列的用于操作终端的”Action”。比如:copy-selection(), hard-reset(), scroll-back() 等。这些 Action 可以结合 translations 映射到鼠标和键盘。

比如:可以映射 Ctrl + M 和 Ctrl + R 用于最大化 / 还原窗口:

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

#override 表示覆盖任何原有的绑定。每个绑定必须由\ n 分隔。如果要插入文字的换行符,还需要转义(因此是\n\)。有关完整的操作列表和许多示例,可以参阅 man 1 xterm 的 KEY BINDINGS 部分。以下的内容取自 man 1 xterm 中的 KEY BINDINGS 部分。

修改标题

How to change the title of an xterm

在窗口的标题栏中,显示当前正在执行的命令

How to change the title of an xterm: Dynamic titles

当终端开的特别多的时候,都分不清哪个是哪个了;或者输出大量信息后,分不清当前窗口正在执行什么;总之区分特别麻烦的时候,这时可以在窗口的标题栏(Title Bar)里显示当前 shell 的路径正在执行的命令进行区分。

而且 Alt + Tab 切换窗口时,列表中显示的也是 Window 的 Title,正好可以用于选择要切换的窗口。

注意事项,这里只演示 XTerm + Bash 环境中该如果做,其他也是同理的。

SHELL 脚本

#!/bin/bash

case "$TERM" in
xterm*|rxvt*)

	# BASH 中的变量,每次显示提示符之前,将该变量的值作为命令来执行。
	# 这里用作:恢复原有的 Title 内容。
	PROMPT_COMMAND='echo -ne "\033]0;[${USER}@${HOSTNAME} $(basename ${PWD})]# \007"'

	# 修改 Title 的函数
	show_executing_cmd_in_title_bar()
	{
		case "$BASH_COMMAND" in
			*\033]0*)
				# 如果命令中包含“\033]0”,就假设执行的是 PROMPT_COMMAND 中的内容。
				# 此时,不做任何操作。
				;;
			*)
				echo -ne "\033]0;[${USER}@${HOSTNAME}: $(basename ${PWD})]# ${BASH_COMMAND}\007"
				;;
		esac
	}

	trap show_executing_cmd_in_title_bar DEBUG

	;;
*)
	;;
esac

参考

Arch Wiki / XTerm
BLFS / xterm-327
IBM Knowledge Center / XTerm