rummage 4.24.1__tar.gz → 4.26__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. {rummage-4.24.1 → rummage-4.26}/PKG-INFO +3 -3
  2. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/.snippets/abbr.md +1 -0
  3. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/about/changelog.md +13 -0
  4. rummage-4.26/docs/src/markdown/images/settings_search.png +0 -0
  5. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/search.md +12 -0
  6. {rummage-4.24.1 → rummage-4.26}/gui.fbp +81 -9
  7. {rummage-4.24.1 → rummage-4.26}/pyproject.toml +2 -2
  8. {rummage-4.24.1 → rummage-4.26}/requirements/project.txt +2 -2
  9. {rummage-4.24.1 → rummage-4.26}/rummage/lib/__meta__.py +1 -1
  10. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/app/custom_app.py +8 -8
  11. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/result_lists.py +13 -4
  12. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/about/changelog.html +13 -0
  13. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/about/contributing.html +2 -2
  14. rummage-4.26/rummage/lib/gui/data/docs/images/settings_search.png +0 -0
  15. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/search.html +12 -0
  16. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/usage.html +2 -2
  17. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/import_settings_dialog.py +1 -1
  18. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/rummage_dialog.py +37 -6
  19. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/settings_dialog.py +8 -0
  20. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/gui.py +13 -6
  21. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/settings/__init__.py +24 -0
  22. {rummage-4.24.1 → rummage-4.26}/rummage/lib/rumcore/__init__.py +20 -30
  23. rummage-4.24.1/docs/src/markdown/images/settings_search.png +0 -0
  24. rummage-4.24.1/rummage/lib/gui/data/docs/images/settings_search.png +0 -0
  25. {rummage-4.24.1 → rummage-4.26}/.coveragerc +0 -0
  26. {rummage-4.24.1 → rummage-4.26}/.gitignore +0 -0
  27. {rummage-4.24.1 → rummage-4.26}/LICENSE.md +0 -0
  28. {rummage-4.24.1 → rummage-4.26}/README.md +0 -0
  29. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/.snippets/links.md +0 -0
  30. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/.snippets/refs.md +0 -0
  31. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/about/contributing.md +0 -0
  32. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/about/license.md +0 -0
  33. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/extras.md +0 -0
  34. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/chain_button.png +0 -0
  35. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/chain_mode.png +0 -0
  36. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/chains.png +0 -0
  37. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/content_tab.png +0 -0
  38. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/file_pattern.png +0 -0
  39. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/files_tab.png +0 -0
  40. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/html_export.png +0 -0
  41. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/limit_search_panel.png +0 -0
  42. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/load_search.png +0 -0
  43. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/logo.svg +0 -0
  44. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/plugin_input.png +0 -0
  45. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/plugin_toggle.png +0 -0
  46. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/preview.png +0 -0
  47. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/regex_buttons.png +0 -0
  48. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/regex_tester.png +0 -0
  49. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/rummage.png +0 -0
  50. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/rummage.svg +0 -0
  51. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/save_search.png +0 -0
  52. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/search_replace_inputs.png +0 -0
  53. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/search_replace_panel.png +0 -0
  54. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/search_tab.png +0 -0
  55. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/settings_backup.png +0 -0
  56. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/settings_editor.png +0 -0
  57. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/settings_encoding.png +0 -0
  58. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/settings_export.png +0 -0
  59. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/settings_general.png +0 -0
  60. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/settings_history.png +0 -0
  61. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/settings_import.png +0 -0
  62. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/settings_notify.png +0 -0
  63. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/thunar-basic.png +0 -0
  64. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/thunar-conditions.png +0 -0
  65. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/images/thunar-custom.png +0 -0
  66. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/index.md +0 -0
  67. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/installation.md +0 -0
  68. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/preferences.md +0 -0
  69. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/sitemap.md +0 -0
  70. {rummage-4.24.1 → rummage-4.26}/docs/src/markdown/usage.md +0 -0
  71. {rummage-4.24.1 → rummage-4.26}/docs/theme/announce.html +0 -0
  72. {rummage-4.24.1 → rummage-4.26}/docs/theme/assets/pymdownx-extras/extra-95634471d6.css +0 -0
  73. {rummage-4.24.1 → rummage-4.26}/docs/theme/assets/pymdownx-extras/extra-loader-Ccztcqfq.js +0 -0
  74. {rummage-4.24.1 → rummage-4.26}/docs/theme/main.html +0 -0
  75. {rummage-4.24.1 → rummage-4.26}/docs/theme/nav.html +0 -0
  76. {rummage-4.24.1 → rummage-4.26}/docs/theme/sitemap.html +0 -0
  77. {rummage-4.24.1 → rummage-4.26}/hatch_build.py +0 -0
  78. {rummage-4.24.1 → rummage-4.26}/requirements/docs.txt +0 -0
  79. {rummage-4.24.1 → rummage-4.26}/requirements/extras.txt +0 -0
  80. {rummage-4.24.1 → rummage-4.26}/requirements/lint.txt +0 -0
  81. {rummage-4.24.1 → rummage-4.26}/requirements/setup.txt +0 -0
  82. {rummage-4.24.1 → rummage-4.26}/requirements/test-project.txt +0 -0
  83. {rummage-4.24.1 → rummage-4.26}/requirements/test.txt +0 -0
  84. {rummage-4.24.1 → rummage-4.26}/rummage/__init__.py +0 -0
  85. {rummage-4.24.1 → rummage-4.26}/rummage/__main__.py +0 -0
  86. {rummage-4.24.1 → rummage-4.26}/rummage/lib/__init__.py +0 -0
  87. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/__init__.py +0 -0
  88. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/actions/__init__.py +0 -0
  89. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/actions/checksum/__init__.py +0 -0
  90. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/actions/checksum/sum_hashes.py +0 -0
  91. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/actions/checksum/tiger.py +0 -0
  92. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/actions/checksum/whirlpool.py +0 -0
  93. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/actions/export_csv.py +0 -0
  94. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/actions/export_html.py +0 -0
  95. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/actions/fileops.py +0 -0
  96. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/actions/sanitize_json.py +0 -0
  97. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/actions/updates.py +0 -0
  98. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/app/__init__.py +0 -0
  99. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/app/platform_window_focus.py +0 -0
  100. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/app/rummage_app.py +0 -0
  101. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/__init__.py +0 -0
  102. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/autocomplete_combo.py +0 -0
  103. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/collapsible_pane.py +0 -0
  104. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/custom_statusbar.py +0 -0
  105. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/date_picker.py +0 -0
  106. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/dock_icon.py +0 -0
  107. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/dynamic_lists.py +0 -0
  108. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/encoding_list.py +0 -0
  109. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/file_picker.py +0 -0
  110. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/load_search_list.py +0 -0
  111. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/pick_button.py +0 -0
  112. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/search_chain_list.py +0 -0
  113. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/search_error_list.py +0 -0
  114. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/time_picker.py +0 -0
  115. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/controls/webview.py +0 -0
  116. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/__init__.py +0 -0
  117. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/arrow_down.png +0 -0
  118. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/arrow_left.png +0 -0
  119. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/arrow_right.png +0 -0
  120. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/arrow_up.png +0 -0
  121. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/binary.png +0 -0
  122. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/doc.png +0 -0
  123. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/404.html +0 -0
  124. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/about/license.html +0 -0
  125. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/css/theme.css +0 -0
  126. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/extras.html +0 -0
  127. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/chain_button.png +0 -0
  128. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/chain_mode.png +0 -0
  129. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/chains.png +0 -0
  130. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/content_tab.png +0 -0
  131. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/file_pattern.png +0 -0
  132. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/files_tab.png +0 -0
  133. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/html_export.png +0 -0
  134. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/limit_search_panel.png +0 -0
  135. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/load_search.png +0 -0
  136. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/logo.svg +0 -0
  137. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/plugin_input.png +0 -0
  138. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/plugin_toggle.png +0 -0
  139. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/preview.png +0 -0
  140. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/regex_buttons.png +0 -0
  141. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/regex_tester.png +0 -0
  142. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/rummage.png +0 -0
  143. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/rummage.svg +0 -0
  144. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/save_search.png +0 -0
  145. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/search_replace_inputs.png +0 -0
  146. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/search_replace_panel.png +0 -0
  147. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/search_tab.png +0 -0
  148. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_backup.png +0 -0
  149. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_editor.png +0 -0
  150. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_encoding.png +0 -0
  151. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_export.png +0 -0
  152. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_general.png +0 -0
  153. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_history.png +0 -0
  154. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_import.png +0 -0
  155. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_notify.png +0 -0
  156. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/thunar-basic.png +0 -0
  157. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/thunar-conditions.png +0 -0
  158. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/images/thunar-custom.png +0 -0
  159. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/index.html +0 -0
  160. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/installation.html +0 -0
  161. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/js/theme.js +0 -0
  162. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/preferences.html +0 -0
  163. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/docs/sitemap.html +0 -0
  164. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/error.png +0 -0
  165. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/glass.png +0 -0
  166. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/results.css +0 -0
  167. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage.icns +0 -0
  168. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage.ico +0 -0
  169. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage.png +0 -0
  170. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage_1024.png +0 -0
  171. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage_128.png +0 -0
  172. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage_16.png +0 -0
  173. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage_256.png +0 -0
  174. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage_32.png +0 -0
  175. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage_40.png +0 -0
  176. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage_48.png +0 -0
  177. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage_512.png +0 -0
  178. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/rummage_mac.png +0 -0
  179. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/data/sorttable.js +0 -0
  180. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/__init__.py +0 -0
  181. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/checksum_dialog.py +0 -0
  182. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/column_dialog.py +0 -0
  183. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/delete_dialog.py +0 -0
  184. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/edit_search_chain_dialog.py +0 -0
  185. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/error_text_dialog.py +0 -0
  186. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/export_settings_dialog.py +0 -0
  187. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/file_ext_dialog.py +0 -0
  188. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/generic_dialogs.py +0 -0
  189. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/html_dialog.py +0 -0
  190. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/load_search_dialog.py +0 -0
  191. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/msg_dialogs.py +0 -0
  192. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/overwrite_dialog.py +0 -0
  193. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/regex_test_dialog.py +0 -0
  194. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/save_search_dialog.py +0 -0
  195. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/search_chain_dialog.py +0 -0
  196. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/search_error_dialog.py +0 -0
  197. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/dialogs/support_info_dialog.py +0 -0
  198. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/localization/__init__.py +0 -0
  199. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/localization/locale/en_US/LC_MESSAGES/rummage.po +0 -0
  200. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/localization/locale/ru_RU/LC_MESSAGES/rummage.po +0 -0
  201. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/notify/__init__.py +0 -0
  202. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/notify/notify_linux.py +0 -0
  203. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/notify/notify_osx.py +0 -0
  204. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/notify/notify_windows.py +0 -0
  205. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/notify/util.py +0 -0
  206. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/util/__init__.py +0 -0
  207. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/util/colors.py +0 -0
  208. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/util/images.py +0 -0
  209. {rummage-4.24.1 → rummage-4.26}/rummage/lib/gui/util/png.py +0 -0
  210. {rummage-4.24.1 → rummage-4.26}/rummage/lib/rumcore/text_decode.py +0 -0
  211. {rummage-4.24.1 → rummage-4.26}/rummage/lib/rumcore/util.py +0 -0
  212. {rummage-4.24.1 → rummage-4.26}/tests/__init__.py +0 -0
  213. {rummage-4.24.1 → rummage-4.26}/tests/test_rumcore.py +0 -0
  214. {rummage-4.24.1 → rummage-4.26}/tests/test_text_decode.py +0 -0
  215. {rummage-4.24.1 → rummage-4.26}/tests/test_versions.py +0 -0
  216. {rummage-4.24.1 → rummage-4.26}/tests/util.py +0 -0
  217. {rummage-4.24.1 → rummage-4.26}/tools/__init__.py +0 -0
  218. {rummage-4.24.1 → rummage-4.26}/tools/gen_docs.py +0 -0
  219. {rummage-4.24.1 → rummage-4.26}/tools/gui_patch.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rummage
