dconf 2023 coming and arsd 11.1 progress - minigui tweaks, cgi hybrid new default mode on dub

Posted 2023-08-28

I plan to tag 11.1 next week. Also got a new chair and rearranging my desk, but no commentary on that at this time. Too soon to say.

Core D Development Statistics

In the community

Community announcements

See more at the announce forum.

arsd 11.1

I'm almost ready to tag arsd 11.1, the first incremental addition since the policy change that came with 11.0 toward some of the goals that were behind schedule.

I expect I'll tag this in about a week from now.

Minigui

Theme tweaks

Minigui's theme was going to be slightly modified for 11.0, but it slipped behind schedule to 11.1 instead. Technically, it is a breaking change, but the changes are minor enough I think I'll get away with it.

The new theme slightly lightens the default widget background color and default font, both primarily affecting Linux, since the normal behavior on Windows is to use the native theme for most widgets.

Status bar change

The existing status bar class lets you add "parts" with a "width". The meaning of the width has until now just meant plain pixels, unless you put 0 and it is in the last spot in the array, it would fill the remaining space, but I never actually documented this. This has a number of shortcomings and I want to change it.

Among the problems:

  • The width doesn't scale with the rest of the application, meaning bigger fonts get truncated sooner.
  • The width doesn't stretch with the window size, leading to wasted space.
  • The defaults suck. If you don't explicitly add a part, it just uses an arbitrary number of pixels for your text and wastes the rest of the space.

I think what I really should have done is some kind of min, max, ideal size, like with other widgets, and maybe it should be given in a different unit. The minigui status bar right only only supports text, so maybe it should be given in approximate character units? But I'd still like to add icons down there eventually, so maybe it should be pixels, but more device independent? Or should those be two separate types?

And while I'm there, what if text is truncated but I wanted to see it? What if I want to copy/paste it? What if I want some history? Maybe I should add some more functionality too; I really just cloned the bare minimum basic Windows functionality so far. So I will probably add something there too, but not much all at once.

cgi.d

The default for embedded_httpd is now the hybrid, rather than the previous processes on linux and threads elsewhere. The hybrid handles long lived, mostly idle connections better without too much cost elsewhere, and after using it myself for a couple years, I'm reasonably confident it doesn't break much.

Of course, I still need to adapt it to use the new arsd.core unified event loop, but that will still have to wait.

terminal.d

I've started writing an integration with arsd.core for it, but I don't think it will be ready in time for the 11.1 tag. I have it working in a fiber in the loop on linux, but not yet ready for Windows, so the code remains uncommitted.

Once it works in both systems perhaps I'll keep it, but I'm still unsure if I'd rather keep the blocking mode in a fiber or go with a message passing system (similar to my old arsd.eventloop integration, which has been deprecated for years but I actually still use it in a few places, it has its advantages).

It has hit an interesting bit though: what do I do with ctrl+c and the tasks? I need to answer this - should it wake up all tasks? Can one hook it (terminal.d turns it into an exception normally...)? I think I do need to have a list of all tasks to cancel cleanly anyway, so I made a doubly linked list of them in the code, but until the use cases are done, none of that is stable.

Others

11.1 will also expose my ico.d module to dub and switch cgi.d's new ipv6 support to use the ipv6 only flag, to give you more control over how exactly you want it to listen (using the new --listen flag, added in 11.0).

There may be a few more little things if I finish it during the week, but right now I plan to just tag this once i finish the testing.