@bender I vaguely remember this, some leftover from the old-style hashtags? The (#foo) stuff? 🤔
@bender it works fine under jenny. Maybe it is a bug on Yarn?
Yes, if a twtxt contains something like “(This is a test. Will this work as it should?)”, it will show empty on Yarn.
(This is a test. Will this work as it should?)
@prologic it really is not blank. It reads:
2026-01-12T23:34:11+01:00 (you must be root)
@klaxzy nothing like a blank twt eh? 😅
@shinyoukai Jabber = XMPP.
@lyse jabber.org has been long dead as far as I know
I’m trying to implement configurable key bindings in tt. Boy, is parsing the key names into tcell.EventKeys a horrible thing. This type consists of three information:
- maybe a predefined compound key sequence, like Ctrl+A
- maybe some modifiers, such as Shift, Ctrl, etc.
- maybe a rune if neither modifiers are present nor a predefined compound key exists
It’s hardcoded usage results in code like this:
func (t *TreeView[T]) InputHandler() func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
switch event.Key() {
case tcell.KeyUp:
t.moveUp()
case tcell.KeyDown:
t.moveDown()
case tcell.KeyHome:
t.moveTop()
case tcell.KeyEnd:
t.moveBottom()
case tcell.KeyCtrlE:
t.moveScrollOffsetDown()
case tcell.KeyCtrlY:
t.moveScrollOffsetUp()
case tcell.KeyTab, tcell.KeyBacktab:
if t.finished != nil {
t.finished(event.Key())
}
case tcell.KeyRune:
if event.Modifiers() == tcell.ModNone {
switch event.Rune() {
case 'k':
t.moveUp()
case 'j':
t.moveDown()
case 'g':
t.moveTop()
case 'G':
t.moveBottom()
}
}
}
})
}
This data structure is just awful to handle and especially initialize in my opinion. Some compound tcell.Keys are mapped to human-readable names in tcell.KeyNames. However, these names always use - to join modifiers, e.g. resulting in Ctrl-A, whereas tcell.EventKey.Name() produces +-delimited strings, e.g. Ctrl+A. Gnaarf, why this asymmetry!? O_o
I just checked k9s and they’re extending tcell.KeyNames with their own tcell.Key definitions like crazy: https://github.com/derailed/k9s/blob/master/internal/ui/key.go Then, they convert an original tcell.EventKey to tcell.Key: https://github.com/derailed/k9s/blob/b53f3091ca2d9ab963913b0d5e59376aea3f3e51/internal/ui/app.go#L287 This must be used when actually handling keyboard input: https://github.com/derailed/k9s/blob/e55083ba271eed6fc4014674890f70c5ed6c70e0/internal/ui/tree.go#L101
This seems to be much nicer to use. However, I fear this will break eventually. And it’s more fragile in general, because it’s rather easy to forget the conversion or one can get confused whether a certain key at hand is now an original tcell.Key coming from the library or an “extended” one.
I will see if I can find some other programs that provide configurable tcell key bindings.
@movq Sorry, I meant the builtin module:
$ python3 -m pep8 file.py
/usr/lib/python3/dist-packages/pep8.py:2123: UserWarning:
pep8 has been renamed to pycodestyle (GitHub issue #466)
Use of the pep8 tool will be removed in a future release.
Please install and use ```pycodestyle` instead.
$ pip install pycodestyle
$ pycodestyle ...
I can’t seem to remember the name pycodestyle for the life of me. Maybe that’s why I almost never use it.
Pep8 is deprecated, I think
Hmm, I don’t think it is, this still says “Status: Active”: https://peps.python.org/pep-0008/ 🤔
@lyse I even got spam on ICQ, back when ICQ was a thing. I see spam as an innate thing. 😅
Oh no, spam via Jabber is new for me. Fuck them!
rustfmt. I now use similar tools for Python (black and isort).
@movq @prologic That’s what I like about Go, too. However, every now and then I really dislike the result, e.g. when removing spaces from a column layout. Doesn’t happen often, but when it does, I hate it.
I think I should have a look at Python formatters, too. Pep8 is deprecated, I think, it’s been some time that I looked at it.
@kiwu what’s going on, Kiwu?
haven’t been doing too well yarn. how r u guys?
Since I used so much Rust during the holidays, I got totally used to rustfmt. I now use similar tools for Python (black and isort).
What have I been doing all these years?! I never want to format code manually again. 🤣😅
@shinyoukai Hopefully, yes. Haven’t tried it yet.
@movq so basically an analogue to Xorg?
@movq in the only feed he has remaining, since the twtxt.net incident… doesn’t look like there’s any activity
Okay, I had heard of “River” before but I was not aware of this:
https://codeberg.org/river/river
River defers all window management policy to a separate window manager implementing the river-window-management-v1 protocol. This includes window position/size, pointer/keyboard bindings, focus management, window decorations, desktop shell graphics, and more.
This sounds promising and it follows the old X11 model. River does all the nasty Wayland work and I can make just the WM? 🤔🤯
@mckinley ohai, long time!
For me, the “Be kind.” sentence is more of a threat than anything else.
The redirects are there, now whether how long anyone will take to catch up is anyone’s guess
信じたいよ私達、孤独じゃない。
I’ve moved
(#115871582264797211) #MaradoWeekly #WeeklyShirt Week 01
After an year of posting a #WeeklyRecord (2024) and another a #WeeklyPlant (2025), in 2026 I plan to post a weekly t-shirt: and encourage you to do the same!
Like with the records and the plants, these aren’t my favorite t-shirts or need to be important, or meaningful, and there aren’t there any rules. Why t-shirts? Well, as time passes a person collects t-shirts: sometimes we bought them for a reason (like this first one), others we got on conferences or festivals, maybe they are from a favorite band… in a way, many of this shirts end up telling a story. And I do have more t-shirts than an year has weeks, so I hope I won’t have to repeat any! 😇
Usually I keep my Weekly photos text-free or explanation free, with some insights on their alt text.
@movq Aha! Well, happy hacking. A tiling window manager seems to be good fun. :-)
It drizzled all morning when we picked up the old christmas trees in town with the scouts. Right after lunch the snow storm suddenly hit and dumped three centimeters of snow in just 15 minutes. I cycled home in these crazy conditions, freezing rain hammered my face. As soon as I arrived, it stopped. It’s now down to drizzling again.
All my soaked gear is now hung up to dry. The next 11 months, I’m going to find needles over needles in all kind of impossible places.
(#115870625346003579) São muito bem vindxs!
@lyse It’s not super comfortable, that’s right.
But these mouse events come with a caveat anyway:
ncurses uses the XM terminfo entry to enable mouse events, but it looks like this entry does not enable motion events for most terminal emulators. Reporting motion events is supported by, say, XTerm, xiate, st, or urxvt, it just isn’t activated by XM. This makes all this dragging stuff useless.
For the moment, I edited the terminfo entry for my terminal to include motion events. That can’t be a proper solution. I’m not sure yet if I’m supposed to send the appropriate sequence manually …
And the terminfo entries for tmux or screen don’t include XM at all. tmux itself supports the mouse, but I’m not sure yet how to make it pass on the events to the programs running inside of it (maybe that’s just not supported).
To make things worse, on the Linux VT (outside of X11 or Wayland), the whole thing works differently: You have to use good old gpm to get mouse events (gpm has been around forever, I already used this on SuSE Linux). ncurses does support this, but this is a build flag and Arch Linux doesn’t set this flag. So, at the moment, I’m running a custom build of ncurses as a quick hack. 😅 And this doesn’t report motion events either! Just clicks. (I don’t know if gpm itself can report motion events, I never used the library directly.)
tl;dr: The whole thing will probably be “keyboard first” and then the mouse stuff is a gimmick on top. As much as I’d like to, this isn’t going to be like TUI applications on DOS. I’ll use “Windows” for popups or a multi-window view (with the “WindowManager” being a tiny little tiling WM).
i heard you like spreadsheets | https://nilfm.cc/coreio.html
@shinyoukai the whole bridge idea is a mistake done twice (I encouraged the first time, it was a mistake to do so). In this case, the “Babel Tower” works; there is no need to interact with “others”, let it be just twtxt.
@movq Oh, I see. Unfortunately, there seems to be no box drawing character for a corner with a diagonal line. Indeed, this is probably the best you can do.
Is the single character enough to hit it comfortably with the mouse, though? Maybe one additional to the left and above could be something to think about. Not sure. Of course this complicates it a bit more. Personally, I like fullscreen windows, so I’m definitely the wrong guy to judge this or even comment on. :-)
@lyse Ah, the lower right corner is different on purpose: It’s where you can click and drag to resize the window. https://movq.de/v/cbfc575ca6/vid-1767977198.mp4 Not sure how to make this easier to recognize. 🤔 (It’s the only corner where you can drag, btw.)
@bender Seriously, if I ever get a CRT monitor again, I want it to be an amber one and then hook it up to some 8086. 😅 Only problem is that this stuff is expensive as hell now …
Shin'ya M. > grep bridge.twtxt.net /var/log/pleroma.log
14:01:33.937 path=/api/v1/accounts/B26ukWUhEh8kKl0oPw/follow user=shinyoukai [error] Follower/Following counter update for https://bridge.twtxt.net/users/c350a5e5fb9d9457 failed.
14:01:35.541 path=/users/shinyoukai [error] Could not decode user at fetch https://bridge.twtxt.net/keys/bridge, :not_found
14:01:38.286 path=/users/shinyoukai/outbox [error] Could not decode user at fetch https://bridge.twtxt.net/keys/bridge, :not_found
Targeting just Mastodon will get anyone nowhere
There‘s only one Green Day. Nobody would even think of starting a band called Green Day—or they’d quickly abandon the idea. But with lesser-known bands, name conflicts are a recurring problem on streaming services.https://maurice-renck.de/en/blog/2026/there-can-only-be-one-artist
Feeling nostalgic, for 3D-ish old game sprites, so I made one of myself.
(#115861340124577669) #MusiQuinta com a pauta “músicas que viraram tatuagens de vocês, mas também valem músicas sobre tatuagem, que vocês planejem fazer tatuagem sobre, que conheçam alguém que tatuou a letra, que acha bonito ou que acha tatuável”:
Marilyn Manson - Tatooed in Reverse
I’m un-stabled, I’m not a show horse
I can’t be bridled, of course
I’m un-scabbed and un-regretted
I got tattooed in reverse
Woah, in reverse
https://marilynmanson.bandcamp.com/track/tattooed-in-reverse
implemented curl, grep, jq, head & tail in javascript for my website, zsh now knows the difference between hi;hi and "hi;hi", and a bunch of documentation has been written for all that, too! i do normal people things for fun :3
I love it. It make me feel quite nostalgic.
@movq Very nice, it’s coming together!
Just in case you haven’t already noticed it, the right lower corner of the window in front was not updated when it received the focus. 8-) (In tt I also render focused text input fields with a doubly lined border, where unfocused ones have a single one.)
(The background and the window shadow are not amber and it wouldn’t have looked like that on a real monitor, unless you cranked up the brightness way too high.)
I think my widget toolkit will have an amber theme by default:
https://movq.de/v/22662db9b2/amber.png
My first PC had a monochrome amber screen and I just love looking at this. 😃
(It looks even better with redshift enabled, but I can’t screenshot that.)
Only downside is that there aren’t that many amber shades in the standard 256 color palette. Or well, maybe that’s actually a good thing, as it probably helps to keep the theme more minimal and less cluttered/noisy. 🤔
Work kills the soul
Since most of the jobs that we do nowadays are simply meaningless: Yes. Work kills the soul.