Skip to content

Latest commit

 

History

History
50 lines (44 loc) · 3.04 KB

accessibility.md

File metadata and controls

50 lines (44 loc) · 3.04 KB

Reading it without seeing it

io --plain runs the session without animation: nothing turns, nothing moves, the ASCII glyph set is forced, and each state the session enters — working, ready — is committed into the terminal's own scrollback as a line of text. In the default interface that one state is carried by a word that only ever repaints and an indicator that only ever moves, which makes it the single thing a reader who cannot see the viewport cannot follow; everything else a run does already writes a line. For a screen reader, a braille display, a serial console and a captured log.

The flag is global, so io --plain, io --plain exec "…" and io exec --plain "…" are all accepted. [app.io-cli] plain = true is the same switch for every session. The flag wins over the file, and there is deliberately no --no-plain: accessibility is something switched on on purpose, and a mode that can be lost to a stray flag is not one to rely on. It reaches an interactive session and stops there — io exec constructs no theme, draws nothing and animates nothing already.

Four properties this product keeps, whether or not that flag is set:

  • Colour is never the only thing carrying a meaning. Every refusal, error and warning also carries a word, a diff's additions and removals are marked as well as coloured, and an approval says what is being asked for in words before it says it in colour. NO_COLOR is honoured on presence, whatever its value, and now survives the first-run wizard and /theme: choosing a theme with the variable set records the preference and leaves the session uncoloured, and says so.
  • Every mark has an ASCII form. The separator, the tool bullet, the selection marker, the ellipsis, the elision, the dash, the transcript rule, the quotes, the credential mask and the working indicator each exist in two sets, and each ASCII form carries its counterpart's meaning rather than merely standing in the same column. [app.io-cli] glyphs names a set — unicode or ascii — and an absent key asks the locale: LC_ALL, then LC_CTYPE, then LANG, the first one present deciding. The set is an axis of its own, in both directions: NO_COLOR keeps the Unicode marks, and the ASCII set arrives at a fully coloured theme. The IO CLI wordmark is the one exception, and it is suppressed rather than transliterated — a wordmark redrawn in # is a different and worse image wearing its name.
  • The cursor sits where input is expected, on every frame that accepts any: the composer, including at a width too narrow to draw it; the approval overlay; the selected row of a picker; and every step of the wizard. It is the focus indicator a screen reader follows, and a frame that leaves it hidden reports no focus at all.
  • A frame whose content did not change is not drawn. An idle session writes no bytes to the terminal, so nothing announces itself twice for having merely repainted.

README · All guides · What you may depend on