Ooh, the #Tauon music player supports embedded lyrics and has a good-enough synchronized lyrics display

this might become a thing for me, it would be MUCH easier to edit and sync lyrics on PC before copying to mobile

It's also written in Python using PyInstaller :O
the only question then is whether this application will let me edit and sync on PC, and how good that is compared to Musicolet's version
okay Tauon does have an synchronized lyrics editor. the UX isn't as good as Musicolet's, but it's there.

in particular, Tauon's workflow is pretty smooth, and I'm quoting from the manual here "if you don't make any mistakes"

if you *do* make a mistake, particularly one where you advanced a line too early, well, good luck

AFAICT the best UX currently for that is to copy the text for that line, delete the line, insert a new one, and re-time it.
in Musicolet, you rewind a bit and tap the sync button at the right time. Musicolet's interactive timing marks the moment that a line *begins*, but Tauon's workflow is organized around you pressing the button when whatever it currently thinks is the current line ENDS
[inner computer gremlin voice] improve it
not really any dev instructions, and the "magic" `run.sh` that looks like the one-stop shop for development environment setup didn't work for me.

excuse me, what

```
if sethint_result is None:
logging.error("Failed to run SetHint, probably due to https://github.com/Aermoss/PySDL3/issues/35, will try a workaround")
sys.exit(1)
```

System libraries are not used when running in a venv · Issue #35 · Aermoss/PySDL3

0.9.8b3 Downstream report - Taiko2k/Tauon#1625 I can reproduce this 100% by running Tauon's clean venv script, which does this https://github.com/Taiko2k/Tauon/blob/d09209bd117d6b1d52842a45e06063de...

GitHub
some kind of quirk of `PySDL3-Build` that involves downloading a tarball of a bunch of .so directly from GitHub (😬) and which I seem to have to trigger manually
BUT, I managed to build it

oh

```
builtins._ = translation.gettext
```

oh dear

@SnoopJ Yeah... Calibre does that too...
@xgranade issue here is that the clever trick didn't actually work in at least one spot, but that might be a gaffe since the last release, I'm not on a tag
@xgranade yea, looks like some kind of bug they introduced since December. Guess I have more homework to do if I end up contributing anything.
@SnoopJ Yeah, there's a reason hooking things onto builtins is... inadvisable.

@xgranade yea I'm not even sure *how* it broke in that way, other than that I'm sure it's due to being excessively clever by binding it this way.

makes `global` look sophisticated!

@SnoopJ Global state is to be avoided, but there will always be some, I get it. Attaching global state to random stdlib modules is... not how I would suggest handling it.

@xgranade @SnoopJ I'm not sure Tauon or Calibre can be blamed for that one, since it's a longstanding convention for hooking UI string display for local translation: https://docs.python.org/3/library/gettext.html#internationalizing-your-programs-and-modules

Even the stdlib isn't really the origin of the convention, though, as Python's gettext layer inherited that convention from C. Hysterical raisins strike again!

gettext — Multilingual internationalization services

Source code: Lib/gettext.py The gettext module provides internationalization (I18N) and localization (L10N) services for your Python modules and applications. It supports both the GNU gettext messa...

Python documentation
@ancoghlan @SnoopJ Absolutely. It's more the practice of attaching it to a stdlib module that I was calling out.
@xgranade @SnoopJ I still kinda regret that we lost the double underscores on the import name of the builtins module in the Py3 transition, as it makes modifications to it look far too innocent.

@ancoghlan @SnoopJ Considering I've seen `import sys; sys.foo = bar` used to manage global state...

All joking aside, yeah, __builtins__ was a good name.