命令列工具
crossterm-rs/crossterm avatar
crossterm-rs/crossterm

Crossterm:一個純 Rust 的終端操作函式庫

跨平台終端庫 Rust。它支援所有 UNIX 和 Windows 終端,直至 Windows 7(並非所有終端都經過測試,有關詳細信息,請參閱測試的終端)。

4,216 個 Star418 個 ForkRustMIT
GitHub

秒懂

它是什麼?
用於文字介面開發的跨平台 crate,支援游標、樣式、終端和事件處理。
適合誰用?
Crossterm 是一個 MIT 授權的 Rust crate,用於終端操作,涵蓋游標控制、樣式輸出、終端操作和事件處理,並有文件化的功能旗標系統和簡短的已知使用者清單。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 2 天前。
用什麼語言寫的?
主要是 Rust(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

跨 UNIX 與 Windows 的終端操作

Crossterm 的 README 將其描述為一個純 Rust 的終端操作函式庫,旨在編寫跨平台的文字介面。它支援所有 UNIX 終端以及 Windows 7 及以上的 Windows 終端,但 README 明確說明並非所有終端都經過測試,並列出已測試的終端供參考。該函式庫用 Rust 編寫,以 crate 形式發佈。

功能分區

README 將函式庫的能力分為四類。游標操作涵蓋按次數移動(上、下、左、右)、移至上一行或下一行、移至指定欄、取得和設定游標位置、儲存和還原位置、隱藏和顯示游標,以及啟用或停用游標閃爍,並註明並非所有終端都支援閃爍。樣式輸出包括 16 種基礎顏色的前景和背景色、Windows 10 和 UNIX 上的 256 種 ANSI 顏色及 RGB 顏色,以及粗體、斜體、底線、刪除線等文字屬性。終端操作包括清除畫面(全部、目前行、從游標向下或向上、直到換行)、捲動、取得和設定終端大小、退出目前程序、備用螢幕、原始螢幕、設定標題、切換自動換行。事件處理涵蓋輸入事件、滑鼠按下/釋放/位置/按鈕/拖曳、終端尺寸變化、Shift、Alt、Ctrl 修飾鍵,以及 event-stream 功能下的 futures 串流和 poll/read API。

已測試的終端

README 包含一份已測試終端的清單:Windows 10 和 8.1 上的 Console Host,Windows 10 和 11 上的 Windows Terminal,Ubuntu 23.04、17.10 及 Pop!_OS 20.04 上的 GNOME Terminal,Arch 和 Manjaro 上的 KDE Konsole,Arch 和 NixOS 上的 Kitty,OpenSuse 上的 Alacritty,Chrome OS 上的 Crostini,以及 macOS Monterey 和 Sonoma(Intel 和 Apple Silicon)。清單並非窮盡,README 邀請使用者在無問題的情況下新增其他終端。

快速上手

README 的快速上手部分展示了 Cargo.toml 依賴行 `crossterm = "0.27"` 和一個 Rust 範例,範例使用 `execute!` 巨集和 `ExecutableCommand` trait 來設定前景色和背景色、列印樣式文字並重設顏色。範例還從 style 模組匯入了 `Color`、`Print`、`ResetColor`、`SetBackgroundColor` 和 `SetForegroundColor`。README 指向 docs.rs 的 API 文件以取得完整的支援命令清單。

功能旗標與依賴選擇

README 記錄了多個功能旗標。`event-stream` 啟用產生 `Result<Event>` 的 futures 串流,`serde` 啟用事件序列化,`events`(預設啟用)控制讀取輸入和系統事件,`filedescriptor` 使用原始檔案描述元處理事件而非 mio 依賴,`derive-more` 為事件類型新增 `is_*` 輔助函式,`osc52` 啟用 `crossterm::clipboard` 模組。依賴理由表列出了 bitflags、parking_lot、libc、mio、signal-hook、winapi、futures-core、serde、derive_more 和 base64,並註明哪些是可選的。README 建議停用 `events` 或使用 `filedescriptor` 可移除 mio 和 signal-hook 依賴。

列出的使用專案

README 的 'Used By' 部分列出了五個專案:Broot、Cursive、Ratatui、Rust-sloth 和 Rusty-rain。它沒有說明這些專案如何使用 crossterm 或建構何種介面,僅作為實際使用案例的提示。

貢獻、作者與授權

README 歡迎貢獻,並引導貢獻者閱讀 docs/CONTRIBUTING.md 取得指南。唯一署名的作者是 Timon Post,被標記為專案所有者和建立者。該專案及其所有子 crate 均採用 MIT 授權。授權文字授予使用、複製、修改、合併、出版、散佈、再授權和出售軟體副本的權限,並宣告軟體按「現況」提供,不附帶任何明示或默示的擔保。

crossterm 的使用邊界與核驗路徑

採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。

編輯結論

Crossterm 是一個 MIT 授權的 Rust crate,用於終端操作,涵蓋游標控制、樣式輸出、終端操作和事件處理,並有文件化的功能旗標系統和簡短的已知使用者清單。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。 採用前可在 Cargo.toml 先只加入 crossterm = "0.27",執行範例中的 execute! 與 ExecutableCommand,觀察 stdout 的色彩重設、游標和終端尺寸行為;需要非同步事件時再單獨打開 event-stream,並檢查目標終端是否落在 README 的測試清單內。

官方來源

  1. Official README
  2. Project repository
  3. Release notes
社群筆記

社群筆記