Tput
tput ed 為空
的輸出
tput ed
是空的,我不知道為什麼。其他功能工作正常。輸出中也ed
沒有失去,infocmp
所以 tput 應該匹配,對吧?$ printf '%q' "$(tput ed)" ''
$ printf '%q' "$(tput home)" $'\033'\[H
我在 Mac OS 10.14.6 和 iTerm2 上使用 zsh。期限=xterm-256color。
更多地搜尋和搜尋文件(主要是 terminfo),我終於發現我需要回退到舊的termcap程式碼,因為所有 terminfo 功能都不支持capname 。
ed=$(tput ed || tput cd)
Apple 為 ncurses 配置了 termcap 支持(除了預設的 terminfo):
- config.status文件顯示配置選項。
- infocmp 呼叫_nc_read_file_entry來獲取其數據。
- tput 呼叫setupterm,然後轉到**
_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
+ 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).
Apple 的ncurses 5.7比該修復程序早了大約一年。