我正在 Debian 上工作。我运行了这个命令:
./configure && make && sudo make install
我得到了这个错误:
./etc/rxvt-unicode.terminfo", line 57, col 20, terminal 'rxvt-unicode': unknown capability 'kDC5'
./etc/rxvt-unicode.terminfo", line 58, col 19, terminal 'rxvt-unicode': unknown capability 'kDC6'
./etc/rxvt-unicode.terminfo", line 59, col 17, terminal 'rxvt-unicode': unknown capability 'kDN'
./etc/rxvt-unicode.terminfo", line 60, col 18, terminal 'rxvt-unicode': unknown capability 'kDN5'
./etc/rxvt-unicode.terminfo", line 62, col 20, terminal 'rxvt-unicode': unknown capability 'kIC5'
./etc/rxvt-unicode.terminfo", line 63, col 19, terminal 'rxvt-unicode': unknown capability 'kIC6'
./etc/rxvt-unicode.terminfo", line 65, col 21, terminal 'rxvt-unicode': unknown capability 'kEND5'
./etc/rxvt-unicode.terminfo", line 66, col 20, terminal 'rxvt-unicode': unknown capability 'kEND6'
./etc/rxvt-unicode.terminfo", line 68, col 21, terminal 'rxvt-unicode': unknown capability 'kFND5'
./etc/rxvt-unicode.terminfo", line 69, col 20, terminal 'rxvt-unicode': unknown capability 'kFND6'
./etc/rxvt-unicode.terminfo", line 71, col 21, terminal 'rxvt-unicode': unknown capability 'kHOM5'
./etc/rxvt-unicode.terminfo", line 72, col 20, terminal 'rxvt-unicode': unknown capability 'kHOM6'
./etc/rxvt-unicode.terminfo", line 74, col 19, terminal 'rxvt-unicode': unknown capability 'kLFT5'
./etc/rxvt-unicode.terminfo", line 76, col 21, terminal 'rxvt-unicode': unknown capability 'kNXT5'
./etc/rxvt-unicode.terminfo", line 77, col 20, terminal 'rxvt-unicode': unknown capability 'kNXT6'
./etc/rxvt-unicode.terminfo", line 79, col 21, terminal 'rxvt-unicode': unknown capability 'kPRV5'
./etc/rxvt-unicode.terminfo", line 80, col 20, terminal 'rxvt-unicode': unknown capability 'kPRV6'
./etc/rxvt-unicode.terminfo", line 82, col 19, terminal 'rxvt-unicode': unknown capability 'kRIT5'
./etc/rxvt-unicode.terminfo", line 83, col 17, terminal 'rxvt-unicode': unknown capability 'kUP'
./etc/rxvt-unicode.terminfo", line 84, col 18, terminal 'rxvt-unicode': unknown capability 'kUP5'
有谁知道如何修理它?
答案1
这tic
计划报告称能力未知。使用-x
选项告诉tic
将这些视为用户定义的功能。
这特别指定修复为在doc/Makefile
,它说的是类似的东西
tic $(srcdir)/etc/rxvt-unicode.terminfo
将其更改为
tic -x $(srcdir)/etc/rxvt-unicode.terminfo
正如评论中提到的,还有其他方法可以实现相同的目标。
用户定义的功能是在ncurses 5.0。因为它是一个扩展(并且与其他实现的兼容性始终是一个问题),所以您需要选项来使其工作。
答案2
从 Debian 源代码包构建它。
您遇到的问题部分是因为您是直接从原始来源构建的。在这里这样做是错误的。获取Debian源码包;至少复制它的debian/
目录树;并使用它。
为什么应该使用 Debian 构建过程
正如我最近指出的https://unix.stackexchange.com/a/468218/5132,Stephen Kitt 添加了有关如何执行此操作的分步说明,从 Debian 源代码构建获得了 Debian 人们放入软件包中的所有修复程序之一,以便他们在 Debian 上工作,或者(如本例所示)只是工作而已。
之一Debian 针对原始 rxvt-unicode 源代码携带的几个补丁(您无疑会发现您在 Debian 上也需要其中的其他补丁)是一个补丁只需关闭构建 terminfo 条目来自 rxvt-unicode 附带的源代码。
当你不这样做时会发生什么
这背后有很多历史,其中一些您可以在 ncurses doco 及其超链接中找到。但为了这个答案的目的,简要说明是这样的:
rxvt-unicode 提供的 terminfo 条目有问题,您看到的是由其问题之一产生的几条构建时消息。改变引起了一阵欢呼任何事物十多年前,Marc Lehmann 声称它“已经非常准确了”。由于多年的僵局,Debian 人员等人悄悄采取的措施是,使用上述补丁完全删除 Marc Lehmann 的 terminfo 记录,然后打包使用ncurses自带的反而。
所提供的 terminfo 中与此处相关的问题是它定义了非标准功能,例如kDC5
. terminfo 数据库机制的长期已知问题之一是它具有固定的功能名称系统,如其user_caps
手册页中所述。 rxvt-unicode 提供的 terminfo 记录包含不属于此固定系统的额外功能。如果没有该-x
选项,tic
命令会抱怨此类功能。
这些非标准功能首先要解决的问题是 terminfo 的另一个长期存在的问题,即在充分表示终端如何发送输入时,它并不能真正胜任这项工作。特别是在这里,它不能作为标准表示包含键盘修饰符状态信息的击键控制序列(例如,允许将⇧+⌦与 区分开来⌦),从而需要发明这些非标准扩展。但问题还不止于此,因为它的基本模型与终端和终端仿真器在现实中的实际工作方式不同。但这超出了本答案的范围。 (您可以在延伸阅读中阅读更多内容。)
其他操作系统
人们在其他操作系统上也会遇到此错误。
FreeBSD 的人有, 例如。 FreeBSD 与 Debian 一样,在其“ports”树中包含多组纠正补丁。确实其中一个补丁就是删除 Marc Lehmann 的 terminfo 记录。
Gentoo 也悄悄做了同样的事情。这ebuild for rxvt-unicode 也删除了 Marc Lehmann 的 terminfo 记录。
OpenSUSE 在 2015 年打破了 Marc Lehmann 的 terminfo 记录。
甚至 Arch Linux 也不得不这样做解决 rxvt-unicode 的 terminfo 记录的构建+安装过程,尽管 Arch 选择不像其他人那样完全放弃它。
因此,从这些系统上的 port/ebuild/PKGBUILD 构建,而不是直接从原始源构建。
进一步阅读
- 托马斯·E·迪基 (2016)。 ”ncurses 中的 rxvt(-unicode)”。恩诅咒。
- 拉斐尔·马里切斯 (2007-09-11)。 sys-libs/ncurses 应包含 rxvt-unicode terminfo 和 USE="unicode"。 Gentoo 错误#192083。
- 托马斯·E·迪基 (1999)。
user_caps
。 文件格式手册。 ncurses。 Debian 手册页。 - https://unix.stackexchange.com/a/465308/5132
答案3
这似乎是包中的错误问题urxvt.git
。包本身已被重建。请按照本指南中的说明进行操作关联。他们提供了相同的错误消息。