该线程的标题几乎说明了一切。
当我用谷歌搜索这个问题时,我发现提到了一个名为的程序,untic
据说它可以做我想做的事情,但这个程序似乎在我的发行版(Debian)官方软件包中不可用。
还有其他方法可以从(编译的)terminfo 到 termcap 吗?
答案1
infotocap - 将 terminfo 描述转换为 termcap 描述
其中注释
该实用程序实际上是一个链接
tic
, 运行-C
模式。您可以使用其他tic
选项如-f
和-x
。
这就是源到源。对于已编译的 terminfo 源(terminfo 或 termcap),请使用infocmp
:
产生的来源
-C
option 可以直接用作 termcap 条目,但并非所有参数化字符串都可以更改为 termcap 格式。infocmp
将尝试转换大部分参数化信息,任何未转换的内容都将在输出中明确标记并注释掉。这些应该手动编辑。
infocmp
有多种使用方式;转换为 termcap 只是其中之一:
infocmp
可用于将二进制 terminfo 条目与其他 terminfo 条目进行比较,重写 terminfo 描述以利用use=
terminfo 字段,或以多种格式从二进制文件(term)中打印出terminfo描述。 在所有情况下,将首先打印布尔字段,然后是数字字段,最后是字符串字段。
tic 和 infocmp 假设有关终端数据库位置的信息,这些信息在手册页中进行了处理,例如,TERMINFO
。对于任意文件名(不是终端数据库的一部分),您可以使用脚本将其复制到像传统终端数据库一样的目录中,例如,
#!/bin/sh
mytemp=$(mktemp -d)
trap 'rm -rf "$mytemp"; exit 1' INT QUIT TERM HUP
trap 'rm -rf "$mytemp"; exit 0' EXIT
TERMINFO=$mytemp; export TERMINFO
TERMINFO_DIRS=$mytemp; export TERMINFO_DIRS
for name in "$@"
do
[ -f "$name" ] || continue
case $(file "$name") in
*Compiled\ *terminfo\ entry*)
actual=$(file "$name" | sed -E -e 's%^.*"([^"]+)".*$%\1%')
leader=$(echo "$actual" | sed -E -e 's%^(.).*%\1%')
part="$mytemp/$leader"
mkdir -p "$part"
cp "$name" "$part/$actual"
full="$part/$actual"
infocmp -C -T "$actual" | sed -e "s%$full%$name%"
;;
esac
done
那不是完全地一般来说,由于某些平台(使用 ncurses)使用不同的结构,如term
手册页。