為什麼 macOS 上的 screen 不接收我的 ~/.terminfo?
我想讓我的終端(rxvt-unicode)工作的Terminfo,這樣當我從 Linux SSH 到 macOS 時,Home/End 和其他鍵工作正常。
通常,為了使用 Linux 遠端主機完成此操作,我使用如下腳本:
ssh "$1" 'mkdir -p ~/.terminfo/r' for f in /usr/share/terminfo/r/rxvt-unicode{,-256color} do scp "$f" "$1":.terminfo/r/ done
但是,這不適用於 macOS。
當我跑步時
screen
,首先我得到“TERM too long - sorry.”。將其更新到 brew 版本 (4.06.02) 後,我現在收到“找不到 ‘rxvt-unicode-256color’ 的 terminfo 條目”。
TERM
正確設置為rxvt-unicode-256color
,並且~/.terminfo/r/rxvt-unicode-256color
存在。執行
screen
withTERMINFO=$HOME/.terminfo/
也沒有效果。
ncurses對文件系統(例如 MacOS 和 OS/2)使用2 個字元,其中文件名保留大小寫/不區分大小寫。這記錄在**
NEWS
**文件中。順便說一句,Apple 提供了一個舊版本的 ncurses (5.7),它對於這個功能來說仍然足夠新。攜帶式應用程序不應依賴於終端數據庫的任何特定組織……
順便說一句,xterm-256color 的目前 terminfo 條目不適用於舊的 ncurses 5.7 基本系統,因為顏色對值超出了限制。對 rxvt-unicode 的影響取決於源的構造方式。常見問題解答中提到了這一點:
ncurses 6.1引入了對大量功能的支持,例如,超過 32767 種顏色對。其他實現通常將超出範圍的值視為零。
執行(如macOS)揭示了以下內容
screen
:dtruss``strace
2131/0x12997: access("/Users/vladimir/.terminfo/72/rxvt-unicode-256color\0", 0x4, 0x7FFF5F2B56EC) = -1 Err#2
無論出於何種原因,
screen
使用第一個字母的十六進製表示而不是簡單的第一個字母來展開terminfo
目錄結構。所以,要修復它,我必須執行:
ln -s r ~/.terminfo/72
現在一切似乎都正常了。