@lyse@lyse.isobeef.org Okay, wait, what is the anti-feature here? The nag screen because it’s “old”? The inability to update when run from source? 🤔
@prologic@twtxt.net I think I said this before: This looks like a really cool thing! I just wish I had a use case for it, then I’d be all over you. 😅 But since I run so many servers of my own already …
What’s your motivation for running this, btw? 🤔
(Lol, but this ended up on HackerNews. 189 comments at the moment. https://news.ycombinator.com/item?id=48586231 hfgl, I’m probably not gonna read that.)
I noticed that there are quite a few UI glitches in vim-classic – and quickly found the cause: It comes with outdated Unicode tables.
I have to admit that I wasn’t aware that there’s a new Unicode release every year:
https://en.wikipedia.org/wiki/Unicode#Versions
Look at this huge number of changes. Every program has to keep track of that, often through libraries but sometimes not (like in Vim’s case).
I use Unicode extensively, but this shit is extremely expensive …
My TUI framework is having the same problem. At the moment, this is all offloaded to wcwidth, but if that library was to become unmaintained, I’d have to track Unicode myself.
Gah!
The DOS days were simpler. CP437, end of story. (Yes, I know that’s a lie.)
@lyse@lyse.isobeef.org Yeah, I have a couple of teachers in my family and they all tell similar stories. 🙄
I have almost no recollection of my time at the “Gymnasium” anymore. I’m either traumatized by it or I wasn’t very interested in what happened there. 😅 But I have some vague memories of doing “computer stuff” at school. There certainly were computers and they certainly ran DOS games like Duke Nukem, that I do know. 😂 Just checked my records, and no, this wasn’t an official class. At best, it was one of those AGs. 🤔
@lyse@lyse.isobeef.org Awww, that sounds like a typical experience at school. 😅 They meant well but somehow it was still shitty …
I’ve never heard about that Wahlteil/Pflichtteil stuff (or forgot about it). Must be a BaWü thing. 🤔
@lyse@lyse.isobeef.org It was before my time as well. 3.0 was my first. 😅
Giving vim-classic a try now. Let’s see how it goes. 🤔
@lyse@lyse.isobeef.org The what? What happened? Do I want to know? 😭
@lyse@lyse.isobeef.org I might check it out – once the vacation is over. 😅
But it’s Windows, it doesn’t have a place in my heart.
The older I get, the more I’m glorifying anything pre XP. 😅 But that’s only because everything today is so horrible.
Well, not anything pre XP. 3.0 or newer would be nice, because Windows 2.x was still pretty bare bones:
(OS/2 was great, though, except for the lack of a good file manager.)
@lyse@lyse.isobeef.org Ah, you mean the categorization. Yeah, that would never work in Windows, at least not without having a centralized package manager (so there’s one authoritative source of which program belongs into which category).
Oh wow, those Cassiopeias look pretty cool. Did you have one of those or one for each kid?
Speaking of UIs, this is how Thunderbird looks now:
So we continue to let every program make up its own UI style (and then we complain that “the Linux desktop” looks “messy” and “inconsistent”). I guess this uses GTK, but it doesn’t look like any other GTK program. Buttons, tabs, drop-downs, whatever, it’s all different. It even has its own subwindow system (i.e., popups that you can’t move).
I didn’t say this in the blog post, but I’m convinced that programmers these days absolutely positively hate everything that looks even remotely like Windows 95 or Motif – with a passion. I see that in my coworkers as well, they really can’t stand it. It’s an emotional thing.
@lyse@lyse.isobeef.org In what way was KDE 3’s menu organized? KDE 1 is the only KDE version I ever used. 😅 We’re talking about this one, right?
Isn’t Notepad++ and Python cheating!? :-D
Well, Python was certainly already a thing back then, but Notepad++ is from 2003, right. I think I used https://www.wintotal.de/download/proton/ at the time? Maybe? I don’t know. 😅
@lyse@lyse.isobeef.org That, uh … yeah, that would work as well. 😅🤦♀️
☠️ Doing the taxes today. ☠️
It’s one of those topics that might cause outrage because I’m getting it all wrong.
So far, nobody noticed. It didn’t get posted on HackerNews or Lobsters this time, and it only got 46 hits so far (as opposed to ~50-100k hits when it does end up on those sites). 🤣
@lyse@lyse.isobeef.org Oh, 02.jpg is great. Camera just a little lower next time to put more emphasize on the … whatever that is in the foreground. 😅
Oh god, finally: The thumbnail generator for my blog now renders a typical “play” icon for videos.

Saves me the need to write “this is a video” every time. 😬
@lyse@lyse.isobeef.org Interesting approach. 🤔
The master branch should never be in a broken state (apart from bugs I don’t know about). Any intermediate state during the development of a larger feature will happen in a different branch.
I mean, yeah, but … I don’t know, I like having “traditional releases” as a second safety net when I write programs. I like to let things mature for a while and then I cut a new release. So it’s, like, “we have a bunch of new features and fixes here, and to the best of my knowledge this works fine now”. But maybe I’m just paranoid. 🤔
tt. But then, in the message tree, I spot another missed typo. My process is then to go to my twtxt.txt and fix it by hand. However, I still have to clean up tt's cache. This is rather tidious:
@lyse@lyse.isobeef.org Is it this one? https://github.com/rivo/tview It’s almost 10 years old but hasn’t seen a 1.0.0 release yet? 🤔
Updated draft: http://movq.de/blog/drafts/changelog/POSTING-en.html
I’ll probably publish this later today. Or maybe not at all. It’s one of those topics that might cause outrage because I’m getting it all wrong. 🤪
Haha, GitHub. I “unlocked” the “achievement” called “Quickdraw”:

It’s for closing an issue very soon after it was opened.
Only problem: I was the one who opened it and it was a mistake, so I quickly closed it again. 🤦♀️ https://github.com/bundlewrap/bundlewrap/issues/892
@lyse@lyse.isobeef.org Oh god, yeah. In other words: Devs need to think about who their target audience is. 😐
tt. But then, in the message tree, I spot another missed typo. My process is then to go to my twtxt.txt and fix it by hand. However, I still have to clean up tt's cache. This is rather tidious:
With multicolored TUIs, I find it usually hard to immediately tell which button is selected if there are just two.
Indeed, I wouldn’t be able to tell in that example, either. movwin works around that by (mostly) assuming that there is no support for colors at all, so there should always be a way to tell which widget has focus, even without colors. That’s why it puts brackets around a button’s label when focused:
The fewer colors you use, the better, I guess. 🤔
tt. But then, in the message tree, I spot another missed typo. My process is then to go to my twtxt.txt and fix it by hand. However, I still have to clean up tt's cache. This is rather tidious:
Now I’m curious how movwin deals with that. ;-)
Focus handling? I hardly remember, lol. 😅 Did that 6 months ago and haven’t touched it since. Let’s see.
The core main loop gets keyboard/mouse events from curses. At this level, the main loop only knows about exactly one widget, so it passes the event to that widget (whatever that is, doesn’t matter – they all inherit from the Widget base class, it could be a Window, a WindowManager, or an Edit box directly).
The outermost widget is usually a WindowManager. It implements a few hotkeys of its own, like switching to another window. If none of those hotkeys match, it passes the event to the currently focused window.
Same story here: Window implements some hotkeys (like opening the menu bar). If none of those match, then … the magic happens.
Each Window acts as a focus manager. It can descend into its child widget hierarchy and collect all child widgets in a depth-first search. They are collected into a flat list. Each Window then has an attribute _focus_position, which is an index into that list. Pressing Tab or Shift+Tab increases or decreases that index and that allows you to select the next/previous focusable widget in the current window.
Eventually, Window passes the input event to the currently focused widget.
Usually on initialization, the application can ask a Window object to focus a certain widget. The file selection dialog does that, for example, because the “natural” focus order would be to focus the Edit box at the top of the window first – but that’s not what the user wants, the Table showing the list of files should be focused.
If no widget ever feels responsible for handling a certain input event, then there’s a global unhandled_input callback that the application can provide (same as in urwid).
I think that’s it.
Hm, that’s more complicated than I remembered, but apparently it works fine, because I completely forgot about this. 😅 All I did in the last few months was make new classes that inherit from Widget, like the new Table class or Edit or HexEdit or whatever, and if they want to get input events, then they must implement the methods input_key() or input_mouse().
Does this answer your question? 😅 (I admit that I didn’t exactly understand your scenario, so I just went ahead and rambled about my implementation. 😅)
@prologic@twtxt.net Hmmmmmmmm … 🤔
@lyse@lyse.isobeef.org Thanks!
On the AI changelog part, though, I’d rather recommend to just not have a changelog at all.
I’m afraid that ship has sailed. You can rest assured that someone who uses AI/LLMs for their code (which is almost everybody at this point) will most certainly also use it for changelogs.
I actually considered not mentioning AI output at all, because this just opens a huge can of worms … 😞
While going through these terrible GitHub release pages, I also found these “New Project Contributors” sections
Yeah, they play on a nerd’s pride.
Now, it’s just the same auto shitshow with MR titles in a rolling date-versioned release scheme. It’s just our team who has to deal with that, though. I think I’m the only one who is not a fan of it.
I’ve found that this whole situation is much worse at work than it is in the Free Software world. At work, it’s literally work and hardly anybody actually cares. We still don’t have all people convinced that writing good commit messages or using good branch names is worth the time. It’s … oh god, no, I’m going to stop here, this is bad for my mental health. 😅
Suffice it to say, all release notes at work are now AI-generated. Nobody gives a fuck.
@lyse@lyse.isobeef.org Now that you mention it, there is some steam from manholes in the winter. 🤔 This is all energy that gets lost … I don’t know how much of it, but it’s lost. 🤷♀️
@lyse@lyse.isobeef.org This is the draft so far, let me know what you think: https://movq.de/blog/drafts/changelog/POSTING-en.html
@lyse@lyse.isobeef.org … I am literally writing a blog post about changelogs at this very moment … 😂 I am certainly adding the “‘add X’ and then later ‘remove X’” to my list of DON’Ts. 😅
@thecanine@twtxt.net Nice! 🤯
@lyse@lyse.isobeef.org Fernwärme it is. %)
@lyse@lyse.isobeef.org I don’t know what it is. It’s this damn central heating here (distributed over the entire village), where, if something breaks at their end, hundreds of households are affected. 🙄
(I don’t get why anyone would build a central heating system in the first place. Isn’t this super inefficient?)
People think that “more words means more effort” – that used to be true, and it’s the opposite now.
Anyone can make 200 words. The real flex is turning those 200 words into 6.
Regarding software, I wonder when/if programmers will get this memo.
No hot water today. Again.
caddy-pow. So now going forward, you'll have to (sorry) have a HS-enabled browser to hit git.mills.io which will hopefully make most (if not all) bots just go the fuck away 🤦♂️ #Hostile #Web
@prologic@twtxt.net Huh, somehow I was assuming that Anubis was already lightweight (never took a closer look, though). What’s the issue with it? 😅
(And of course there’s a bug because I’m an idiot. 🤪)
There you go, it really does look better: https://movq.de/v/69d82e39f4/vid-1781183062.mp4
Heads up (literally): There’s going to be a solar eclipse in August: https://en.wikipedia.org/wiki/Solar_eclipse_of_August_12,_2026 Mostly partial, unless you happen to live in Greenland/Iceland/Spain.
And maybe slow down a tad once you’re back.
Not sure if that’s possible in this company. 🤔 (This is the worst time to look for a new job, though. Alles im Umbruch.)
@lyse@lyse.isobeef.org Yeah, it probably would look better. I might fix that. It’s just laziness, the implementation was easier this way. 😅
Glad you find it interesting! And honestly, I agree, nobody but me would use this anyway. There are more mature and featureful toolkits out there.
@lyse@lyse.isobeef.org Aaaaahhhhhhhh! That explains it! 😅
As I said, I’m on vacation, and for about a week now, I did basically nothing but sleep. Day or night.
I can’t tell if this actually is a vacation or just therapy for burnout. 🤔
@bender@twtxt.net Yeah, no, not gonna happen. 😅
@lyse@lyse.isobeef.org Those poor unicorns. Why do they have to puke all the time? 😢🦄
(I know it’s kind of pointless to post all this stuff if the source code isn’t available, but meh, whatever. 🤪)
First draft of a file selection popup / widget:
https://movq.de/v/0955149868/vid-1781094010.mp4
Also makes use of the new Table widget.
@arne@uplegger.eu Heh, nice. 🥳

