Whetuu:零設定跨 Shell 提示字元(使用 Zig 編寫)
Whetuu:零設定跨 Shell 提示字元(使用 Zig 編寫)
Whetuu 是一個零設定、跨 Shell 的提示字元,使用 Zig 編寫,旨在提供高效能且最小化設定需求。它提供動態提示,追蹤 Git 狀態、工具鏈版本與指令執行時間,並整合一個由上方向鍵觸發的目錄感知歷史挑選器。
高效能提示字元渲染
Whetuu 在標準環境下的渲染時間約為 2 毫秒,確保 Shell 保持回應迅速。為了達成此速度,所有讀取磁碟的模組皆透過 std.Io 並行執行,意味著總渲染時間受限於最慢的單一探測,而非所有探測的總和。
在第 13 代 i9-13900H(ReleaseFast)上的效能基準顯示:
- 無儲存庫,無工具鏈: 2.3 ms
- Zig 儲存庫(35 檔案): 3.0 ms
- 單一儲存庫(8,259 檔案): 20.2 ms
為防止緩慢的儲存庫卡住 Shell,Whetuu 實作了嚴格的逾時機制。Git 子行程的上限為 250 毫秒,工具鏈探測的上限為 200 毫秒。若某個程序超過此限制,Whetuu 只會直接省略提示字元中對應的段落。
整合目錄感知歷史挑選器
Whetuu 用互動式挑選器取代標準的上方向鍵歷史行為。此挑選器預設僅限於目前目錄,僅在找不到目錄特定指令時才回退至全域歷史。
歷史挑選器的主要功能包括:
- 乾淨的歷史: 僅記錄正常結束的指令,避免錯字佔滿清單。
- 隱私保護: 以空格開頭的指令永不被記錄。
- 語法高亮: 指令會依終端主題著色,過長的指令會在中間截斷,以保留唯一的前綴與後綴。
- 導覽: 使用者可透過輸入(不分大小寫)過濾,使用
Ctrl+G在目錄與全域歷史間切換,並使用Tab編輯選取項目,最後以Enter執行。
動態提示字元模組
提示字元僅在與當前情境相關時顯示相應段落:
- 使用者/主機: 透過 SSH 時以粗體綠色顯示,若為 root 則以粗體紅色警示。
- 目錄: 顯示目前目錄,將
$HOME縮寫為~,固定路徑起點並盡可能容納更多後續目錄。 - Git 分支: 以洋紅色顯示分支名稱或
(detached)。 - Git 狀態: 以黃色顯示正在進行的操作,如 rebase、merge 或 cherry-pick。此資訊直接從
.git讀取,無需產生子行程。 - Git 狀態摘要: 將衝突、暫存、已暫存、已修改、未追蹤以及 ahead/behind 狀態彙總於單一方括號內。
- 語言偵測: 顯示 39 種不同語言與工具的圖示與版本,透過專案清單、來源檔案副檔名或基礎標記偵測。
- 語言品牌化: 提示字元(星號)的顏色會採用偵測到的語言品牌色。
- 指令執行時間: 若前一指令執行時間超過兩秒,會顯示計時圖示與經過時間。
安全性與資料隱私
Whetuu 採用「資料不離開你的機器」的理念設計。它不包含任何網路 socket、HTTP 客戶端、遙測或更新檢查。
資料管理遵循以下原則:
- 儲存: Whetuu 僅寫入兩個檔案:歷史儲存(模式 600)與位於
~/.cache/whetuu/versions的工具鏈版本快取。兩者皆遵循 XDG 基礎目錄規範。 - Shell 整合: 安裝程式會在使用中的 Shell(
$SHELL)設定檔中追加兩行,除此之外不做其他變更。 - 輸入安全: 分支名稱或目錄中的控制位元會被轉換為
?,以防止終端跳脫序列攻擊。 - 執行: Whetuu 以固定參數執行
git與工具鏈探測的子行程,確保使用者輸入永不被當作指令執行。
安裝與需求
Whetuu 需要 Nerd Font 來顯示 Git 分支、語言圖示與提示字元所使用的字形。若未安裝 Nerd Font,這些元素會顯示為空白方框。
安裝透過單一指令完成:
curl --proto '=https' --tlsv1.2 -fsSL https://yamafaktory.github.io/whetuu/install.sh | sh
若使用者偏好手動設定,可使用 WHETUU_NO_MODIFY=1 執行安裝程式,讓其僅列印所需的設定行,而不會修改點檔。
社群回饋
雖然因效能與歷史挑選器受到讚揚,但仍有使用者對此工具的主觀性與安裝方式表示關切:
"我不希望我的提示字元也處理 Shell 歷史… 請不要在我的 $HOME 中建立目錄。"
其他使用者質疑直接將腳本透過管道送入 Shell 的安裝方式,這在安全社群中是一個常見的爭議點:
"請不要再把腳本直接 pipe 到 bash 或 sh。應強迫使用者使用編輯器,閱讀安裝腳本,並告訴他們如何執行。"
關於詞源,有使用者指出此名稱來源於毛利語,其中「wh」發音為「f」音(FEH-too),而「ū」上的長音符號表示元音為長音。
SUMMARY:
Whetuu 是一款高效能、零設定的跨 Shell 提示字元,使用 Zig 編寫,具備整合的歷史挑選器與針對 39 種語言的自動工具鏈偵測功能。
TITLE:
Whetuu:零設定跨 Shell 提示字元(使用 Zig 編寫)