Commit Graph

8 Commits

Author SHA1 Message Date
Elf M. Sternberg a8009bdedb Friggin' Github Flavored Markdown 2022-02-27 11:07:37 -08:00
Elf M. Sternberg 213dab0a97 Friggin' Github Flavored Markdown 2022-02-27 11:07:06 -08:00
Elf M. Sternberg e6d836b005 Friggin' Github Flavored Markdown 2022-02-27 11:06:33 -08:00
Elf M. Sternberg 9c7c7b9914 Added mucho documentation. 2022-02-27 11:02:21 -08:00
Elf M. Sternberg a97a52c9a5 Fixed a typo in the Journal 2022-02-24 17:12:52 -08:00
Elf M. Sternberg abdc9f184f Fixed attribution in the journal. 2022-02-24 17:11:01 -08:00
Elf M. Sternberg 2cd9b268a8 Innteresting. It seems that the `output` collection is much more
reliable as a source of truth about which monitors and screens are
actually in use.  Each one comes with its own collection of `crtc`,
but you can just skip the ones that return `null`, giving you a
reliable list of the "active and visible" screens that the user is
currently looking at.  Excellent!  This means that I'm one step closer
to having a viable solution!

I also discovered the [xcb_util](https://xcb.freedesktop.org/XcbUtil/)
library of helpful utilities has a function called
`xcb_aux_get_screen` for getting the root screen because everyone was
weirded out by that list traversal algorithm.

The source code to [xedgewarp](https://github.com/Airblader/xedgewarp)
was invaluable in revealing these secrets to me.

So far this little toy compiles down to only 35KB, and that includes
using `std::cout` and `std::vector`!  I wonder how big the Rust
version will be.  Yeah, yeah, I know, it cheats by having lots of
itself hidden in the kernel.

Next up: Actually knowing what the rotation status is.
2022-02-24 15:59:43 -08:00
Elf M. Sternberg bafa8bfd23 In this commit, we learned about X11 iterators, which iterate through
monstrous things allocated in memory that you just have to "know" are
of a certain structure.  In this case, we used `xcb_screen_next` to
say that we want the first (and all) screens attached to our current
X11 session.  And we used
`xcb_setup_roots_iterator(xcb_get_setup(connection))` to initialize
our iterator to our connection object in local memory.

Other things we've learned along the way: the file description that
represents our connection can be a TCP/IP socket or a Unix Domain
socket (a filesystem socket, named or not), and the only way to know
which is to find if there's a hostname before the colon ':' in the
display name of the server.  Not sure how that's going to work.

Also, found a really good reference: [Basic Graphics Tutorial with
XCB](https://www.x.org/releases/X11R7.6/doc/libxcb/tutorial/index.html).
It doesn't cover our specific use-case, but it's worth looking into.
2022-02-17 18:25:49 -08:00