đ Hi, the current time is about a quarter past eight in the night đ.
tcell.Key constants and typing different key combinations in the terminal to see the generated tcell.EventKeys in the debug log. Until I pressed Ctrl+Alt+Backspace⊠:-D Yep, suddenly there went my XâŠ
@movq@www.uninformativ.de I guess so, yes. I read something about that in some ticket. In v3 the terminfo support was dropped, though. Iâm still on v2 at the moment.
tcell.Key constants and typing different key combinations in the terminal to see the generated tcell.EventKeys in the debug log. Until I pressed Ctrl+Alt+Backspace⊠:-D Yep, suddenly there went my XâŠ
@lyse@lyse.isobeef.org ⊠I sure hope that they generate these files from the general terminfo database instead of maintaining their own DB. đł
tcell.Key constants and typing different key combinations in the terminal to see the generated tcell.EventKeys in the debug log. Until I pressed Ctrl+Alt+Backspace⊠:-D Yep, suddenly there went my XâŠ
And tcell seems to support my urxvt in general: https://github.com/gdamore/tcell/blob/v2/terminfo/r/rxvt/term.go#L144
@movq@www.uninformativ.de Woah, thatâs really amazing progress! :-)
@bender@twtxt.net Iâm already using it for tracktivity (meant for tracking activities and events, like weather, food consumption, stuff like that), which is basically a somewhat-fancy CSV editor:
https://movq.de/v/f26eb836ee/s.png
I have a couple of other projects where I could use it, because they are plain curses at the moment. Like, one of them has an âedit boxâ, but you canât enter Unicode, because it was too complicated. That would benefit from the framework.
Either way, itâs the most satisfying project in a long time and Iâm learning a ton of stuff.
tcell.Key constants and typing different key combinations in the terminal to see the generated tcell.EventKeys in the debug log. Until I pressed Ctrl+Alt+Backspace⊠:-D Yep, suddenly there went my XâŠ
@movq@www.uninformativ.de Yeah, I know that terminals are super weird and messy. In both the KDE Konsole (identifying itself as TERM=xterm-256color) and xterm (TERM=xterm) it just works flawlessly. My urxvt (TERM=rxvt-unicode-256color) just doesnât. I also tried messing with TERM in urxvt, but no luck so far.
tcell.Key constants and typing different key combinations in the terminal to see the generated tcell.EventKeys in the debug log. Until I pressed Ctrl+Alt+Backspace⊠:-D Yep, suddenly there went my XâŠ
@lyse@lyse.isobeef.org Unix terminals are quite limited in that regard. đ«€ You know how Ctrl works? The XOR 0x40 thing? And Alt doesnât exist at all, itâs just a prefixed ESC byte.
I was surprised to see curses knowing about âShift+Tabâ, wondering how that is supposed to work. Well, itâs an escape sequence, of course (depending on the terminal, of course).
tcell.Key constants and typing different key combinations in the terminal to see the generated tcell.EventKeys in the debug log. Until I pressed Ctrl+Alt+Backspace⊠:-D Yep, suddenly there went my XâŠ
Well, in Xterm, I actually do get key combinations with the Shift modifier. Also, combinations of several modifiers just work exactly as I expect. But not in URXvt. Hmm.
@movq@www.uninformativ.de that some lovely development from the initial one. Curious to know where this will lead!
Here am I looking at the different tcell.Key constants and typing different key combinations in the terminal to see the generated tcell.EventKeys in the debug log. Until I pressed Ctrl+Alt+Backspace⊠:-D Yep, suddenly there went my XâŠ
So far, it appears as if I can have either only Ctrl or Alt as modifiers. But not in combination. And Shift is just never ever set at all. Interesting.
Some work on the menu system to brighten my mood a little bit. No mouse support yet.
@prologic@twtxt.net Probably not, but thanks. đ Itâll get better.
@movq@www.uninformativ.de Anything we can do? Lend a listening ear? đ
Ainda ando pasmado com o facto de uma sĂ©rie cheia de body horror, violĂȘncia contra crianças, gore e violĂȘncia gratuita (#StrangerThings) estar a ser agressivamente marketizada para um pĂșblico infantil
Ontem um amigo de 9 anos do meu filho estava a contar-me como Ă© a melhor sĂ©rie de sempre, e eu ainda estou burro de como hĂĄ miĂșdos que estejam a ver isto
Btw nĂŁo tenho problemas com a sĂ©rie (acabei ontem a 5ÂȘ temp e acho profundamente meh), Ă© este esforço em vendĂȘ-la a crianças quando Ă© claramente uma sĂ©rie 16+ no mĂnimo
@prologic@twtxt.net Work and the general state of (gestures broadly) everything.
AmanhĂŁ vou rolar uma demo de Tidalcycles no primeiro meetup de livecoding do Porto :szterminal:
@movq@www.uninformativ.de Whatâs up? hmm đ§
Frustration level: Through the roof.
tt. Boy, is parsing the key names into tcell.EventKeys a horrible thing. This type consists of three information:
Ha, I just stumbled across https://codeberg.org/tslocum/cbind, perfect!
@movq@www.uninformativ.de I figure thatâs exactly what it is.
@bender@twtxt.net ICQ, yeah, I vaguely remember these times, despite I still know my ICQ number like it was yesterday. :-D
@shinyoukai@neko.laidback.moe No, itâs not dead. The one account in question actually is on jabber.org.
@bender@twtxt.net I vaguely remember this, some leftover from the old-style hashtags? The (#foo) stuff? đ€
Heh I thought I fixed that bug? (is it s abug?!)
@bender@twtxt.net 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.
@prologic@twtxt.net it really is not blank. It reads:
2026-01-12T23:34:11+01:00 (you must be root)
This week, Mu (”) get s bit more serious and starts to refactor the native backend (a lot). Soonâą we will support darwin/arm64, linux/arm64 and linux/amd64 (Yes, other forms of BSD will come!) â Mu (”) also last week grew concurrency support too! đ€Ł
@klaxzy@klaxzy.net nothing like a blank twt eh? đ
@shinyoukai@yume.laidback.moe Jabber = XMPP.
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@www.uninformativ.de 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@lyse.isobeef.org 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@www.uninformativ.de @prologic@twtxt.net 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@twtxt.net whatâs going on, Kiwu?
@kiwu@twtxt.net Oh? đ€ Whatâs up? Can you share? Or just having a hrd time? đ€
rustfmt. I now use similar tools for Python (black and isort).
@movq@www.uninformativ.de Welcome to the dark side đ€Ł
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@yume.laidback.moe Hopefully, yes. Havenât tried it yet.
@movq@www.uninformativ.de I donât think he is đ€
@shinyoukai@neko.laidback.moe mckinley is back? Where? đ€
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? đ€đ€Ż
âREMINDER: Laser pointers banned in Switzerlandâ
https://home.cern/news/official-news/cern/reminder-laser-pointers-banned-switzerland
@shinyoukai@neko.laidback.moe Whoohoo! Thatâs a start to cross-platform support đ€Ł
Patch applied!
** being goblin **
In response to my most recent week notes, Adrian shared this lovely quote on goblins with me. It comes from my favorite game designer, Avery Alder,
being goblin is a way of flagging that you want to include people not in spite of their sloppiness and uneven emotional growth, but because of itâââbecause goblins come as they are, and they grow in community with one another. Being goblin means being intergenerational in an un-pr ⊠â Read more
@movq@www.uninformativ.de 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.
@shinyoukai@neko.laidback.moe No email has arrived here? đ€
@shinyoukai@neko.laidback.moe Okay I pushed a commit that hopefully fixes this. I hope!
@shinyoukai@neko.laidback.moe Yes; however the interpreter is also platform dependent and relies on making raw syscalls. This is so the runtime semantics remain the same between the two execution modes.
Iâll see if I can add support for linux/amd64 and netbsd/amd64 for the VM at least.
@lyse@lyse.isobeef.org 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).
@shinyoukai@neko.laidback.moe if you donât show me the actual full stacktrace, I canât fix the problem đą
Most of it should work on other platforms, the bytecode VM that is. You may run into some platform quirks though that rely on syscall() â Let me know what you run into and Iâll try to fix them nw. The problem right now is I havenât even begun to start work on another platform/architecture yet.
Mu (”) is coming along really nicely đ€Ł Few things left to do (in order):
- Finish the concurrency support.
- Add support for sockets
- Add support for
linux/amd64
- Rewrite the heap allocator
- Rewrite Mu (”) in well umm Mu (”) đ
Hereâs a screenshot showing off the builtin help(): 
Itâs gone. đ
@shinyoukai@neko.laidback.moe 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.
** no beautiful things **
Thereâs this line in The Hobbit that haunts me. For one thing, it is part of a wider problematic habit running throughout all of Tolkien that, moving in the mythopoetic space, leads to these sweeping statements that define or collapse an entire culture into a single stroke. It seems to me to be like the most damning thing you could say about a culture, though:
Now goblins are cruel, wicked, and bad-hearted. They make no beautiful things, but they make many clever ones.
Emphasis my own, and the quote ⊠â Read more
@movq@www.uninformativ.de 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@lyse.isobeef.org 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@twtxt.net 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 âŠ
Hey folks! We have recently had a wonderful new release of #py5, read about the new 3D trimesh integration feature and the matplotlib TextPath integration.
That release was quickly followed by a release to fix some small issues that surfaced this last week. Please check out py5 0.10.9a1 and join us at https://github.com/py5coding/py5generator/discussions to share your experiences!
#CreativeCoding #Processing #Python #genuary (sorry for the hashtag spamming, I couldnât resist!)
Quer dizer que eu vou começar o ano com o Manjaro espandongando por conta de alguma atualização dos drivers de vĂdeo, Ă© isso?
Feeling nostalgic, for 3D-ish old game sprites, so I made one of myself.

I love it. It make me feel quite nostalgic.
@movq@www.uninformativ.de 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.
Work kills the soul
it sure can! đ€Ł
Make it so number one !
@movq@www.uninformativ.de Whatâs Email?! đ
@zvava@twtxt.net and the year of the Linux desktop, I swear! No more procrastination, this year is it.
Vacation: Doing crazy things like C on DOS, lots of Rust, bare-metal assembly code, everything is fine.
Back at work: How the fuck do I move an email in this web mail program? Am I stupid? đźâđš
@rrraksamam@twtxt.net down, boy! :-D
Post sobre o curso grĂĄtis na Udemy, complementar ao livro âAutomate the Boring Stuff with #Pythonâ (que tambĂ©m pode ser lido de graça no site do autor)
@kiwu@twtxt.net better now, with you around! đ
@lyse@lyse.isobeef.org Iâll let you guys know when/if itâs ready to get published. đ There are still rough edges and, obviously, very few widgets. Most importantly, a list view and a table widget are missing. But my vacation is over now, so things will crawl to a halt.
@prologic@twtxt.net Yep! I like that this distillation metaphor makes it explicit: You have to go ahead and actually distill something. It doesnât happen automatically. The metaphor acknowledges that this is work that needs to be done by someone.
âWhat is a PC compatible?â https://codon.org.uk/~mjg59/blog/p/what-is-a-pc-compatible/
@bender@twtxt.net Theyâre not completely impossible, but C makes it much easier to run into them. I think the key point is that in those âsafeâ languages, buffer overflows are caught and immediately crash the program (if not handled otherwise) instead of silently corrupting memory, not being noticed right away and maybe only later crashing at a different location, where it can be very hard to find the actual root cause. This is a big improvement in my book.
Some programmers are indeed horrible. Iâm guilty myself. :-)
I like the article.
I came across this on âWhy Is SQLite Coded In Câ, which I found interesting:
âThere has lately been a lot of interest in âsafeâ programming languages like Rust or Go in which it is impossible, or is at least difficult, to make common programming errors like memory leaks or array overruns.â
If thatâs true, then encountering those issues means the programmer is, simply, horrible?
@movq@www.uninformativ.de I quite like this part:
Many people write programs, but few stick with a program long enough to distill it.
I think this is finally a good metaphor to talk about âsimpleâ software:
https://oldbytes.space/@psf/115846939202097661
Distilled software.
I quote in full:
principles of software distillation:
Old software is usually small and new software is usually large. A distilled program can be old or new, but is always small, and is powerful by its choice of ideas, not its implementation size.
A distilled program has the conciseness of an initial version and the refinement of a final version.
A distilled program is a finished work, but remains hackable due to its small size, allowing it to serve as the starting point for new works.
Many people write programs, but few stick with a program long enough to distill it.
I often tried to tell people about âsimpleâ or âminimalisticâ software, âKISSâ, stuff like that, but they never understand â because everybody has a different idea of âsimpleâ. The term âsimpleâ is too abstract.
This is worth thinking about some more. đ€