| ▲ | joouha a day ago |
| A much better alternative to this would be to for more terminal emulators to implement overstrike mode (DECSET 20, as available on the VK100). That way you could just draw border characters over existing text cells to achieve the same thing. Unfortunately mintty is the only terminal emulator I'm aware of which supports overstrike [0], as this would open up a world of new possibilities for TUI apps if more widely supported. [0] https://github.com/mintty/mintty/wiki/CtrlSeqs#overstrike |
|
| ▲ | inguz a day ago | parent | next [-] |
| Overstrike is underrated! I've really enjoyed using it on paper: https://hughpyle.com/ASR33/ |
| |
| ▲ | asymmetric 20 hours ago | parent | next [-] | | Hey, this was super cool! Ages ago I had found a software that would convert an image to ascii-art, and then used another tool called posteriza to split the large image into several A4s, which I then taped together and hung on my wall. Would love to do something similar but with better tools. | | | |
| ▲ | NetOpWibby 15 hours ago | parent | prev [-] | | Pretty cool method doing “shading.” |
|
|
| ▲ | Sharlin 16 hours ago | parent | prev | next [-] |
| A considerably less archaic and more generally useful way would be for Unicode to add border-drawing given that the concept of composing several codepoints to the same glyph is already there and ubiquitous. You’d just need 2^4=16 new codepoints. |
| |
| ▲ | graypegg 13 hours ago | parent | next [-] | | Unicode is a lot more concerned with what a character means vs how it displays. The box drawing characters that have codepoints are there because they were part of some device's proprietary text encoding, so it's put in a codepage somewhere so a document from that device could be used on something else given it gets converted to unicode. Pretty unlikely they'd be into adding a new ZWJ pattern for bordering characters since it's awful given unicode's main goal is interoperability. If you copy text out of your terminal, those characters come with it and probably won't render correctly in non-terminal applications (which don't have monospaced text cells), so you'll just see the ? missing character symbol between every letter. (Possibly overstruck onto the previous character depending on handling for the ZWJ.) I guess the other way to look at this would be "should the background colour be a unicode ZWJ pattern?"... probably not. The border (and colour) is a property of the terminal cell rather than the actual characters IMO. It's not like `X + ZWJ + LEFT-BORDER` has any unique encoded meaning. Cell attributes like the article is talking about IS the less archaic way of doing this. ZWJ patterns are a lot more archaic and cause a lot more issues. Overstrike is fine, if it's being down with cell attributes (meaning, moving the cursor overtop of a cell, and stamping a new character on it instead of replacing it. Exactly how mintty does it.) | | |
| ▲ | lenkite an hour ago | parent [-] | | > Unicode is a lot more concerned with what a character means vs how it displays This was only true before emojis. Unicode introduced specific code points purely to alter visual display, such as skin-tone modifiers, etc. Now that the mission was already diluted for emo-fluff, you might as well add actually useful fluff. | | |
| ▲ | graypegg 14 minutes ago | parent [-] | | Nahhh, they refuse a LOT of emoji proposals specically because they're just asking for a specific image. Here's that graveyard: https://unicode.org/emoji/emoji-proposals-status.html The ones they DO let through, must have some sort of useful distinction in meaning to be given a code point(s). It can't just be useful as a little image of a thing. It has to provide some sort of linguistic concept that extends the emoji... language? https://unicode.org/emoji/proposals.html#factors_inclusion The skintone modifiers are meaningful because it can look more like someone you're talking about. "S with a left border" isn't disambiguating any sort of meaning from "S with a bottom and right border". |
|
| |
| ▲ | joshka 5 hours ago | parent | prev | next [-] | | This is not as bad an idea as it would seem, but it's never going to happen with Unicode. It could reasonably happen with a combination of NerdFonts / private area shenanigans + cell rendering on the terminal side of this to handle it. It solves the z-index problem neatly for an individual cell as you just render in order (first underneath, second over the top). But it doesn't solve the order for adjacent cells - borders that lie between cells. At least not easily. Not an insurmountable problem. Some perspective if you're unaware. Fonts have the unicode line drawing characters, but fonts don't align super well and so a good terminal will draw those characters with line drawing algorithms instead of as a font. I've got a WIP PR that I need to land in VSCode's that pulls in xtermjs and ghostty's line drawing stuff so that it fixes up all the existing gaps on that as an example of this problem. | |
| ▲ | binarymax 16 hours ago | parent | prev [-] | | Oh like a diacritic? Good idea. | | |
| ▲ | Sharlin 15 hours ago | parent [-] | | Yep. And actually you’d only need four codepoints (per line style) because you could just chain them to get a line on more than one edge. |
|
|
|
| ▲ | graypegg 13 hours ago | parent | prev | next [-] |
| I'm iffy about that. If you copy/dump text out of a terminal, what characters do you get for the doublestruck cells? Plus, just complexity wise, I'd much rather just have a DCS sequence to draw vector lines like the article's suggestion than first send all the borders then home the cursor, send the overstrike sequence, send all the content, send the overwrite sequence. That has so many more places where a session gets trashed by accidentally sending the wrong control character. |
|
| ▲ | unleaded 9 hours ago | parent | prev | next [-] |
| I always find it somewhat amusing that most modern terminal emulators don't actually do a very good job of emulating terminals. IIRC Windows Terminal supports a lot of DEC commands that most of the terminal emulators on Linux don't! |
|
| ▲ | hnlmorg a day ago | parent | prev | next [-] |
| I’m not against overstrike, but I can think of one drawback of that solution: it becomes significantly harder to have rounded corners with a filled interior. But I’m not trying to argue for nor against either solution. |
| |
| ▲ | benterris 20 hours ago | parent [-] | | How is it harder? If I understand correctly overstrike is a superset of the regluar 1-char-per-cell mode, so nothing is lost by going overstrike? | | |
| ▲ | hnlmorg 20 hours ago | parent [-] | | Because the background colour isn’t bounded by the border colour using overstrike, but it can be when using borders. This isn’t an issue if you want square borders. But the screenshots in the article showed fancy rounded corners. |
|
|
|
| ▲ | NSPG911 20 hours ago | parent | prev | next [-] |
| Huh, I'm not sure whether it is the same protocol, I know of this: https://vtdn.dev/docs/sgr/sgr-overline The syntax is: CSI 53 m SGR 53 — Overlined
CSI 55 m SGR 55 — Not overlined which is much more different than mitty's Control Sequence, but supports much more emulators |
|
| ▲ | __alexs 17 hours ago | parent | prev | next [-] |
| More terminal emulators should implement Tek4010 mode and just draw vectors everywhere. |
| |
| ▲ | graypegg 13 hours ago | parent [-] | | I mean X is just sitting there with an extra decade or so of modernity. (Or Wayland for something MUCH more modern) Imagine ssh-ing into a server, starting an application, and a GUI application window appears. 1990's finest technology is awaiting it's rediscovery here in 2026. |
|
|
| ▲ | cowlevel 19 hours ago | parent | prev | next [-] |
| The better alternative to most of this is to use a different display protocol, one that gives you pixel-level control, if you want pixel-level control. |
| |
| ▲ | qudat 11 hours ago | parent | next [-] | | Now we are in GUI app territory which is why I don’t like this terminal proposal or even kitty gfx. The terminal should be about text processing and at most a 2d grid of cells. Once you start talking about pixel buffers replacing cell buffers I fear we have lost the plot. | |
| ▲ | alpaca128 15 hours ago | parent | prev | next [-] | | Can you name one which is as lightweight and simple to use as terminal escape codes and supported by almost any platform with a screen and keyboard? | | |
| ▲ | kergonath 11 hours ago | parent | next [-] | | Sixel could be, but it’s not as widely supported as I’d like. But even though it could be used much more, I think the borders in the story would be very useful, and I hope something like this gains traction. | |
| ▲ | cowlevel 13 hours ago | parent | prev | next [-] | | Yeah, X11. You might think it's a bit complicated, but I counter: so are terminal escape codes. | |
| ▲ | 0c3ca83 14 hours ago | parent | prev [-] | | HTML. | | |
| ▲ | alpaca128 10 hours ago | parent [-] | | I was talking about native applications, otherwise there would literally be no other choice than HTML anyway. |
|
| |
| ▲ | oblio 18 hours ago | parent | prev [-] | | This protocol would still be used for user interfaces, but it would use a completely different approach to rendering them, I guess we could call this approach "graphical"? |
|
|
| ▲ | joshka a day ago | parent | prev | next [-] |
| There's some downsides to this - I can't recall where I called this out off the top of my head, but this also adds a bunch more things that that wouldn't do that are covered in the spec. |
| |
| ▲ | iainmerrick a day ago | parent [-] | | If you mean your proposal adds more things, that sounds like it might be over-complicated. To solve the problem of tightly-fitting boxes around terminal text -- if you consider that to be a real problem -- overstrike sounds like a really elegant solution. | | |
| ▲ | joshka a day ago | parent | next [-] | | Which things do you consider in your experience of writing tuis that are mentioned as being wanted in the blog post / rationale doc linked to be unnecessary? If you want those things then overstrike is insufficient. | |
| ▲ | zem a day ago | parent | prev [-] | | cell borders sound even more elegant imo, they are a targeted, precise fix for a useful feature. overstrike sounds messy to me though I can see where it has a lot of uses. |
|
|
|
| ▲ | muqsitnawaz a day ago | parent | prev | next [-] |
| Expecting Terminal Emulators to support overstrike is a high bar even many text editors don't even support strikethrough. Would love to see it though |
|
| ▲ | thiht 21 hours ago | parent | prev | next [-] |
| What makes it much better? |
| |
|
| ▲ | db48x a day ago | parent | prev [-] |
| Overstriking support might be nice, but it wouldn’t help much for this use–case. |
| |
| ▲ | joouha a day ago | parent [-] | | If it's not obvious how this could be achieved with overstrike, basically the idea is that you could draw text on a cell then overstrike the cell with 1/8 block characters for the 4 edges characters (U+2581 & friends) to create a border around the cell. Edit: HN stripped the characters in question from my comment | | |
| ▲ | db48x 5 hours ago | parent [-] | | That’s really crude, so it wouldn’t help much for this use case. |
|
|