该-hold
选项于 1999 年添加到 XFree86 xterm(补丁 116)。但是,Sun 继续提供 xterm 的“openwin”二进制文件,直到 2011 年的 Solaris 11(请参阅 xterm FAQ Why can't I use the pageup/pagedown keys?)。在那之前,Sun 在免费软件 CDROM 上提供了现代 xterm。
提供“保持”功能的通常建议涉及在所需命令之后的“读取”命令。假设要执行的命令在 shell 中运行。如果要运行vi
,建议的修复不起作用,因为可能涉及备用屏幕。此外,它依赖于$SHELL
set (并且不适用于某些,例如tcsh
-- 但确实适用于bash
)。
这是解决这些问题的改进脚本:
#!/bin/bash
export SHELL=/bin/bash
while [ $# != 0 ]
do
CMD="$1" \
xterm -xrm '*titeInhibit:true' -e $SHELL -c '$SHELL -c "$CMD"; read'
shift 1
done
所有版本都xterm
支持该-xrm
开关(它随 Xt、X Toolkit 库免费提供)。
显式titeInhibit
资源解决了运行全屏应用程序(例如vi
. 为Solaris 11中的xterm提供的终端描述将备用屏幕用于全屏应用程序。这在 xterm FAQ 中有讨论为什么运行 vi 时屏幕不清晰?. 如果没有资源设置,如果一个脚本运行到vi
多个文件,退出后屏幕会被清除vi
,同时等待用户按下Enter关闭窗口。在此行为不是默认行为的其他系统上,已修补 xterm- 或 ncurses-sources 以反映打包者的偏好。同样,Solaris 9 的 terminfo 源代码也已修补。尽管如此,无法处理常用的行为xterm
将是一个问题。
例如,即使使用 Solaris 9,许多用户也依赖 ncurses 来提供可行的彩色终端描述。Solaris(如 xterm FAQ What $TERM should I use?中所述)提供了xtermc
,但它的功能键与实际的 xterm 完全不同,使其成为一个糟糕的选择。Sun 免费软件 cdrom 的 terminfo(来自 ncurses)没有打补丁;使用该终端数据库的人在备用屏幕上获得了预期的行为。