的输出tput ed
是空的,我不明白为什么。其他功能运行良好。输出中也ed
没有丢失,infocmp
所以 tput 应该匹配,对吗?
$ printf '%q' "$(tput ed)"
''
$ printf '%q' "$(tput home)"
$'\033'\[H
我在 Mac OS 10.14.6 和 iTerm2 上使用 zsh。术语=xterm-256color。
答案1
Apple 为 ncurses 配置了 termcap 支持(除了默认的 terminfo 之外):
- 配置状态显示配置选项的文件。
- infocmp 调用_nc_read_file_entry来获取它的数据。
- tput 调用设置项,这将转到
_nc_read_entry
,这称为_nc_read_tic_entry
,这确实调用了_nc_read_file_entry
- 如果有问题
_nc_read_tic_entry
, 然后_nc_read_entry
回落到 termcap 支持(参见read_entry.c
)。
由于这是十年前的代码,_nc_read_tic_entry 中可能存在的问题可能已经在不久前得到修复。
例如,我安装了 MacPorts,并且可以正常工作,而 Apple 的版本却不能。这是我用来调查问题的顶级脚本:
#!/bin/sh
unset TERMINFO
unset TERMINFO_DIRS
export TERM=xterm-256color
#export PATH=/usr/bin:$PATH
echo TERMCAP
infocmp -CrTt1 | grep -E ':..=.*:' | sed -e 's/^ ://' -e 's/=.*//' | xargs -n 1 /tmp/test-tput
echo TERMINFO
infocmp -1 | grep -E '^ .*=.*,' | sed -e 's/^ //' -e 's/=.*//' | xargs -n 1 /tmp/test-tput
(注释/取消注释PATH
以在两者之间进行选择),这称为第二个脚本/tmp/test-tput
显示值:
#!/bin/bash
tput "$1" >/dev/null 2>/dev/null || exit
echo -n "CAP:$1 "
tput "$1" 2>/dev/null
echo
ncurses 5.7 中的行为是在1999年
+ modify tput to accept termcap names as an alternative to terminfo
names (patch by Jeffrey C Honig).
并固定在2009年:
+ change order of lookup in progs/tput.c, looking for terminfo data
first. This fixes a confusion between termcap "sg" and terminfo
"sgr" or "sgr0", originally from 990123 changes, but exposed by
20091114 fixes for hashing. With this change, only "dl" and "ed" are
ambiguous (Mandriva #56272).
苹果ncurses 5.7比该修复早了大约一年。
答案2
经过更多的谷歌搜索和搜索文档(主要是 terminfo),我终于发现我需要回退到旧的术语帽代码自上限名称并非所有 terminfo 功能都支持。
ed=$(tput ed || tput cd)