gdamore/tcell

GitHub: gdamore/tcell

Tcell 是一个纯 Go 实现的终端 UI 库,为文本终端应用提供基于单元格的视图渲染和丰富的输入处理能力。

Stars: 5203 | Forks: 364

# Tcell _Tcell_ 是一个 _Go_ 包,为文本终端(如 _XTerm_)提供基于单元格的视图。 它的灵感来源于 _termbox_,但包含了许多额外的改进。 ## 教程 这里提供了一份简短但仍有些粗糙的[教程](TUTORIAL.md)。 ## 示例 我们的[画廊](https://github.com/gdamore/tcell/wikis/Gallery/)中展示了许多示例。 那是一个 wiki,如果您有想要展示的内容,请务必提交更新。 在 `./demos` 目录以及 `./_demos` 中也有一些演示程序。 ## 更高的可移植性 _Tcell_ 可移植到各种不同的系统,并且是纯 Go 实现的,完全不需要 CGO。 _Tcell_ 支持由 golang 官方支持的主流系统。 遵循 Go 的支持政策,_Tcell_ 官方仅支持当前(“stable”)版本的 Go,以及紧接其前的(“oldstable”)版本。这项政策是必要的,以确保我们能够更新依赖项以获取安全修复和新功能,同时允许我们采用仅在较新版本的 Go 中支持的更改(例如库和语言特性)。 ## 丰富的 Unicode 与非 Unicode 支持 如果您的终端支持,_Tcell_ 提供对 Unicode 的增强支持,包括宽字符和字素簇。 它还可以在 Unicode locale 之间进行转换,以便程序在内部使用 UTF-8 进行处理,并在其他 locale 下获得合理的输出。 _Tcell_ 在输入和输出时都会尽力转换为本地原生字符。 在输出时,_Tcell_ 甚至会利用备用字符集来辅助绘制某些特定字符。 ## 更好的键盘支持 _Tcell_ 还更全面地支持某些终端可以发送的大量特殊键。在现代终端模拟器上,我们还可以支持丰富的修饰键组合,并且能够区分 CTRL-I 和 TAB 等按键。(这确实需要终端模拟器支持现代键盘协议之一。) ## 更好的鼠标支持 _Tcell_ 支持增强的鼠标跟踪模式,因此如果您的终端支持,您的应用程序可以接收常规的鼠标移动事件、点击拖拽以及滚轮事件。 ## 处理 Unicode 和 Go 一样,_Tcell_ 内部使用 UTF-8。 但是,_Tcell_ 了解如何利用 `golang.org/x/text/encoding` 包的功能,在其他字符集之间进行转换。 您的应用程序必须自行提供它们,因为包含最常见字符集的完整集合会使程序膨胀约 2 MB。 如果您不想麻烦,并且想要包含所有字符集,请参阅 `encoding` 子目录。 ## 宽字符与组合字符 `Put()` API 接受一个合法的 UTF-8 字符串,并显示其中的第一个字素簇(可能由多个 rune 组成)。 它返回实际显示的宽度,可用于推进下一个显示字素的列位置。或者,您可以使用 `PutStr()` 或 `PutStrStyled()` 来显示单行文本(将在屏幕边缘被裁剪)。 如果在紧邻宽字符的单元格中直接显示第二个字符(偏移量为 1 而不是 2),则结果是未定义的。 ## 颜色 _Tcell_ 采用 ANSI/XTerm 调色板以支持多达 256 种颜色,尽管诸如旧版 ANSI 终端等可能仅支持 8 种颜色。 ## 24 位色 _Tcell_ _支持 24 位色!_(当然,前提是您的终端支持。) 有几种方法可以启用(或禁用)24 位色。 - 您可以通过将 `COLORTERM` 环境变量设置为 `truecolor` 来强制启用。支持 24 位色的终端模拟器通常会设置此环境变量。 - 在 Windows 上,默认假定支持 24 位色。(所有现代 Windows 终端模拟器均支持此功能。) - 如果您将 `TERM` 环境变量设置为带有 `-truecolor` 或 `-direct` 后缀的值,则会假定采用与 XTerm 和 ECMA-48 兼容的 24 位色。 - 您可以通过在环境中设置 `TCELL_TRUECOLOR=disable` 来禁用 24 位色。 使用 24 位色时,程序将显示程序员预期的颜色,从而覆盖用户可能在其终端模拟器中设置的任何“`themes`”。(在某些情况下,精确的色彩保真度比遵循主题更重要。而在其他情况下,例如仅使用少数颜色的典型文本应用程序,遵循用户设置的主题则更为理想。) ## 终端覆盖设置 _Tcell_ 通常会自动协商终端功能,但某些终端模拟器对这些查询的响应不正确。当自动检测路径不可靠时,这些环境变量为用户提供了手动干预的手段: - `TCELL_KEYBOARD_PROTOCOL=auto|legacy|kitty|win32|xterm` 强制指定键盘报告协议。 - `TCELL_NEGOTIATE=auto|disable` 在终端响应本身存在问题时,禁用启动时的功能协商。 - `TCELL_MOUSE=auto|disable` 阻止应用程序启用终端鼠标报告。 应用程序也可以选择使用 `OptKeyboardProtocol` 指定键盘协议,或使用 `OptNegotiation` 禁用启动协商。环境变量具有优先权,因此用户可以在不修改应用程序的情况下摆脱终端行为异常的困扰。 ## 性能 我们已经进行了合理的尝试,以尽量减少向终端发送的数据量,避免重复的序列或在刷新更新时重复绘制同一个单元格。 ## 鼠标支持 在大多数终端模拟器以及 Windows 上,均支持鼠标跟踪、鼠标按键,甚至是滚轮鼠标。 ## 括号粘贴 支持此功能的终端可以使用括号粘贴。 详情请参阅 `EnablePaste()`。 ## v3 版本中的破坏性变更 _Tcell_ 版本 3 中有许多更改,这些更改破坏了与版本 2 和版本 1 的兼容性。 您的应用程序几乎肯定需要进行一些微小的更新才能在版本 3 上运行。 请查阅 [CHANGESv3](CHANGESv3.md) 文档以获取列表。 ## 平台 ### POSIX (Linux, FreeBSD, macOS, Solaris 等) 在主流平台上,所有功能均使用纯 Go 实现。 对于冷门平台(例如 zOS 或 AIX),我们仅在力所能及的范围内提供支持。欢迎提交 Pull Request 来修复发现的任何问题! ### Windows 支持现代 Windows 系统。请参阅 [README-windows](README-windows.md) 文档以获取更详细的信息。 ### WASM 支持 WASM,但需要进行 [README-wasm](README-wasm.md) 中详述的额外设置。 ### Plan 9 我们对 Plan 9 提供力所能及的支持。请参阅 [README-plan9](README-plan9.md) 文档以获取更多信息。 ### 商业支持 _Tcell_ 是完全免费的,但如果您想获得商业、专业的支持,有以下几种选择: - [TideLift](https://tidelift.com/) 订阅包含对 _Tcell_ 以及许多其他开源包的支持。 - [Staysail Systems Inc.](mailto:info@staysail.tech) 按小时提供直接支持以及围绕 _Tcell_ 的定制开发。
标签:EVTX分析, Go, Ruby工具, TUI, 开发库, 日志审计, 终端UI