3
- Version: 4.24.1
3
+ Version: 4.26
4
4
  Summary: A GUI search and replace app.
5
5
  Project-URL: Homepage, https://github.com/facelessuser/Rummage
6
6
  Author-email: Isaac Muse <Isaac.Muse@gmail.com>
@@ -27,12 +27,12 @@ Requires-Dist: backrefs>=7.0
27
27
  Requires-Dist: bracex>=3.0
28
28
  Requires-Dist: chardet>=7.4.3
29
29
  Requires-Dist: coloraide>=8.10
30
- Requires-Dist: filelock>=3.29.4
30
+ Requires-Dist: filelock>=3.29.7
31
31
  Requires-Dist: markdown>=3.10.2
32
32
  Requires-Dist: pygments>=2.19.2
33
33
  Requires-Dist: pymdown-extensions>=11.0
34
34
  Requires-Dist: send2trash>=2.1.0
35
- Requires-Dist: wcmatch<11.0,>=10.2
35
+ Requires-Dist: wcmatch<12.0,>=11.0
36
36
  Requires-Dist: wxpython>=4.1.0
37
37
  Provides-Extra: extras
38
38
  Requires-Dist: faust-cchardet>=2.1.19; extra == 'extras'
@@ -1 +1,2 @@
1
1
  *[JSON]: JavaScript Object Notation
