要打印出包括terminfo手册页中每个capname的简短描述的terminfo条目(例如,对于我当前的终端: xterm-256color),最直接的方法是什么?
我知道如何使用以下命令打印出我的终端的terminfo条目(每行一个capname ):
infocmp -1生成:
# Reconstructed via infocmp from file: /usr/share/terminfo/78/xterm-256color
xterm-256color|xterm with 256 colors,
am,
bce,
ccc,
km,
mc5i
Etc.我可以在terminfo手册页中手动查找每个capname的描述(例如,ccc表示“终端可以重新定义现有的颜色”),但是有没有一种方法可以显示每个capname的描述,而不必手动查找每个capname?
所以,举个例子,我希望看到这样的东西:
xterm-256color|xterm with 256 colors
am terminal has automatic margins
bce screen erased with background color
ccc terminal can redefine existing colors
km Has a meta key (i.e., sets 8th bit)
mc5i printer will not echo on screen
Etc.infocmp的输出始终是有分隔符的,并且相对容易解析,但是在terminfo手册页上列出的终端功能的表,以及跨越多行的不同列宽和capname描述,则不是这样的。如果是这样的话,生成我描述的输出会更简单。也许还有另一种来源可以替代terminfo手册页中的内容,它在编程上更易于操作?
我正在运行GNU bash,版本4.4.23(1)-release (x86_64-apple-darwin18.0.0)。
发布于 2018-12-21 05:55:09
可能不会。实际上,manual page和其他文件是使用scripts从data file构造的,但这不是安装的。
因为它是生成的,所以您可以编写一个脚本来提取信息,尽管您会发现像bash脚本(perl yes,awk yes,sed...maybe)这样做很有挑战性。下面是一小段文本(安装在您的系统上):
.TS H
center expand;
c l l c
c l l c
lw25 lw6 lw2 lw20.
\fBVariable Cap- TCap Description\fR
\fBBooleans name Code\fR
auto_left_margin bw bw T{
cub1 wraps from column 0 to last column
T}
auto_right_margin am am T{
terminal has automatic margins
T}
back_color_erase bce ut T{
screen erased with background color
T}
can_change ccc cc 您始终可以使用infocmp,列出长名称,如果顺序与(默认)短名称相同,则可以组合它们。但是长名称的列表是按字母顺序排序的(布尔值、数字和字符串的分组,就像短名称一样),而短名称默认情况下是排序的,以匹配SVr4 terminfo数据。您可能会看到如下所示:
xterm-256color|xterm with 256 colors
am auto_right_margin
bce back_color_erase
ccc backspaces_with_bs
km can_change
mc5i eat_newline_glitch
mir has_meta_key
msgr move_insert_mode
npc move_standout_mode
xenl no_pad_char
colors prtr_silent
cols columns
it init_tabs
lines lines
pairs max_colors
acsc max_pairs
bel acs_chars
blink back_tab
bold bell实际上,ncurses有一个允许对名称进行排序的选项,因此您可以使用-sl选项(几乎)匹配右列的顺序。您可能会看到如下所示:
xterm-256color|xterm with 256 colors
am auto_right_margin
bce back_color_erase
ccc backspaces_with_bs
xenl can_change
km eat_newline_glitch
mir has_meta_key
msgr move_insert_mode
npc move_standout_mode
mc5i no_pad_char
cols prtr_silent
it columns
lines init_tabs
colors lines
pairs max_colors
acsc max_pairs
cbt acs_chars
bel back_tab
cr bell这是“几乎”,因为列不会将xenl与eat_newline_glitch对齐,因为ncurses有一个通常不会显示的backspaces_with_bs的内部名称。对ncurses源代码进行更改以显示以下内容:
xterm-256color|xterm with 256 colors
am auto_right_margin
bce back_color_erase
OTbs backspaces_with_bs
ccc can_change
xenl eat_newline_glitch下面是我用来生成示例的perl脚本:
#!/usr/bin/env perl
# $Id: infocmp2col,v 1.1 2018/12/20 22:35:57 tom Exp $
use strict;
use warnings;
sub infocmp($$) {
my $term = shift;
my $opts = shift;
my @data;
if ( open FP, "infocmp -1 $opts $term |" ) {
@data = <FP>;
close FP;
for my $n ( 0 .. $#data ) {
chomp $data[$n];
$data[$n] =~ s/,\s*$//;
$data[$n] =~ s/[#=].*//;
}
}
return \@data;
}
sub doit($) {
my $term = shift;
my @short_term = @{ &infocmp( $term, "-sl" ) };
my @long_term = @{ &infocmp( $term, "-L" ) };
for my $n ( 0 .. $#short_term ) {
if ( $short_term[$n] =~ /^\s/ ) {
printf "%s%s\n", $short_term[$n], $long_term[$n];
}
else {
printf "%s\n", $short_term[$n];
}
}
}
if ( $#ARGV >= 0 ) {
while ( $#ARGV >= 0 ) {
&doit( pop @ARGV );
}
}
else {
&doit( $ENV{TERM} );
}
1;我提到的次要修复是在ncurse6.2中(请参阅changes),所以这对大多数用户“应该是有效的”。
https://stackoverflow.com/questions/53863396
复制相似问题