Terminfo

Terminfo 用於向軟體告知終端機的能力。 Ghostty 自帶自己的 terminfo 條目來宣傳其功能。

Terminfo 是一種古老的資料格式,很多終端機 應用程式仍在用它來判定終端機 的能力。Ghostty 自帶自己的 terminfo 條目來對外宣傳 其功能。

Ghostty 使用 TERM 值 xterm-ghostty。

Note

為什麼要帶 xterm 前綴? 不幸的是,許多終端機應用程式會 在 TERM 值中搜索字串 "xterm" 來推斷功能。在私有測試期間,我們 試過純 ghostty 值,但發現太多應用程式掛掉,修復整個生態也不現實。 我們最終選擇 xterm-ghostty 以維持相容性。

Ghostty 的套件內建了 terminfo 條目,並會設定相應的檔案系統 佈局或環境變數,使其可供系統使用。當你在執行 Ghostty 時,只要偵測到 terminfo 條目 可用,它就會自動把 TERM 環境變數設為 xterm-ghostty。

Important

Ghostty 的 terminfo 條目已包含在 ncurses 6.5-20241228 及更高版本中。 隨著發行版更新其 ncurses 套件,Ghostty 的 terminfo 條目將預設在系統範圍內 可用。這一點還需要時間傳播。

Sudo

如果你使用 sudo,sudo 可能會重置你的環境變數,導致 某些程式執行時看到 missing or unsuitable terminal: xterm-ghostty 或 'xterm-ghostty': unknown terminal type. 的錯誤。

要解決此問題,你必須設定 sudo 保留 TERMINFO 環境變數,或者你可以使用 shell-integration 並指定 sudo 功能,Ghostty 會把 sudo 別名化,自動為你處理。要啟用 shell-integration 特定功能,你得在設定中指定 shell-integration-features = sudo。

更多資訊請看 shell-integration-features 關於此配置選項的說明。

SSH

如果你透過 SSH 連線到沒有 Ghostty terminfo 條目 的機器,你將看到諸如 missing or unsuitable terminal: xterm-ghostty, Error opening terminal: xterm-ghostty. 或 WARNING: terminal is not fully functional 的錯誤訊息。

希望未來某天 Ghostty 的 terminfo 條目會被各處預先發布,但在那之前, 有兩種方法可以使情況得到解決:

方法 1:把 Ghostty 的 terminfo 條目複製到遠端機器

  1. 在本機上,執行以下單行命令:
    infocmp -x xterm-ghostty | ssh YOUR-SERVER -- tic -x -
    
  2. 在伺服器上,確認設定已保存到 /usr/share/terminfo/...。 如果沒有,檢查 $HOME/.terminfo/... 並把它搬過去。

伺服器上的 tic 命令可能會給出 “<stdin>”,第 2 行、第 31 欄,終端機 'xterm-ghostty':較舊的 tic 版本可能把描述 欄位當成別名 的警告,可以安全忽略。

tic 通常會把結果放到系統資料庫 /usr/share/terminfo 中。 該位置可透過 TERMINFO 環境變數覆寫。 如果 TERMINFO 未設定,且 tic 無法寫入系統位置,則 若 $HOME/.terminfo 存在,它會把結果放到那裡。 若發生這種情況,請參閱 man tic 了解詳情。

Note

macOS Sonoma 之前的版本無法使用系統自帶的 infocmp。 內建的 ncurses 版本過舊,無法產生能被更新版本的 tic 讀取的 terminfo 條目,命令會因一堆 Illegal character 訊息而失敗。你可以用 Homebrew 以 brew install ncurses 安裝新版的 ncurses,並把上面的 infocmp 替換為完整路徑 /opt/homebrew/opt/ncurses/bin/infocmp 或 /usr/local/opt/ncurses/bin/infocmp 來解決。

方法 2:設定 SSH 以回退到已知的 terminfo 條目

  1. 在本機上,新增下列 SSH 設定 (需要 OpenSSH 8.7 或 更新版本):
    # .ssh/config
    Host example.com
      SetEnv TERM=xterm-256color
    

Ghostty 可以把這兩種方式都自動化。請見 SSH 了解 ghostty +ssh CLI 動作以及 ssh-env / ssh-terminfo shell integration 功能的詳情,包括這些自動化在何時生效的幾個 重要限制。

Warning

回退不支援進階終端機功能。 由於 xterm-256color 並不包含 Ghostty 的所有能力, 超出 xterm 的終端機功能(例如帶顏色和樣式的底線)將無法運作。