Patch attached, against trunk r13297 (2.5-dev), lyrics plugin only (5 files). A full copy of the patched plugin directory is at https://github.com/GlassOnTin/qmmp-lyrics/tree/trunk-port (one commit on top of the untouched r13297 tree).
What it does, in the lyrics window (Ctrl+2 dock and Ctrl+L dialog behave the same):
- The lyrics window gains an optional left pane listing the tracks of the playlist, like the playlist widget: "artist - title (duration)", file name when the title tag is empty, bold marker on the playing track. A toolbar button (view-media-playlist) toggles the pane.
- Prev / next buttons step through the pane and show that track's lyrics. They browse only; playback is untouched.
- A "Follow" toggle re-syncs the view to the playing track. Clicking another row turns it off, so the shown lyrics stay where you put them. Double click starts playing a row.
- Ctrl+L targets the playing track first, then the first selected track as before, then the first playlist track, so the dialog is not empty just because nothing is selected. The widget refetches on trackInfoChanged itself, gated by the follow flag; the old unconditional refetch is gone.
- Untagged files are looked up by file name instead of being skipped.
- New settings keys: [Lyrics] follow_playing (default true), playlist_shown (default true), splitter_state.
New strings are English only, translations not regenerated.
I verified the ported build for trunk: playlist sync, prev/next (with wrap-around), follow on/off, double click and both settings keys are covered by a test harness that loads the built plugin through QPluginLoader and drives the real PlayListManager / SoundCore, with the lyrics cache pre-seeded so no network is involved. The same code also builds against the installed 2.3.1 libraries, where it is in daily use here.
Limitations: streaming URLs in the pane are untested beyond the existing fetch path; very large playlists (>10k rows) are untested.