认识
官网: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
从源码中编译安装
- 参考 BLFS/xterm-325:http://www.linuxfromscratch.org/blfs/view/7.10/x/xterm.html
应用
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