大多数终端用户界面可以很容易地使用盲人用户使用。但为什么这么实际上?毕竟,终端的内容非常非结构化数据。除了颜色之外,没有额外信息的字符矩形网格。但真的是真的吗?
终端屏幕阅读器的最重要元数据实际上是光标位置。这是使令人惊讶的字符网格令人遗憾的是一个人的一个信息,这主要是限制线性读数。
终端光标充当焦点。它表示目前正在编辑或选择哪个部分屏幕。对于编辑来说,这是一个非常良好的理念。在光标是,下一个字符将插入。但是,基于文本的用户界面等于仅编辑字段。光标并不总是可见的。
久前,我看过哈克尔的砖码UI库。 When I tried its various demo programs, I noticed that my screen reader was reporting the cursor being in the lower right corner of the application when a menu item was selected.我不得不手动调查屏幕并查看属性(颜色)以弄清楚当前选择了列表中的哪个项目。在Brltty开发人员中,我们很久以前就决定了在屏幕阅读器方面不在这些问题上工作,而是尝试使用开源并在野外看到它们时解决问题。在幕后,我们修复了一堆框架和应用程序,将光标放在焦点轨迹处。所以我开始了解砖内的内部,以解决这个问题。
砖与我所知道的大多数Tui框架不同。您没有您设置为特定位置的单个光标。相反,屏幕上绘制的所有不同组件都可以声明自己的光标位置,并且组合机Mechansim最终选择应该使用哪种光标。
这一点,虽然是漂亮的灵活性,看起来对我来说根本不错。为什么?它没有反映终端的现实。
终端中没有“无光标”这样的东西。光标可能是隐藏的,因此它不会在屏幕上呈现。但是光标仍然有一个位置,它坐在,等待打印到屏幕上的下一个输出字符。无论光标都是可见还是隐藏,屏幕阅读器都将选择该位置。
因此,在修补砖块后声明一个光标在渲染某些列表项时,复选框和无线电项目,我意识到了实际缺失的位。砖没有光标可见性的概念。相反,如果组合机Mechansim没有看到光标声明,它会隐藏屏幕上的光标,并且“假装”没有。但是,正如我们上面了解到的那样,这不是真实的,类似屏幕阅读器的程序实际上依赖于光标位置来指示FUCS的轨迹。
提高这个问题与砖维护者揭示了砖块使用的低级VTY库实际终端输出的事实没有隐藏光标的概念。乔纳森在VTY 5.33中修正了这一点。
自从VTY 5.33现在在堆栈LTS中,我昨天想到了自己是时候最终增加了对砖块的隐形游标的支持。
现在有一个新的函数Putcursor,它具有与已现有的showcursor相同的类型签名,但将确保光标在屏幕上不可见。这可以并且应该用来将光标放在焦点轨迹处,即使该位置已经通过不同的属性直观地指示。
带有砖块的股票小部件现在都应该屏幕读者友好。如果您碰巧维护砖应用程序,该应用程序为渲染列表提供渲染功能,请考虑扩展它以使用ShowCursor。一旦砖0.64发布,您可以改为Putcursor以清理程序的视觉外观。