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
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.
@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).
httpd now sends the Last-Modified with UTC instead of GMT. Current example:
@lyse@lyse.isobeef.org Itâs already fixed:
https://github.com/openbsd/src/commit/668f1f05e71c5e979d278f1ad4568956226715ea
Question is when that fix will land. đ
On my way to having windows and mouse support:
https://movq.de/v/95bbbbd3e8/basic-windows.mp4
It would be cool to have something like Turbo Vision eventually.
(I considered just using Turbo Vision, but itâs a C++ library and thatâs not quite what Iâm looking for. But itâs not yet completely off the table.)
Well, you girls and guys are making cool things, and I have some progress to show as well. đ
https://movq.de/v/c0408a80b1/movwin.mp4
Scrolling widgets appears to work now. This is (mostly) Unicode-aware: Note how emojis like âđ â are double-width âcharactersâ and the widget system knows this. It doesnât try to place a âđ â in a location where thereâs only one cell available.
Same goes for that weird âĂ€â thingie, which is actually âaâ followed by U+0308 (a combining diacritic). Python itself thinks of this as two âcharactersâ, but they only occupy one cell on the screen. (Assuming your terminal supports this âŠ)
This library does the heavy Unicode lifting: https://github.com/jquast/wcwidth (Take a look at its implementation to learn how horrible Unicode and human languages are.)
The program itself looks like this, itâs a proper widget hierarchy:
https://movq.de/v/1d155106e2/s.png
(There is no input handling yet, hence some things are hardwired for the moment.)
$HOME is not specified it tries to resolve the user's home directory by user.Current().HomeDir. Maybe that's overkill, I have to check the XDG spec.
Ok, the standard library implementation is wonky at best, at least in regards to XDG, because it really doesnât implement it properly. https://github.com/golang/go/issues/62382 I stick to my own code then. It doesnât properly support anything else than Linux or Unixes that use XDG, but personally, I donât care about them anyway. And the cross-platform situation is a giant mess. Unsurprisingly.
If your very popular project with lots of stars on GitHub is over 10 years old, and youâre still at a pre-1.0 version because youâre using SemVer and a 1.0 would mean making some kind of commitment and thatâs somehow not desirable for you, then I think youâre doing something wrong. đ€
Got a nice conspiracy theory for you:
https://mastodon.social/@mcc/115670290552252848
Actually wait I just thought about this and realized that the precise timing of the ACTUAL GitHub seed bank, by which I mean the Arctic Code Vault, on 2020-02-02, makes it more or less a perfect snapshot of pre-Copilot GitHub. Also precisely timed before we all got brain damage from COVID. This is the only remaining archive of source code by people with a fully working sense of smell
(Bonus points because the Arctic World Archive is located in Svaldbard and thatâs the name of the AI in Stacey Kadeâs âCold Eternityâ.)
H⊠Ho⊠How have I not heard about vim-tagbar before? đł
@shinyoukai@neko.laidback.moe is that https://github.com/owncloud/ocis (Go based, instead of PHP đ€ź)?
@aelaraji@aelaraji.com I think Iâll just end up using the Official CrowdSec Go library đ€
@prologic@twtxt.net if done right, zs derivatives can even generate twtxt feeds alongside RSS for blogs as well
@lyse@lyse.isobeef.org I personally use twtAgent over here on Thunix (Also managed by deepend I believe) and then from time to time run wk -F ' ' '/\.txt/ {print $NF" "$(NF-1)}' $HOME/public_html/twtAgent.log | sed -e 's/\((\|)\|+\|;\|@\)//g' | sed '/^$/d'| sort -u to check for whoâs pulling this feed (Too lazy to alias it :â] ) .
Leaving this here just in case it might help a fellow Townie, Cheers!
Spam classifier https://github.com/igomez10/nspammer
@movq@www.uninformativ.de unison seems pretty fast for me, and quite nice looking on my macOS desktop. Itâs bsed on GLFW, but it seems to work quite well đ€
catppuccin latte was great for that. the muttrc color file i found on github, not so much
man and it calls home to see if I'm allowed to do that.
Because OP twtxt seems to be a cross-post from the Fediverse, I am bringing some context here. It refers to this GitHub issue. This comment explains why the issue described is happening:
This is usually due to notarization checks. E.g. the binaries are checked by the notarization service (âXProtectâ) which phones home to Apple. Depending on your network environment, this can take a long time. Once the executable has been run the results are usually cached, so any subsequent startup should be fast.
OP network must be running on 1,200 Baud modem, or less. đ€ I have never, ever, experienced any distinguishable delays.
â Excellent petit Ă©diteur de texte multi-plateforme (Linux, Mac, [âŠ] đ https://yom.li/notes/20251008110810 đ https://micro-editor.github.io/
url metadata field unequivocally treated as the canon feed url when calculating hashes, or are they ignored if they're not at least proper urls? do you just tolerate it if they're impersonating someone else's feed, or pointing to something that isn't even a feed at all?
(#abcdefghijkl https://example.com/tw.txt#:~:text=2025-10-01T10:28:00Z), because it can be simply hacked in to clients currently on hashv1 and provides an off-ramp to location-based addressing
I like that property (an off-ramp to location-based addressing), so I think I could live with that approach. â
(Iâm not sure why weâre using text fragments, though. Wouldnât that link to the first occurence of 2025-10-01T10:28:00Z? Thatâs not necessarily correct. And, to be proper URLs that Firefox and Chromium understand, it would also need to be written as 2025%2D10%2D01T10:28:00Z. The dash carries meaning, sadly. I think all this just creates needless complication. How about we just go with https://example.com/tw.txt#2025-10-01T10:28:00Z?)
Hi everyone, hereâs a little introduction of my twtxt client (still WIP).
The client Iâm developing is a single tenant project that runs entirely in the browser (it might use an optional backend).
Itâs entirely based on native web-components and vanilla JS, it is designed to act closer to a toolkit than a full-fledged client, allowing users to âDIYâ their own interface with pure html or plain javascript functions.
Users can also build their own engines by including a global javascript object that implement the defined internal API (TBD).
Iâm planning to build a system that is easy enough to build and use with any skill level, using only pure html (with a homebrew minimal template engine) or via plain JS (Iâll be also providing some pre-made templates too).
Everything can be self-hosted on any static hosting provider, this allows to spread twtxt within communities like Neocities and similarly hosted websites (basically any Indieweb/Smallweb/Digital garden website and any of the common GitHub/Lab/Berg/lify Pages).
It will be probably named something like TxtCraft or craf.txt but Iâm not really sure yet⊠đ€ (Maybe some suggestions could help)
Iâm still in the experimental phase, so thereâs no decent source-code to share yet, but it will soon enough!
Gemini-PDA-Linux-Scripts https://github.com/matthewbaggett/Gemini-PDA-Linux-Scripts
DebianTP2 · gemian https://github.com/gemian/gemini-keyboard-apps/wiki/DebianTP2
nicks? i remember reading somewhere whitespace should not be allowed, but i don't see it in the spec on twtxt.dev â in fact, are there any other resources on twtxt extensions outside of twtxt.dev?
@zvava@twtxt.net @movq@www.uninformativ.de Iâm not entirely sure about the spaces, but maybe they were omitted to simplify parsing of mentions in the form of @<nick url>. If the next token after the @<nick does not look like a URL, itâs not a mention but regular text. This is just wild guessing, though.
Looking at the regex and tests in the original twtxt reference implementation seems to confirm that theory in the sense as it relies on whitespace as the delimiter:
https://lyse.isobeef.org/tmp/screenshot-2025-09-17-21-30-25.png
Another thing about nicks is that the original twtxt reference implementation converts nicks to all lowercase:
https://lyse.isobeef.org/tmp/screenshot-2025-09-17-21-20-39.png
You probably know this already, the original twtxt file format specification can be found here: https://twtxt.readthedocs.io/en/latest/user/twtxtfile.html
As for extensions, I donât know of anything outside of twtxt.dev that has actually been (partially) implemented. However, there is also the issue tracker of the official reference implementation. You might wanna dig through that. For example, there is an alternative suggestions of multiline messages: https://github.com/buckket/twtxt/issues/157
@kat@yarn.girlonthemoon.xyz, see this one, regarding âAnubisâ (which I believe you use, right?): https://github.com/eternal-flame-AD/pow-buster
This is the best hack Iâve seen in a while: https://github.com/mmulet/term.everything Finally a wayland compositor for the rest of us ;-)
@lyse@lyse.isobeef.org You might enjoy this one: https://github.com/TheMozg/awk-raycaster
Wooaahh, my goodness, this is completely crazy! :-D https://gist.github.com/Keith-S-Thompson/6920347
@prologic@twtxt.net Hereâs one: https://github.com/vmykh/printer_labs/blob/master/escp2ref.pdf
aced pour AD https://github.com/garrettfoster13/aced
IDS avec machine learning https://github.com/stratosphereips/StratosphereLinuxIPS
@lyse@lyse.isobeef.org we NEED syntax highlighting in our man pages!!!! (FWIW i think bat can do that lol)
@movq@www.uninformativ.de yeah man pages are good but these days i kinda prefer tldr and especially cheat.sh
Weil mir copyparty gerade stĂ€ndig begegnet. Nun auch hier. Der Dateiserver fĂŒr ĂŒberall.
@kingdomcome@yarn.girlonthemoon.xyz I REPLIED TO THIS AND NOW ITâS NOT SHOWING WTFFFF anyway what i said was that i have some fun stuff in the daily note template already like ASCII weather forecast from wttr AND a jenny holzer quote from fortune!!! i should add more fun stuff!!!
@kat@yarn.girlonthemoon.xyz I HIT ENTER BEFORE I COULD PASTE LMFAOOOOOOOOO I MEANT TO ADD THIS https://github.com/9001/copyparty/
check my shit plis! xD https://dev1lsconf.github.io/
Since Wayland compositors handle input devices on a lower level than X11 window managers, every compositor has to figure out on their own what a âmouse wheel clickâ is:
(I think âWayland compositorâ is a misnomer. They are full-blown display servers that also do compositing, plus Wayland window management, plus X11 window management.)
One can only hope that all this eventually gets moved into the wlroots library. (Iâm not sure if thatâs possible, nor if people would want that.)
this is pretty cool, especially with a customized dmenu build:
I give up.
Letâs try again next year. I donât have the stamina. Death by a thousand paper cuts.
Canât set up a meaningful taskbar: https://github.com/labwc/labwc/discussions/2924 (This is not a labwc issue, itâs a generic issue in the broader Wayland ecosystem.)
lo prometido es deuda.. aqui les dejo mi configuracion.. https://github.com/dev1lsconf/nixos-config #Hyprland + #NixOS
Linux Hardening Guide https://madaidans-insecurities.github.io/guides/linux-hardening.html