microsoft / cascadia-code

This is a fun, new monospaced font that includes programming ligatures and is designed to enhance the modern look and feel of the Windows Terminal.
Other
25.11k stars 796 forks source link

Alternate Braille glyphs optimized for pseudographics use #647

Closed PhMajerus closed 5 months ago

PhMajerus commented 1 year ago

Introduction and concepts

Some characters are designed especially for pseudographics, such as the old ▄ ▀ █ (as well as ▌ ▐ ░ ▒ ▓), already found in IBM PC / MS-DOS. These are often referred to as half blocks as they can be used to treat each character cell as 2 pseudo-pixels (or a 1×2 grid).

Others have been inherited from the PET / Commodore 64 and other 8-bit era computers, splitting each cell in 4 pseudo-pixels (or a 2×2 grid): ▖ ▘ ▌ ▗ ▄ ▚ ▙ ▝ ▞ ▀ ▛ ▐ ▟ ▜ █.

A higher grid density has been inherited from TRS-80 and Teletext, and now added to the Unicode Symbols for Legacy Computing, supporting 6 pseudo-pixels (or a 2×3 grid): image These are not yet supported, but are in other feature requests: https://github.com/microsoft/cascadia-code/issues/597 and https://github.com/microsoft/cascadia-code/issues/607

The next grid density of pseudo-pixels would be a 2×4 grid, and it sort of exists, as the Braille characters are basically that, but with discrete dots instead of a no-gap pixels-like grid: ⠀⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏⠐⠑⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜⠝⠞⠟⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿⡀⡁⡂⡃⡄⡅⡆⡇⡈⡉⡊⡋⡌⡍⡎⡏⡐⡑⡒⡓⡔⡕⡖⡗⡘⡙⡚⡛⡜⡝⡞⡟⡠⡡⡢⡣⡤⡥⡦⡧⡨⡩⡪⡫⡬⡭⡮⡯⡰⡱⡲⡳⡴⡵⡶⡷⡸⡹⡺⡻⡼⡽⡾⡿⢀⢁⢂⢃⢄⢅⢆⢇⢈⢉⢊⢋⢌⢍⢎⢏⢐⢑⢒⢓⢔⢕⢖⢗⢘⢙⢚⢛⢜⢝⢞⢟⢠⢡⢢⢣⢤⢥⢦⢧⢨⢩⢪⢫⢬⢭⢮⢯⢰⢱⢲⢳⢴⢵⢶⢷⢸⢹⢺⢻⢼⢽⢾⢿⣀⣁⣂⣃⣄⣅⣆⣇⣈⣉⣊⣋⣌⣍⣎⣏⣐⣑⣒⣓⣔⣕⣖⣗⣘⣙⣚⣛⣜⣝⣞⣟⣠⣡⣢⣣⣤⣥⣦⣧⣨⣩⣪⣫⣬⣭⣮⣯⣰⣱⣲⣳⣴⣵⣶⣷⣸⣹⣺⣻⣼⣽⣾⣿

And that is exactly how these characters are already being used by terminal apps, as can be seen in the screenshots of https://github.com/microsoft/cascadia-code/issues/130, showing that the reason Braille has been added to Cascadia was precisely for their use as pseudo-graphic characters.

Another Braille design would improve the terminal

Now that we know Braille are often used as 2×4 pseudo-pixels grids in terminal apps, we could improve their display by optimizing their look for that scenario.

Here are their common discrete dots design currently found in Cascadia (reordered in a more natural pixels bits values order): image

They could instead, or as a stylistic set, follow the design of the pseudo-pixels grids mentioned earlier: image

This would greatly improve the look of text-mode apps using Braille as a high-density pseudo-graphics mode. Note this is already the style used by the UNSCII font: http://viznut.fi/unscii/, which has been used for the example above.

I would even go as far as to say their pixels look should be the default and their classic discrete dots look should be the alternate stylistic set, as I believe they'll be used as pseudo-pixels much more regularly when used in the context of terminal apps than to provide visual representation of Braille to people who cannot take advantage of Braille displayed on a screen anyway.

Example

Here's a Braille pseudo-pixels example.

As displayed in Windows Terminal with the current Cascadia Mono: image

As displayed in Windows Terminal with UNSCII: image

PhMajerus commented 1 year ago

I just found out that Unicode plans to have those 2×4 grids separately from Braille, as U+1CD00...U+1CDE5 in “Symbols for Legacy Computing Supplement". This probably means we'll see two competing sets of characters, on one hand the Braille characters will be supported in more terminal apps but be less even when used as pseudo-pixels, and on the other hand the block octant characters that will look better as pseudo-pixels, but will take a while to be supported everywhere, if ever...

Having the possibility to render Braille as octants could still be a nice stylistic set, and could use the same glyphs as the new Symbols for Legacy Computing Supplement. (https://www.unicode.org/L2/L2021/21235-terminals-supplement.pdf)

aaronbell commented 7 months ago

Interesting. As the thread from Finii at the end there mentions, Braille does serve a purpose and I'm hesitant to vary from the established forms for the sake of graphics. The Legacy symbols range seems a better place for it.

PhMajerus commented 5 months ago

All the pseudographics 2×2, 2×3, and 2×4, have been accepted for Unicode 16, including separated versions of 2×2 and 2×3. So to finalize this feature request, here is a cheat sheet of all those blocks. This can be useful to pick characters, or as a test to verify font support for them.

image

curl https://raw.githubusercontent.com/PhMajerus/ANSI-art/main/Unicode/Blocks%20tables.txt

PhMajerus commented 5 months ago

Unicode 16.0 will include octants especially for the purpose presented in this feature request. So I'm closing this one and replacing it with a new one for the octants: #711

We could still provide a stylistic set to switch Braille to octants for apps that use Braille as pseudo-pixels and cannot be updated to use octants.