2
+ *[ZSH]: Z Shell
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.26
4
+
5
+ - **NEW**: Show file sizes in proper, various increments: bytes, KB, MB, and GB.
6
+ - **NEW**: Add control to select file size unit types in limiter panel.
7
+ - **FIX**: Fix issue where directory picker for target folder to search would not start with the current, specified
8
+ directory, even when it is valid.
9
+
10
+ ## 4.25
11
+
12
+ - **NEW**: Require `wcmatch` 11.0+.
13
+ - **NEW**: Add new "ZSH number range" option in settings to enable ZSH style number ranges in glob patterns (`<0-9>`).
14
+ - **FIX**: Fix an issue where logging would break.
15
+
3
16
  ## 4.24.1
4
17
 
5
18
  - **NEW**: Fix URL handling in documentation rendering in `webview`.
@@ -144,6 +144,18 @@ Pattern | Meaning
144
144
  > If you need to escape `-` or `|`, you can put them in a sequence: `[-|]`. Remember to place `-` at the beginning of
145
145
  > a sequence as `-` is also used to specify character ranges: `[a-z]`.
146
146
 
147
+ #### ZSH Number Ranges
148
+
149
+ ZSH number ranges are a simple syntax for specifying a simple range of numbers via `<0-100>`. Ends can also be omitted
150
+ allowing for unbounded ranges: `<->`, `<-100>`, `<0-100>`, etc. It should be noted that numbers must be whole, positive
151
+ numbers and manually specified numbers greater than 19 digits will be truncated.
152
+
153
+ ZSH number ranges also handle numbers padded with zeros, so `<0-9>` would match `5`, `05`, `005`, etc. You can pad your
154
+ match pattern with zeros (`<0010-0090>`), but it has no affect on the actual search. Input numbers will be normalized
155
+ (`<10-90>`) and ZSH padding number handling is always the same.
156
+
157
+ This can be enabled in [Preferences](./preferences.md#search).
158
+
147
159
  #### Extended Match Syntax
148
160
 
149
161
  In [Preferences](./preferences.md#search), you can also enable extended match patterns. Extended match patterns allow
@@ -3106,9 +3106,9 @@
3106
3106
  </object>
3107
3107
  <object class="sizeritem" expanded="false">
3108
3108
  <property name="border">5</property>
3109
- <property name="flag">wxBOTTOM|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL</property>
3109
+ <property name="flag">wxALL</property>
3110
3110
  <property name="proportion">0</property>
3111
- <object class="wxStaticText" expanded="false">
3111
+ <object class="wxChoice" expanded="false">
3112
3112
  <property name="BottomDockable">1</property>
3113
3113
  <property name="LeftDockable">1</property>
3114
3114
  <property name="RightDockable">1</property>
@@ -3122,6 +3122,7 @@
3122
3122
  <property name="caption"></property>
3123
3123
  <property name="caption_visible">1</property>
3124
3124
  <property name="center_pane">0</property>
3125
+ <property name="choices">&quot;bytes&quot; &quot;KB&quot; &quot;MB&quot; &quot;GB&quot; &quot;TB&quot;</property>
3125
3126
  <property name="close_button">1</property>
3126
3127
  <property name="context_help"></property>
3127
3128
  <property name="context_menu">1</property>
@@ -3137,8 +3138,6 @@
3137
3138
  <property name="gripper">0</property>
3138
3139
  <property name="hidden">0</property>
3139
3140
  <property name="id">wxID_ANY</property>
3140
- <property name="label">KB</property>
3141
- <property name="markup">0</property>
3142
3141
  <property name="max_size"></property>
3143
3142
  <property name="maximize_button">0</property>
3144
3143
  <property name="maximum_size"></property>
@@ -3146,7 +3145,7 @@
3146
3145
  <property name="minimize_button">0</property>
3147
3146
  <property name="minimum_size"></property>
3148
3147
  <property name="moveable">1</property>
3149
- <property name="name">m_size_type_label</property>
3148
+ <property name="name">m_size_type_choice</property>
3150
3149
  <property name="pane_border">1</property>
3151
3150
  <property name="pane_position"></property>
3152
3151
  <property name="pane_size"></property>
@@ -3154,16 +3153,20 @@
3154
3153
  <property name="pin_button">1</property>
3155
3154
  <property name="pos"></property>
3156
3155
  <property name="resize">Resizable</property>
3156
+ <property name="selection">1</property>
3157
3157
  <property name="show">1</property>
3158
3158
  <property name="size"></property>
3159
3159
  <property name="style"></property>
3160
- <property name="subclass"></property>
3160
+ <property name="subclass">; ; forward_declare</property>
3161
3161
  <property name="toolbar_pane">0</property>
3162
3162
  <property name="tooltip"></property>
3163
+ <property name="validator_data_type"></property>
3164
+ <property name="validator_style">wxFILTER_NONE</property>
3165
+ <property name="validator_type">wxDefaultValidator</property>
3166
+ <property name="validator_variable"></property>
3163
3167
  <property name="window_extra_style"></property>
3164
3168
  <property name="window_name"></property>
3165
3169
  <property name="window_style"></property>
3166
- <property name="wrap">-1</property>
3167
3170
  </object>
3168
3171
  </object>
3169
3172
  </object>
@@ -8765,12 +8768,81 @@
8765
8768
  <event name="OnCheckBox">on_fullfile_toggle</event>
8766
8769
  </object>
8767
8770
  </object>
8771
+ <object class="gbsizeritem" expanded="false">
8772
+ <property name="border">5</property>
8773
+ <property name="colspan">1</property>
8774
+ <property name="column">0</property>
8775
+ <property name="flag">wxALL</property>
8776
+ <property name="row">4</property>
8777
+ <property name="rowspan">1</property>
8778
+ <object class="wxCheckBox" expanded="false">
8779
+ <property name="BottomDockable">1</property>
8780
+ <property name="LeftDockable">1</property>
8781
+ <property name="RightDockable">1</property>
8782
+ <property name="TopDockable">1</property>
8783
+ <property name="aui_layer">0</property>
8784
+ <property name="aui_name"></property>
8785
+ <property name="aui_position">0</property>
8786
+ <property name="aui_row">0</property>
8787
+ <property name="best_size"></property>
8788
+ <property name="bg"></property>
8789
+ <property name="caption"></property>
8790
+ <property name="caption_visible">1</property>
8791
+ <property name="center_pane">0</property>
8792
+ <property name="checked">0</property>
8793
+ <property name="close_button">1</property>
8794
+ <property name="context_help"></property>
8795
+ <property name="context_menu">1</property>
8796
+ <property name="default_pane">0</property>
8797
+ <property name="dock">Dock</property>
8798
+ <property name="dock_fixed">0</property>
8799
+ <property name="docking">Left</property>
8800
+ <property name="drag_accept_files">0</property>
8801
+ <property name="enabled">1</property>
8802
+ <property name="fg"></property>
8803
+ <property name="floatable">1</property>
8804
+ <property name="font"></property>
8805
+ <property name="gripper">0</property>
8806
+ <property name="hidden">0</property>
8807
+ <property name="id">wxID_ANY</property>
8808
+ <property name="label">ZSH Number Range</property>
8809
+ <property name="max_size"></property>
8810
+ <property name="maximize_button">0</property>
8811
+ <property name="maximum_size"></property>
8812
+ <property name="min_size"></property>
8813
+ <property name="minimize_button">0</property>
8814
+ <property name="minimum_size"></property>
8815
+ <property name="moveable">1</property>
8816
+ <property name="name">m_zsh_numrange_checkbox</property>
8817
+ <property name="pane_border">1</property>
8818
+ <property name="pane_position"></property>
8819
+ <property name="pane_size"></property>
8820
+ <property name="permission">protected</property>
8821
+ <property name="pin_button">1</property>
8822
+ <property name="pos"></property>
8823
+ <property name="resize">Resizable</property>
8824
+ <property name="show">1</property>
8825
+ <property name="size"></property>
8826
+ <property name="style"></property>
8827
+ <property name="subclass">; ; forward_declare</property>
8828
+ <property name="toolbar_pane">0</property>
8829
+ <property name="tooltip"></property>
8830
+ <property name="validator_data_type"></property>
8831
+ <property name="validator_style">wxFILTER_NONE</property>
8832
+ <property name="validator_type">wxDefaultValidator</property>
8833
+ <property name="validator_variable"></property>
8834
+ <property name="window_extra_style"></property>
8835
+ <property name="window_name"></property>
8836
+ <property name="window_style"></property>
8837
+ <event name="OnCheckBox">on_zsh_numrange_toggle</event>
8838
+ </object>
8839
+ </object>
8768
8840
  <object class="gbsizeritem" expanded="false">
8769
8841
  <property name="border">5</property>
8770
8842
  <property name="colspan">2</property>
8771
8843
  <property name="column">0</property>
8772
8844
  <property name="flag">wxEXPAND | wxALL</property>
8773
- <property name="row">4</property>
8845
+ <property name="row">5</property>
8774
8846
  <property name="rowspan">1</property>
8775
8847
  <object class="wxStaticLine" expanded="false">
8776
8848
  <property name="BottomDockable">1</property>
@@ -8832,7 +8904,7 @@
8832
8904
  <property name="colspan">2</property>
8833
8905
  <property name="column">0</property>
8834
8906
  <property name="flag">wxEXPAND</property>
8835
- <property name="row">5</property>
8907
+ <property name="row">6</property>
8836
8908
  <property name="rowspan">1</property>
8837
8909
  <object class="wxGridBagSizer" expanded="false">
8838
8910
  <property name="empty_cell_size"></property>
@@ -153,7 +153,7 @@ legacy_tox_ini = """
153
153
  [tox]
154
154
  skipsdist=true
155
155
  envlist=
156
- {py39,py310,py311,py312,py313,py314},
156
+ {py310,py311,py312,py313,py314},
157
157
  lint
158
158
 
159
159
  [testenv]
@@ -181,6 +181,6 @@ deps =
181
181
  -rrequirements/docs.txt
182
182
  commands =
183
183
  {envbindir}/zensical build -f zensical.yml --clean
184
- pyspelling -j 0
184
+ pyspelling -j 8
185
185
  {envpython} {toxinidir}/tools/gen_docs.py --verbose --test
186
186
  """
@@ -1,9 +1,9 @@
1
1
  chardet>=7.4.3
2
2
  backrefs>=7.0
3
3
  bracex>=3.0
4
- wcmatch>=10.2,<11.0
4
+ wcmatch>=11.0,<12.0
5
5
  wxpython>=4.1.0
6
- filelock>=3.29.4
6
+ filelock>=3.29.7
7
7
  send2trash>=2.1.0
8
8
  markdown>=3.10.2
9
9
  pymdown-extensions>=11.0
@@ -189,7 +189,7 @@ def parse_version(ver):
189
189
 
190
190
 
191
191
  # (major, minor, micro, release type, pre-release build, post-release build, development-release)
192
- __version_info__ = Version(4, 24, 1, 'final')
192
+ __version_info__ = Version(4, 26, 0, 'final')
193
193
  __version__ = __version_info__._get_canonical()
194
194
  __app__ = "Rummage"
195
195
  __status__ = __version_info__[3]
@@ -297,9 +297,9 @@ class CustomLog(wx.Log):
297
297
  self.file_lock = FileLock(self.file_name + '.lock')
298
298
 
299
299
  try:
300
- with self.file_lock.acquire(1):
301
- with open(self.file_name, "w", "utf-8", errors='strict') as f:
302
- f.write("")
300
+ with self.file_lock:
301
+ with open(self.file_name, "w", encoding='utf-8', errors='strict'):
302
+ pass
303
303
  except Exception:
304
304
  self.file_name = None
305
305
 
@@ -312,7 +312,7 @@ class CustomLog(wx.Log):
312
312
 
313
313
  try:
314
314
  if self.file_name is not None:
315
- with self.file_lock.acquire(1):
315
+ with self.file_lock:
316
316
  with open(self.file_name, 'a', encoding='utf-8', errors='strict') as f:
317
317
  f.write(msg)
318
318
  else:
@@ -389,9 +389,9 @@ class CustomLogGui(wx.LogGui):
389
389
  self.debug = debug
390
390
 
391
391
  try:
392
- with self.file_lock.acquire(1):
393
- with open(self.file_name, "w", "utf-8", errors='strict') as f:
394
- f.write("")
392
+ with self.file_lock:
393
+ with open(self.file_name, "w", encoding='utf-8', errors='strict'):
394
+ pass
395
395
  except Exception:
396
396
  self.file_name = None
397
397
 
@@ -402,7 +402,7 @@ class CustomLogGui(wx.LogGui):
402
402
 
403
403
  try:
404
404
  if self.file_name is not None:
405
- with self.file_lock.acquire(1):
405
+ with self.file_lock:
406
406
  with open(self.file_name, 'a', encoding='utf-8', errors='strict') as f:
407
407
  f.write(msg)
408
408
  else:
@@ -20,7 +20,6 @@ IN THE SOFTWARE.
20
20
  """
21
21
  import time
22
22
  import wx
23
- import decimal
24
23
  import os
25
24
  import functools
26
25
  from .dynamic_lists import DynamicList, USE_SAMPLE_SIZE
@@ -324,7 +323,7 @@ class ResultFileList(CommonOperationsMixin, DynamicList):
324
323
  os.path.basename(obj.name),
325
324
  0,
326
325
  obj.ext,
327
- decimal.Decimal(obj.size) / decimal.Decimal(1024),
326
+ obj.size,
328
327
  os.path.dirname(obj.name),
329
328
  '',
330
329
  obj.modified,
@@ -342,7 +341,7 @@ class ResultFileList(CommonOperationsMixin, DynamicList):
342
341
  os.path.basename(obj.info.name),
343
342
  1,
344
343
  obj.info.ext,
345
- decimal.Decimal(obj.info.size) / decimal.Decimal(1024),
344
+ obj.info.size,
346
345
  os.path.dirname(obj.info.name),
347
346
  obj.info.encoding,
348
347
  obj.info.modified,
@@ -374,7 +373,17 @@ class ResultFileList(CommonOperationsMixin, DynamicList):
374
373
  if not absolute:
375
374
  item = self.itemIndexMap[item]
376
375
  if real == FILE_SIZE:
377
- return '%.2fKB' % round(self.itemDataMap[item][FILE_SIZE], 2)
376
+ s = self.itemDataMap[item][FILE_SIZE]
377
+ if s < 1e3:
378
+ return f"{s:d} bytes"
379
+ elif s < 1e6:
380
+ return f'{s / 1e3:.2f} KB'
381
+ elif s < 1e9:
382
+ return f'{s / 1e6:.2f} MB'
383
+ elif s < 1e12:
384
+ return f'{s / 1e9:.2f} GB'
385
+ else:
386
+ return f'{s / 1e12:.2f} TB'
378
387
  elif real in (FILE_MOD, FILE_CRE):
379
388
  if self.international:
380
389
  return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(self.itemDataMap[item][real]))
@@ -25,6 +25,19 @@
25
25
 
26
26
  <!-- Table of Content (Don't show for static sites) -->
27
27
  <h1 id="changelog">Changelog</h1>
28
+ <h2 id="426">4.26</h2>
29
+ <ul>
30
+ <li><strong>NEW</strong>: Show file sizes in proper, various increments: bytes, KB, MB, and GB.</li>
31
+ <li><strong>NEW</strong>: Add control to select file size unit types in limiter panel.</li>
32
+ <li><strong>FIX</strong>: Fix issue where directory picker for target folder to search would not start with the current, specified
33
+ directory, even when it is valid.</li>
34
+ </ul>
35
+ <h2 id="425">4.25</h2>
36
+ <ul>
37
+ <li><strong>NEW</strong>: Require <code>wcmatch</code> 11.0+.</li>
38
+ <li><strong>NEW</strong>: Add new "<abbr title="Z Shell">ZSH</abbr> number range" option in settings to enable <abbr title="Z Shell">ZSH</abbr> style number ranges in glob patterns (<code>&lt;0-9&gt;</code>).</li>
39
+ <li><strong>FIX</strong>: Fix an issue where logging would break.</li>
40
+ </ul>
28
41
  <h2 id="4241">4.24.1</h2>
29
42
  <ul>
30
43
  <li><strong>NEW</strong>: Fix URL handling in documentation rendering in <code>webview</code>.</li>
@@ -31,7 +31,7 @@
31
31
  <div class="__toc_wrapper"><span class="__toc_icon"></span>
32
32
  <div class="__toc_content">
33
33
  <ul class="__toc_list">
34
- <li class="__toc_level_2"><a href="#contributing--support">Contributing &amp; Support</a></li>
34
+ <li class="__toc_level_2"><a href="#contributing-support">Contributing &amp; Support</a></li>
35
35
  <ul class="__toc_list_2">
36
36
 
37
37
  <li class="__toc_level_3"><a href="#overview">Overview</a></li>
@@ -70,7 +70,7 @@
70
70
  </ul>
71
71
  </div>
72
72
  </div>
73
- <h1 id="contributing--support">Contributing &amp; Support</h1>
73
+ <h1 id="contributing-support">Contributing &amp; Support</h1>
74
74
  <h2 id="overview">Overview</h2>
75
75
  <p>Contribution from the community is encouraged and can be done in a variety of ways:</p>
76
76
  <ul>
@@ -59,6 +59,10 @@
59
59
  <li class="__toc_level_5"><a href="#basic-wildcard-syntax">Basic Wildcard syntax</a></li>
60
60
  <ul class="__toc_list_5">
61
61
 
62
+ </ul>
63
+ <li class="__toc_level_5"><a href="#zsh-number-ranges">ZSH Number Ranges</a></li>
64
+ <ul class="__toc_list_5">
65
+
62
66
  </ul>
63
67
  <li class="__toc_level_5"><a href="#extended-match-syntax">Extended Match Syntax</a></li>
64
68
  <ul class="__toc_list_5">
@@ -345,6 +349,14 @@ which we will always be included.</p>
345
349
  <p>If you need to escape <code>-</code> or <code>|</code>, you can put them in a sequence: <code>[-|]</code>. Remember to place <code>-</code> at the beginning of
346
350
  a sequence as <code>-</code> is also used to specify character ranges: <code>[a-z]</code>.</p>
347
351
  </div>
352
+ <h4 id="zsh-number-ranges"><abbr title="Z Shell">ZSH</abbr> Number Ranges</h4>
353
+ <p><abbr title="Z Shell">ZSH</abbr> number ranges are a simple syntax for specifying a simple range of numbers via <code>&lt;0-100&gt;</code>. Ends can also be omitted
354
+ allowing for unbounded ranges: <code>&lt;-&gt;</code>, <code>&lt;-100&gt;</code>, <code>&lt;0-100&gt;</code>, etc. It should be noted that numbers must be whole, positive
355
+ numbers and manually specified numbers greater than 19 digits will be truncated.</p>
356
+ <p><abbr title="Z Shell">ZSH</abbr> number ranges also handle numbers padded with zeros, so <code>&lt;0-9&gt;</code> would match <code>5</code>, <code>05</code>, <code>005</code>, etc. You can pad your
357
+ match pattern with zeros (<code>&lt;0010-0090&gt;</code>), but it has no affect on the actual search. Input numbers will be normalized
358
+ (<code>&lt;10-90&gt;</code>) and <abbr title="Z Shell">ZSH</abbr> padding number handling is always the same.</p>
359
+ <p>This can be enabled in <a href="./preferences.html#search">Preferences</a>.</p>
348
360
  <h4 id="extended-match-syntax">Extended Match Syntax</h4>
349
361
  <p>In <a href="./preferences.html#search">Preferences</a>, you can also enable extended match patterns. Extended match patterns allow
350
362
  you to provide pattern lists to provide more advanced logic.</p>
@@ -42,7 +42,7 @@
42
42
  <ul class="__toc_list_3">
43
43
 
44
44
  </ul>
45
- <li class="__toc_level_3"><a href="#searching--replacing">Searching &amp; Replacing</a></li>
45
+ <li class="__toc_level_3"><a href="#searching-replacing">Searching &amp; Replacing</a></li>
46
46
  <ul class="__toc_list_3">
47
47
 
48
48
  <li class="__toc_level_4"><a href="#configuring-text-search">Configuring Text Search</a></li>
@@ -114,7 +114,7 @@ major and minor Python version to the end:</p>
114
114
  <a href="./installation.html#running-in-anaconda">Running in Anaconda</a>).</p>
115
115
  <div class="highlight"><pre><span></span><code>pythonw<span class="w"> </span>-m<span class="w"> </span>rummage
116
116
  </code></pre></div>
117
- <h2 id="searching--replacing">Searching &amp; Replacing</h2>
117
+ <h2 id="searching-replacing">Searching &amp; Replacing</h2>
118
118
  <p><img alt="Search Tab" src="images/search_tab.png" /></p>
119
119
  <p>Search and replaces are configured in the <strong>Search</strong> tab. The search tab can essentially be broken up into two sections:
120
120
  text search configuration and file search configuration.</p>
@@ -39,7 +39,7 @@ class ImportSettingsDialog(gui.ImportSettingsDialog):
39
39
  "notify_enabled", "single_instance", "extmatch",
40
40
  "brace_expansion", "file_case_sensitive", "full_exclude_path", "full_file_path",
41
41
  "globstar", "international_time", "matchbase", "minusnegate", "alt_list_color",
42
- "autocomplete"
42
+ "autocomplete", "zsh_numrange"
43
43
  )
44
44
  STRING = ("backup_ext", "backup_folder", "term_notifier", "editor", "notify_method", "notify_sound")
45
45
  INTEGER = ("backup_type", "regex_mode", "regex_version", "patten_limit")
@@ -2,7 +2,7 @@
2
2
  Rummage Dialog.
3
3
 
4
4
  Licensed under MIT
5
- Copyright (c) 2011 - 2015 Isaac Muse <isaacmuse@gmail.com>
5
+ Copyright (c) 2011 - 2026 Isaac Muse <isaacmuse@gmail.com>
6
6
 
7
7
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
8
8
  documentation files (the "Software"), to deal in the Software without restriction, including without limitation
@@ -68,7 +68,6 @@ from ... import __meta__
68
68
  from ... import rumcore
69
69
  from .. import util
70
70
  from ..util.colors import Color
71
- import decimal
72
71
  if rumcore.REGEX_SUPPORT:
73
72
  from backrefs import bregex
74
73
  else:
@@ -328,6 +327,7 @@ class RummageArgs:
328
327
  self.full_exclude_path = False
329
328
  self.full_file_path = False
330
329
  self.globstar = False
330
+ self.zsh_numrange = False
331
331
  self.matchbase = False
332
332
  self.minusnegate = True
333
333
  self.encoding_options = {}
@@ -817,6 +817,9 @@ class RummageFrame(gui.RummageFrame):
817
817
  )
818
818
  )
819
819
  self.m_size_text.SetValue(Settings.get_search_setting("size_limit_string", "1000"))
820
+ self.m_size_type_choice.SetStringSelection(
821
+ Settings.get_search_setting("size_compare_type", "KB")
822
+ )
820
823
 
821
824
  self.m_case_checkbox.SetValue(not Settings.get_search_setting("ignore_case_toggle", False))
822
825
  self.m_dotmatch_checkbox.SetValue(Settings.get_search_setting("dotall_toggle", False))
@@ -1217,6 +1220,9 @@ class RummageFrame(gui.RummageFrame):
1217
1220
  if args.brace_expansion:
1218
1221
  flags |= rumcore.BRACE
1219
1222
 
1223
+ if args.zsh_numrange:
1224
+ flags |= rumcore.NUMRANGE
1225
+
1220
1226
  if args.file_case_sensitive:
1221
1227
  flags |= rumcore.FILECASE
1222
1228
 
@@ -1401,6 +1407,7 @@ class RummageFrame(gui.RummageFrame):
1401
1407
  args.globstar = bool(Settings.get_globstar())
1402
1408
  args.matchbase = bool(Settings.get_matchbase())
1403
1409
  args.minusnegate = bool(Settings.get_minusnegate())
1410
+ args.zsh_numrange = bool(Settings.get_zsh_numrange())
1404
1411
 
1405
1412
  args.filepattern = self.m_filematch_textbox.Value
1406
1413
  if self.m_fileregex_checkbox.GetValue():
@@ -1413,8 +1420,17 @@ class RummageFrame(gui.RummageFrame):
1413
1420
 
1414
1421
  cmp_size = self.m_logic_choice.GetSelection()
1415
1422
  if cmp_size:
1416
- size = decimal.Decimal(self.m_size_text.GetValue())
1417
- args.size_compare = (LIMIT_COMPARE[cmp_size], round(size * decimal.Decimal(1024)))
1423
+ size = int(self.m_size_text.GetValue())
1424
+ size_type = self.m_size_type_choice.GetStringSelection()
1425
+ if size_type == "KB":
1426
+ size *= 1e3
1427
+ elif size_type == "MB":
1428
+ size *= 1e6
1429
+ elif size_type == "GB":
1430
+ size *= 1e9
1431
+ elif size_type == "TB":
1432
+ size *= 1e12
1433
+ args.size_compare = (LIMIT_COMPARE[cmp_size], size)
1418
1434
  else:
1419
1435
  args.size_compare = None
1420
1436
  cmp_modified = self.m_modified_choice.GetSelection()
@@ -1568,7 +1584,20 @@ class RummageFrame(gui.RummageFrame):
1568
1584
  strings.append(("force_encode", self.m_force_encode_choice.GetStringSelection()))
1569
1585
 
1570
1586
  if eng_size != "any":
1571
- strings += [("size_limit_string", self.m_size_text.GetValue())]
1587
+ size_limit = int(self.m_size_text.GetValue())
1588
+ size_type = self.m_size_type_choice.GetStringSelection()
1589
+ if size_type == 'KB':
1590
+ size_limit *= 1e3
1591
+ elif size_type == "MB":
1592
+ size_limit *= 1e6
1593
+ elif size_type == "GB":
1594
+ size_limit *= 1e9
1595
+ elif size_type == "TB":
1596
+ size_limit *= 1e12
1597
+ strings += [
1598
+ ("size_limit_string", str(size_limit)),
1599
+ ("size_compare_type", size_type)
1600
+ ]
1572
1601
  if eng_mod != "on any":
1573
1602
  strings += [
1574
1603
  ("modified_date_string", self.m_modified_date_picker.GetValue().Format("%m/%d/%Y")),
@@ -2154,7 +2183,9 @@ class RummageFrame(gui.RummageFrame):
2154
2183
  def on_searchin_changed(self):
2155
2184
  """Callback for when a directory changes via the `m_searchin_text` control."""
2156
2185
 
2157
- self.SetTitle(self.m_searchin_text.GetValue())
2186
+ target = self.m_searchin_text.GetValue()
2187
+ self.SetTitle(target)
2188
+ self.m_searchin_dir_picker.target = target
2158
2189
 
2159
2190
  def on_save_search(self, event):
2160
2191
  """Open a dialog to save a search for later use."""
@@ -123,6 +123,7 @@ class SettingsDialog(webview.WebViewMixin, gui.SettingsDialog):
123
123
  self.m_brace_checkbox.SetValue(Settings.get_brace_expansion())
124
124
  self.m_case_checkbox.SetValue(Settings.get_file_case_sensitive())
125
125
  self.m_fullpath_checkbox.SetValue(Settings.get_full_exclude_path())
126
+ self.m_zsh_numrange_checkbox.SetValue(Settings.get_zsh_numrange())
126
127
  self.m_fullfile_checkbox.SetValue(Settings.get_full_file_path())
127
128
  self.m_globstar_checkbox.SetValue(Settings.get_globstar())
128
129
  self.m_matchbase_checkbox.SetValue(Settings.get_matchbase())
@@ -264,6 +265,7 @@ class SettingsDialog(webview.WebViewMixin, gui.SettingsDialog):
264
265
  self.BRACES = _("Brace expansion")
265
266
  self.CASE = _("Case sensitive")
266
267
  self.FULL_PATH = _("Full path directory match")
268
+ self.ZSH_NUMRANGE = _("ZSH number range")
267
269
  self.FULL_FILE = _("Full path file match")
268
270
  self.GLOBSTAR = _("Globstar (full path)")
269
271
  self.MATCHBASE = _("Match base (full path)")
@@ -339,6 +341,7 @@ class SettingsDialog(webview.WebViewMixin, gui.SettingsDialog):
339
341
  self.m_brace_checkbox.SetLabel(self.BRACES)
340
342
  self.m_case_checkbox.SetLabel(self.CASE)
341
343
  self.m_fullpath_checkbox.SetLabel(self.FULL_PATH)
344
+ self.m_zsh_numrange_checkbox.SetLabel(self.ZSH_NUMRANGE)
342
345
  self.m_fullfile_checkbox.SetLabel(self.FULL_FILE)
343
346
  self.m_globstar_checkbox.SetLabel(self.GLOBSTAR)
344
347
  self.m_matchbase_checkbox.SetLabel(self.MATCHBASE)
@@ -660,6 +663,11 @@ class SettingsDialog(webview.WebViewMixin, gui.SettingsDialog):
660
663
 
661
664
  Settings.set_full_exclude_path(self.m_fullpath_checkbox.GetValue())
662
665
 
666
+ def on_zsh_numrange_toggle(self, event):
667
+ """Handle ZSH number range toggle."""
668
+
669
+ Settings.set_zsh_numrange(self.m_zsh_numrange_checkbox.GetValue())
670
+
663
671
  def on_fullfile_toggle(self, event):
664
672
  """Handle full file toggle."""
665
673