Ema*_*erg 4 terminal xterm rxvt
我找到
setterm -regtabs 4
Run Code Online (Sandbox Code Playgroud)
在 xterm 或 urxvt 中不起作用。
但是这个
xterm_set_tabs () {
TERM=linux;
export $TERM;
setterm -regtabs 4
}
Run Code Online (Sandbox Code Playgroud)
将规避问题。
但是,我怀疑它是次优的,因为 (1) 我得到了一个我无法解释的 gfx 错误(至少,如果我把选项卡的东西弄对了,那可能性就被排除了),以及 (2) 当我 ssh 到我学校的Solaris,然后运行emacs -nw
,它说终端“linux”是未知的!那么我必须把它改回“xterm”。当然,这很愚蠢,因为我一直在使用同一个终端。
此外,也许根本不依赖标签是一个很好的经验法则!
该setterm
实用程序旨在与 Linux 控制台一起使用。根据console_codes 手册页:
Linux 控制台实现了 VT102 和 ECMA-48/ISO 6429/ANSI X3.64 终端控件的一大子集,以及用于更改调色板、字符集映射等的某些专用模式序列。
由于程序是硬编码的,
/* -regtabs. */
if (ctl->opt_regtabs && vc_only(ctl, "--regtabs")) {
int i;
fputs("\033[3g\r", stdout);
for (i = ctl->opt_rt_len + 1; i <= TABS_MAX; i += ctl->opt_rt_len)
printf("\033[%dC\033H", ctl->opt_rt_len);
putchar('\r');
}
Run Code Online (Sandbox Code Playgroud)
它恰好适用于 xterm,因为 xterm 实现了VT100 控件(以及更多控件)。
至于大的子集,这是有争议的。在快速计算 中的项目时console_codes
,我看到了 79 个控制序列。通过计算控件,这远低于 xterm FAQ Comparing versions 中记录的任何 xterm 相似之处。79 本身并不大。VT102 本身(不是类似 xterm 的)有 104 个。ISO-6429(又名ECMA-48)记录了 20 个模式和 162 个序列。无论您将总数计算为 182 还是 162,50% 都不是一个很大的子集。
除了使用 Linux 控制台实用程序,还有一个更便携的选择:tabs
实用程序(在POSIX和 Solaris 中)。它是ncurses 实用程序的一部分(可能安装在您的 Linux 系统上)。
对于问题中给出的示例,您可以这样做:
tabs -4
Run Code Online (Sandbox Code Playgroud)
这使用终端数据库,而不是硬编码。选项卡和设置它们的控制序列记录在 ECMA-48 和其他地方,例如terminfo(5)手册页。
并tabs
与 xterm 一起使用。
许多终端支持设置制表位的转义序列。该功能甚至在 terminfo(5) 中有一个条目:tbc(清除所有选项卡)和 hts(水平选项卡集)。
$ tput tbc; echo aaaaaaaaaaaaaaaaaaaaa$(tput hts); echo 'a\tb'
aaaaaaaaaaaaaaaaaaaaa
a b
Run Code Online (Sandbox Code Playgroud)
上面我们在 aaaaaaaa 的末尾设置了一个制表位,我们在下一行看到结果。
因此,要设置每 4 列制表位,我们需要:
tbc=$(tput tbc) hts=$(tput hts) cuf4=$(tput cuf 4)
printf '%s\r' "$tbc"
i=4
while [ "$i" -lt "$COLUMNS" ]; do
printf %s "$cuf4$hts"
i=$(($i + 4))
done
printf '\r'
Run Code Online (Sandbox Code Playgroud)
或者您也可以以不规则的间隔设置制表位。上面我们使用“tput cuf”向前移动光标,而在第一个示例中我们使用“aaaa”。你可以做:
printf '\r%s' "${tbc}aaaa${hts}aaaaa${hts}aaaaaaaa${hts}"
Run Code Online (Sandbox Code Playgroud)
在第 4 列设置一个制表位,然后是下一个,再往前 5 列...
归档时间: |
|
查看次数: |
5063 次 |
最近记录: |