构建更易访问的GitHub CLI:终端无障碍体验革新

本文详细介绍了GitHub团队如何将Web无障碍标准应用于命令行界面,通过重新设计提示交互、优化色彩对比度和支持屏幕阅读器,让GitHub CLI成为所有开发者都能使用的工具。

在GitHub,我们致力于让所有开发者无论能力或工具偏好如何都能使用我们的工具。命令行界面(CLI)是开发者体验的重要组成部分,GitHub CLI将GitHub的强大功能带到了终端。

在无障碍方面,终端与网络浏览器或图形用户界面有着根本区别,其历史可追溯到网络本身出现之前。虽然《网络内容无障碍指南》(WCAG)等标准为网页和图形应用提供了明确的无障碍路径,但终端和CLI领域缺乏同等全面的标准。W3C为非网络软件提供了一些高级指导,但未规定具体技术,这为创新和解读留下了空间。

这一空白促使我们创造性地思考终端无障碍的实现方式。我们最近的公开预览版重点关注三个关键群体:依赖屏幕阅读器的用户、需要高背景文字对比度的用户,以及需要自定义颜色选项的用户。运行最新版GitHub CLI中的gh a11y命令即可启用这些功能。

理解终端环境

基于文本的命令行应用与图形或网络应用有着本质区别。在网页上,屏幕阅读器等辅助技术利用文档对象模型(DOM)推断页面结构和上下文。相比之下,CLI的主要输出是纯文本,没有隐藏标记。终端模拟器作为文本应用的"用户代理",按照服务器应用的指示渲染字符。辅助技术访问这个字符矩阵,分析其布局并尝试推断结构。

在改进GitHub CLI对盲人、弱视和色盲用户的可用性过程中,我们发现在这个领域有很多指导原则,但具体的实现技术却很少。我们研究了辅助技术如何与终端交互:屏幕阅读器如何审查输出、颜色和对比度如何自定义,以及如何从纯文本中推断结构线索。

重新设计屏幕阅读器的提示和进度显示

GitHub CLI作为命令行应用的一个优势是其丰富的提示体验,为用户提供了输入命令选项的交互界面。然而,这种丰富的交互体验给语音合成屏幕阅读器带来了障碍:非字母数字视觉提示和持续屏幕重绘用于视觉效果的做法很难准确转换为语音。

为了减少混淆,让盲人和弱视用户能更自信地回答问题并导航选择,我们引入了新的提示体验,使语音合成屏幕阅读器能准确向用户传达提示。我们的新提示器使用Charm的开源charmbracelet/huh提示库构建。

另一个为视觉效果而重绘终端的用例是显示进度条。我们现有的实现使用通过重绘屏幕显示不同盲文字符的"旋转器"来指示命令正在执行。语音合成屏幕阅读器对此处理不佳:

这已被静态文本进度指示器取代(在可能的情况下显示与执行操作相关的消息,否则回退到通用的"Working…“消息)。我们正在寻找其他可以改进上下文文本的领域。

颜色、对比度和自定义

颜色在终端中不仅仅是装饰:它是突出显示信息、发出错误信号和引导工作流程的重要工具。但颜色也可能成为障碍——如果终端背景颜色与显示文本之间的对比度过低,部分用户将难以辨读显示的信息。与网络浏览器不同,终端的背景颜色不是由应用程序设置的,而是由用户的终端模拟器处理。

我们用于渲染Markdown的传统调色板没有考虑终端的背景颜色,在某些情况下导致对比度不足。

颜色本身也很重要。不同的终端环境具有不同的颜色能力(有些支持4位,有些支持8位,有些支持24位等)。无论能力如何,终端都允许用户自定义颜色偏好,选择不同色调的显示方式。然而,大多数终端仅支持更改有限子集的颜色:即ANSI 4位颜色表中的十六种颜色。GitHub CLI已大力调整我们的调色板以匹配4位颜色,使用户可以使用终端偏好完全自定义他们的体验。

为CLI社区构建

我们的改进旨在支持广泛的开发者需求,从需要屏幕阅读器的盲人用户,到需要高对比度的弱视用户,再到需要可自定义颜色选项的色盲用户。但这次公开预览并不标志着我们团队对让所有开发者都能使用GitHub CLI的承诺的结束。

我们打算让扩展作者更容易实现我们对核心CLI所做的相同无障碍改进。这将使用户在所有GitHub CLI命令(无论是官方还是社区维护的)中获得一致的体验,从而使更多工作流程默认具有无障碍性。我们还在研究如何自定义命令输出的表格格式,使其更易于屏幕阅读器读取/解释。我们很高兴继续我们的无障碍之旅。

征集反馈

我们邀请您帮助我们实现让GitHub CLI成为所有开发者都能使用的体验的目标:

  • 尝试使用:将GitHub CLI更新到v2.72.0,并在终端中运行gh a11y以了解如何启用这些新的无障碍功能。
  • 分享您的体验:加入我们的GitHub CLI无障碍讨论以提供反馈或建议。
  • 与我们联系:如果您有与我们无障碍角色相关的实际经验,请联系无障碍团队或参与我们的讨论小组。

展望未来

为命令行调整无障碍标准既是挑战,也是机遇。我们致力于分享我们的方法,向社区学习,并帮助为无障碍CLI工具设定新标准。

感谢您与我们一起构建更易访问的GitHub。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计