You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Undo button displays the number of available undo levels — text changes to
"Undo (N)" and the tooltip explains how many rename batches can be reverted
Case-transform modifier in replacement field tokens: = (unchanged), -
(lower), + (upper), ! (capitalise first char), * (Title Case)
Centre-align (^) in replacement field tokens
Toolbar-state and preview-delay persistence in Settings
tools/po_check.py: PO file inspection tool using the babel library
(statistics, untranslated entries, regex search, language diff) — replaces
ad-hoc grep/msgfmt usage that breaks on multi-line entries
src/pbrenamer/argparse_qt.py: add_qt_arguments() declares Qt CLI flags
(--style, --platform, …) as a proper argparse argument group; collected in args.qt_args as single-dash tokens ready for QApplication; Qt options are
hidden from the usage: line to reduce noise while remaining fully visible in
the --help output
tools/fix_po_files.py: utility to normalise PO file formatting in bulk
Comprehensive test suite covering all source modules at 100%; includes the
full main window (_on_preview, _refresh_conflicts, context menus, undo,
conflict detection, drag-and-drop, keyboard shortcuts, settings dialog,
file-info window, pattern-help dialog, presets, bookmarks, i18n bootstrap,
and all core modules)
Headless Qt test execution via QT_QPA_PLATFORM=offscreen in conftest.py; QMenu.exec patched at module level so no blocking dialog appears during CI
or local make test runs
Changed
main() now uses parse_args() instead of parse_known_args(); unknown
flags are rejected natively by argparse — _validate_qt_argv removed
Fixed
{L} search-pattern token now matches Unicode letters; accented Latin
(é, ê, ü, …), Cyrillic, Greek and all other Unicode letter categories
are captured correctly — was limited to ASCII [a-zA-Z], now uses [^\W\d_] which covers all \w characters that are neither digits nor
underscores
Qt built-in translations are now loaded alongside the application catalogue
so dialog buttons (OK, Cancel, Yes, No, …) are correctly translated
when a non-English language is selected
Pattern help dialog: HTML-escaped {1:<12} so the browser no longer
interprets <12> as an HTML tag
Fifteen # pragma: no cover guards on reachable logic replaced by targeted
tests: case-insensitive no-match in rename_using_plain_text, zero-width
regex guard, {newnum} CLI branch (start value, invalid start, no-match,
field error, collision k+=1), rename failure exit path, main() headless
dispatch, _parse_exif_datetime on malformed input, _read_iptc unknown
key, _apply_case unknown modifier