Status update, January 2020
This month’s status update will be a little lighter than usual due to Christmas holidays. I’ve still got the chance to send a patches to quite a few projects, and… do a lot of releases! Weston, Wayland, Sway, mako and grim all have or will get a release this month.
The new mako release allows you to run notification actions with a new
makoctl menu command, adds a new
--config CLI flag to specify a custom
config file path, and improves touch-screen support. On the master branch,
I’ve also worked on adding a
makoctl set command to change config options
on the fly. This allows users to implement a “do not disturb” mode that can
be enabled with a keybind, for instance. There are still some
design issues with this approach, some more discussion
is needed (thanks Bill Doyle for the great feedback!).
The new grim release makes the destination file argument optional: running
grim will now drop a timestamped file in
$XDG_PICTURES_DIR. Apart from this
feature, a few bugfixes are included. At this point grim is mostly “done”, I
don’t expect any new major feature. This is how I like software maintenance:
boring releases, minor features from time to time.
In other Wayland news, I’ve continued to work on libliftoff. My experimental libliftoff-based glider compositor received a number of bugfixes, and I’ve taken some time to take a step back and think about the overall design.
I’ve started working on two big wlroots pull requests. The former adds a new
wlr_output_layer API which will expose hardware planes
to compositors, paving the way for performance and battery usage improvements.
The latter adds a new scene-graph API: this will reduce the amount of work compositors need to do in case they don’t want anything out of the ordinary. These compositors will be able to take advantage of hardware planes and support things like explicit synchronization without any extra work. If they want to do something fancy, compositors will still be able to go lower-level of course.
I’ve been starting some adaptive sync/variable refresh rate work
too. What’s still missing is the Sway part, which has complicated implications
due to the interaction with repaint scheduling. I
have a plan, I’ll see if it works in practice. I want to make sure the feature
works as expected, so I’ll probably create a test client (or patch
weston-presentation-shm). After all of that is done, I’ll be able to draft a
Wayland protocol to let clients opt-in for adaptive sync and send it for review
to wayland-protocols. Soon™!
In mrsh news, progress has been continuing slowly but steadily.
exec(1) have been mostly implemented. Various bugfixes have been pushed.
And Drew DeVault has started imrsh, short for interactive mrsh. This is the
simple, interactive POSIX shell we’ve all been waiting for!
Work on the koushin webmail has continued, with most of the hard problems
tied to the plugin infrastructure solved. I’ve been focusing on hot reload,
HTML e-mails and CardDAV support. While working on CardDAV, I realized Go is
lacking a good WebDAV library. WebDAV is tricky to implement in Go, because
the standard library’s
encoding/xml package requires you to know in advance
the complete structure of the XML document you’re going to parse. This doesn’t
play well with WebDAV’s extensibility. Third-party XML libraries don’t support
namespaces properly, which is a no-go when juggling between WebDAV’s and
CardDAV’s. I’ve finally found a reasonable way to make
encoding/xml work by
delaying the parsing process for unknown XML elements.
I’ve started writing a new WebDAV library based on this. It can
already fetch address books from a CardDAV server and serve a read-only WebDAV
filesystem. I’ll expand the library as I need more features.
That’s all for today, see you next month!