如何从编译的 terminfo 文件生成 termcap 字符串?

如何从编译的 terminfo 文件生成 termcap 字符串?

该线程的标题几乎说明了一切。

当我用谷歌搜索这个问题时,我发现提到了一个名为的程序,untic据说它可以做我想做的事情,但这个程序似乎在我的发行版(Debian)官方软件包中不可用。

还有其他方法可以从(编译的)terminfo 到 termcap 吗?

答案1

man infotocap:

infotocap - 将 terminfo 描述转换为 termcap 描述

其中注释

该实用程序实际上是一个链接tic, 运行-C 模式。您可以使用其他tic选项如-f-x

这就是源到源。对于已编译的 terminfo 源(terminfo 或 termcap),请使用infocmp:

产生的来源-Coption 可以直接用作 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手册页。

相关内容