Hacker News new | ask | show | jobs
by KirillPanov 1133 days ago
No, there is an escape code that queries the window size in pixels:

    "\x1b[14t"
Combined with the escape code that queries the window size in character cells ("\x1b[18t"), you can calculate the number of pixels per character cell (the "pixel size").
2 comments

Are these escape codes actually implemented in the average terminal? I recently tried to get e.g. alacritty to tell me this stuff but I don't even know how you're supposed to red back the response.
Yes, every xterm-compatible should have them.

You just send the particular query (e.g. ‘CSI 14 t’) and the terminal sends back a response in the defined form¹. Of course you'll want raw mode, echo off, etc. Normally a library like curses does this for you. If you want to see, https://gist.github.com/kpschoedel/6a87ec2157ce2140be69193d1... (I just whipped this up to answer the question; don't expect production quality)

¹ https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-F...

Thank you so much! I will incorporate this to my sixel feature branch of a tui matrix client. Memes in the terminal!
Which matrix console client? I only know gomuks and I really miss proper image support there.
https://github.com/ulyssa/iamb

It's still in the early phase of development, but actually fully functional.

Most implementations I've seen use an ioctl to query those particular bits. That's implemented quite reliably, since the same ioctl is used for character size as window size. Some implementations just set the character size to zero though.
Ioctl doesn't work over a serial port. The escape code queries are more general.
‘CSI 16 t’ reports the character size in pixels directly.