plover 5.1.0__tar.gz → 5.2.0__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 (396) hide show
  1. {plover-5.1.0 → plover-5.2.0}/MANIFEST.in +2 -1
  2. {plover-5.1.0 → plover-5.2.0}/NEWS.md +41 -0
  3. {plover-5.1.0/plover.egg-info → plover-5.2.0}/PKG-INFO +5 -4
  4. {plover-5.1.0 → plover-5.2.0}/README.md +2 -2
  5. plover-5.2.0/doc/api/config.rst +188 -0
  6. plover-5.2.0/doc/api/engine.rst +148 -0
  7. plover-5.2.0/doc/api/machine_keyboard_capture.rst +20 -0
  8. plover-5.2.0/doc/api/machine_keymap.rst +7 -0
  9. {plover-5.1.0 → plover-5.2.0}/doc/conf.py +6 -5
  10. {plover-5.1.0 → plover-5.2.0}/doc/developer_guide.md +25 -5
  11. plover-5.2.0/doc/requirements.txt +4 -0
  12. {plover-5.1.0 → plover-5.2.0}/linux/README.md +1 -2
  13. {plover-5.1.0 → plover-5.2.0}/linux/appimage/build.sh +4 -28
  14. {plover-5.1.0 → plover-5.2.0}/osx/app_resources/Info.plist +1 -1
  15. {plover-5.1.0 → plover-5.2.0}/osx/dmg_resources/settings.py +3 -0
  16. {plover-5.1.0 → plover-5.2.0}/osx/make_app.sh +0 -32
  17. {plover-5.1.0 → plover-5.2.0}/plover/__init__.py +5 -3
  18. {plover-5.1.0 → plover-5.2.0}/plover/config.py +58 -14
  19. {plover-5.1.0 → plover-5.2.0}/plover/dictionary/loading_manager.py +1 -1
  20. {plover-5.1.0 → plover-5.2.0}/plover/engine.py +205 -37
  21. {plover-5.1.0 → plover-5.2.0}/plover/formatting.py +5 -2
  22. plover-5.2.0/plover/gui_qt/appearance.py +49 -0
  23. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/config_serial_widget.ui +1 -31
  24. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/config_window.py +139 -33
  25. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/config_window.ui +2 -2
  26. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/console_widget.py +1 -1
  27. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/machine_options.py +1 -19
  28. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/main_window.py +13 -1
  29. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/main_window.ui +43 -21
  30. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/plugins_manager.py +9 -4
  31. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/plugins_manager.ui +2 -2
  32. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/trayicon.py +0 -2
  33. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/utils.py +0 -1
  34. {plover-5.1.0 → plover-5.2.0}/plover/i18n.py +1 -1
  35. {plover-5.1.0 → plover-5.2.0}/plover/key_combo.py +3 -1
  36. {plover-5.1.0 → plover-5.2.0}/plover/log.py +2 -2
  37. {plover-5.1.0 → plover-5.2.0}/plover/machine/base.py +12 -2
  38. plover-5.2.0/plover/machine/keyboard_capture/__init__.py +41 -0
  39. {plover-5.1.0 → plover-5.2.0}/plover/machine/keymap.py +86 -10
  40. {plover-5.1.0 → plover-5.2.0}/plover/machine/plover_hid.py +46 -25
  41. {plover-5.1.0 → plover-5.2.0}/plover/machine/procat.py +0 -3
  42. {plover-5.1.0 → plover-5.2.0}/plover/messages/es/LC_MESSAGES/plover.po +2 -2
  43. {plover-5.1.0 → plover-5.2.0}/plover/messages/fr/LC_MESSAGES/plover.po +2 -2
  44. {plover-5.1.0 → plover-5.2.0}/plover/messages/it/LC_MESSAGES/plover.po +2 -2
  45. {plover-5.1.0 → plover-5.2.0}/plover/messages/nl/LC_MESSAGES/plover.po +2 -2
  46. {plover-5.1.0 → plover-5.2.0}/plover/messages/plover.pot +1 -1
  47. {plover-5.1.0 → plover-5.2.0}/plover/messages/zh_tw/LC_MESSAGES/plover.po +2 -2
  48. {plover-5.1.0 → plover-5.2.0}/plover/orthography.py +2 -1
  49. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/controller.py +1 -1
  50. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/linux/keyboardcontrol.py +4 -2
  51. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/linux/keyboardcontrol_uinput.py +107 -343
  52. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/linux/keyboardcontrol_x11.py +22 -13
  53. plover-5.2.0/plover/oslayer/linux/keyboardlayout_wayland.py +403 -0
  54. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/linux/log.py +3 -1
  55. plover-5.2.0/plover/oslayer/linux/wayland_connection.py +293 -0
  56. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/osx/keyboardlayout.py +1 -1
  57. {plover-5.1.0 → plover-5.2.0}/plover/plugins_manager/registry.py +4 -3
  58. {plover-5.1.0 → plover-5.2.0}/plover/registry.py +1 -1
  59. {plover-5.1.0 → plover-5.2.0}/plover/scripts/main.py +6 -3
  60. {plover-5.1.0 → plover-5.2.0}/plover/system/__init__.py +7 -7
  61. {plover-5.1.0 → plover-5.2.0/plover.egg-info}/PKG-INFO +5 -4
  62. {plover-5.1.0 → plover-5.2.0}/plover.egg-info/SOURCES.txt +7 -9
  63. {plover-5.1.0 → plover-5.2.0}/plover.egg-info/requires.txt +2 -1
  64. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/check_requirements.py +0 -3
  65. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/functions.sh +0 -11
  66. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/testing/__init__.py +9 -0
  67. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/testing/blackbox.py +3 -1
  68. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/testing/steno_dictionary.py +2 -2
  69. {plover-5.1.0 → plover-5.2.0}/reqs/constraints.txt +2 -2
  70. plover-5.2.0/reqs/dev.txt +8 -0
  71. {plover-5.1.0 → plover-5.2.0}/reqs/dist.txt +2 -1
  72. {plover-5.1.0 → plover-5.2.0}/setup.py +7 -0
  73. {plover-5.1.0 → plover-5.2.0}/test/gui_qt/test_dictionaries_widget.py +2 -3
  74. {plover-5.1.0 → plover-5.2.0}/test/test_config.py +3 -1
  75. {plover-5.1.0 → plover-5.2.0}/test/test_engine.py +1 -1
  76. {plover-5.1.0 → plover-5.2.0}/test/test_keyboard.py +1 -1
  77. {plover-5.1.0 → plover-5.2.0}/test/test_steno_dictionary.py +10 -4
  78. {plover-5.1.0 → plover-5.2.0}/tox.ini +0 -16
  79. {plover-5.1.0 → plover-5.2.0}/windows/dist_build.sh +0 -24
  80. plover-5.1.0/doc/api/config.md +0 -254
  81. plover-5.1.0/doc/api/engine.md +0 -367
  82. plover-5.1.0/doc/api/machine_keyboard_capture.md +0 -42
  83. plover-5.1.0/doc/api/machine_keymap.md +0 -90
  84. plover-5.1.0/doc/requirements.txt +0 -3
  85. plover-5.1.0/linux/build_hidapi.sh +0 -8
  86. plover-5.1.0/osx/build_hidapi.sh +0 -9
  87. plover-5.1.0/plover/machine/keyboard_capture/__init__.py +0 -18
  88. plover-5.1.0/plover_build_utils/deps.sh +0 -2
  89. plover-5.1.0/reqs/dev.txt +0 -4
  90. plover-5.1.0/test/py37compat.py +0 -6
  91. plover-5.1.0/windows/build_hidapi.sh +0 -19
  92. {plover-5.1.0 → plover-5.2.0}/CONTRIBUTING.md +0 -0
  93. {plover-5.1.0 → plover-5.2.0}/LICENSE.txt +0 -0
  94. {plover-5.1.0 → plover-5.2.0}/doc/SCOWL_README.txt +0 -0
  95. {plover-5.1.0 → plover-5.2.0}/doc/_static/board-layout.png +0 -0
  96. {plover-5.1.0 → plover-5.2.0}/doc/_static/custom.css +0 -0
  97. {plover-5.1.0 → plover-5.2.0}/doc/_static/de-speech.png +0 -0
  98. {plover-5.1.0 → plover-5.2.0}/doc/_static/dolores.svg +0 -0
  99. {plover-5.1.0 → plover-5.2.0}/doc/_static/engine-flow.png +0 -0
  100. {plover-5.1.0 → plover-5.2.0}/doc/_static/favicon.ico +0 -0
  101. {plover-5.1.0 → plover-5.2.0}/doc/_static/jp-speech.png +0 -0
  102. {plover-5.1.0 → plover-5.2.0}/doc/_static/keys-layout.png +0 -0
  103. {plover-5.1.0 → plover-5.2.0}/doc/_static/uncomfortable.png +0 -0
  104. {plover-5.1.0 → plover-5.2.0}/doc/_templates/breadcrumbs.html +0 -0
  105. {plover-5.1.0 → plover-5.2.0}/doc/_templates/layout.html +0 -0
  106. {plover-5.1.0 → plover-5.2.0}/doc/add_translation.md +0 -0
  107. {plover-5.1.0 → plover-5.2.0}/doc/api/dictionary.md +0 -0
  108. {plover-5.1.0 → plover-5.2.0}/doc/api/dictionary_lib.md +0 -0
  109. {plover-5.1.0 → plover-5.2.0}/doc/api/exception.md +0 -0
  110. {plover-5.1.0 → plover-5.2.0}/doc/api/formatting.md +0 -0
  111. {plover-5.1.0 → plover-5.2.0}/doc/api/i18n.md +0 -0
  112. {plover-5.1.0 → plover-5.2.0}/doc/api/key_combo.md +0 -0
  113. {plover-5.1.0 → plover-5.2.0}/doc/api/log.md +0 -0
  114. {plover-5.1.0 → plover-5.2.0}/doc/api/machine.md +0 -0
  115. {plover-5.1.0 → plover-5.2.0}/doc/api/misc.md +0 -0
  116. {plover-5.1.0 → plover-5.2.0}/doc/api/orthography.md +0 -0
  117. {plover-5.1.0 → plover-5.2.0}/doc/api/oslayer.md +0 -0
  118. {plover-5.1.0 → plover-5.2.0}/doc/api/oslayer_config.md +0 -0
  119. {plover-5.1.0 → plover-5.2.0}/doc/api/oslayer_controller.md +0 -0
  120. {plover-5.1.0 → plover-5.2.0}/doc/api/oslayer_i18n.md +0 -0
  121. {plover-5.1.0 → plover-5.2.0}/doc/api/oslayer_keyboardcontrol.md +0 -0
  122. {plover-5.1.0 → plover-5.2.0}/doc/api/oslayer_log.md +0 -0
  123. {plover-5.1.0 → plover-5.2.0}/doc/api/oslayer_wmctrl.md +0 -0
  124. {plover-5.1.0 → plover-5.2.0}/doc/api/output.md +0 -0
  125. {plover-5.1.0 → plover-5.2.0}/doc/api/plover.md +0 -0
  126. {plover-5.1.0 → plover-5.2.0}/doc/api/plover_stroke.md +0 -0
  127. {plover-5.1.0 → plover-5.2.0}/doc/api/qt.md +0 -0
  128. {plover-5.1.0 → plover-5.2.0}/doc/api/registry.md +0 -0
  129. {plover-5.1.0 → plover-5.2.0}/doc/api/resource.md +0 -0
  130. {plover-5.1.0 → plover-5.2.0}/doc/api/steno.md +0 -0
  131. {plover-5.1.0 → plover-5.2.0}/doc/api/steno_dictionary.md +0 -0
  132. {plover-5.1.0 → plover-5.2.0}/doc/api/suggestions.md +0 -0
  133. {plover-5.1.0 → plover-5.2.0}/doc/api/system.md +0 -0
  134. {plover-5.1.0 → plover-5.2.0}/doc/api/translation.md +0 -0
  135. {plover-5.1.0 → plover-5.2.0}/doc/api_reference.md +0 -0
  136. {plover-5.1.0 → plover-5.2.0}/doc/basic_usage.md +0 -0
  137. {plover-5.1.0 → plover-5.2.0}/doc/ci.md +0 -0
  138. {plover-5.1.0 → plover-5.2.0}/doc/cli_reference.md +0 -0
  139. {plover-5.1.0 → plover-5.2.0}/doc/configuration.md +0 -0
  140. {plover-5.1.0 → plover-5.2.0}/doc/contributing.md +0 -0
  141. {plover-5.1.0 → plover-5.2.0}/doc/design.md +0 -0
  142. {plover-5.1.0 → plover-5.2.0}/doc/dict_editor.md +0 -0
  143. {plover-5.1.0 → plover-5.2.0}/doc/dict_formats.md +0 -0
  144. {plover-5.1.0 → plover-5.2.0}/doc/dictionaries.md +0 -0
  145. {plover-5.1.0 → plover-5.2.0}/doc/hardware_communication.md +0 -0
  146. {plover-5.1.0 → plover-5.2.0}/doc/hardware_setup.md +0 -0
  147. {plover-5.1.0 → plover-5.2.0}/doc/i18n.md +0 -0
  148. {plover-5.1.0 → plover-5.2.0}/doc/index.md +0 -0
  149. {plover-5.1.0 → plover-5.2.0}/doc/installation.md +0 -0
  150. {plover-5.1.0 → plover-5.2.0}/doc/internals.md +0 -0
  151. {plover-5.1.0 → plover-5.2.0}/doc/platform_layer.md +0 -0
  152. {plover-5.1.0 → plover-5.2.0}/doc/plugin-dev/commands.md +0 -0
  153. {plover-5.1.0 → plover-5.2.0}/doc/plugin-dev/dictionaries.md +0 -0
  154. {plover-5.1.0 → plover-5.2.0}/doc/plugin-dev/extensions.md +0 -0
  155. {plover-5.1.0 → plover-5.2.0}/doc/plugin-dev/gui_tools.md +0 -0
  156. {plover-5.1.0 → plover-5.2.0}/doc/plugin-dev/machines.md +0 -0
  157. {plover-5.1.0 → plover-5.2.0}/doc/plugin-dev/macros.md +0 -0
  158. {plover-5.1.0 → plover-5.2.0}/doc/plugin-dev/metas.md +0 -0
  159. {plover-5.1.0 → plover-5.2.0}/doc/plugin-dev/publishing.md +0 -0
  160. {plover-5.1.0 → plover-5.2.0}/doc/plugin-dev/setup.md +0 -0
  161. {plover-5.1.0 → plover-5.2.0}/doc/plugin-dev/systems.md +0 -0
  162. {plover-5.1.0 → plover-5.2.0}/doc/plugin_dev.md +0 -0
  163. {plover-5.1.0 → plover-5.2.0}/doc/plugins.md +0 -0
  164. {plover-5.1.0 → plover-5.2.0}/doc/releases.md +0 -0
  165. {plover-5.1.0 → plover-5.2.0}/doc/system-dev/board-layout.md +0 -0
  166. {plover-5.1.0 → plover-5.2.0}/doc/system-dev/key-arrangement.md +0 -0
  167. {plover-5.1.0 → plover-5.2.0}/doc/system-dev/layout-test.md +0 -0
  168. {plover-5.1.0 → plover-5.2.0}/doc/system-dev/steno-system.md +0 -0
  169. {plover-5.1.0 → plover-5.2.0}/doc/system-dev/system.md +0 -0
  170. {plover-5.1.0 → plover-5.2.0}/doc/system_dev.md +0 -0
  171. {plover-5.1.0 → plover-5.2.0}/doc/translation_language.md +0 -0
  172. {plover-5.1.0 → plover-5.2.0}/linux/appimage/Dockerfile +0 -0
  173. {plover-5.1.0 → plover-5.2.0}/linux/appimage/apprun.sh +0 -0
  174. {plover-5.1.0 → plover-5.2.0}/linux/appimage/blacklist.txt +0 -0
  175. {plover-5.1.0 → plover-5.2.0}/linux/appimage/deps.sh +0 -0
  176. {plover-5.1.0 → plover-5.2.0}/linux/appimage/pyinfo.py +0 -0
  177. {plover-5.1.0 → plover-5.2.0}/linux/plover.desktop +0 -0
  178. {plover-5.1.0 → plover-5.2.0}/news.d/api/.gitignore +0 -0
  179. {plover-5.1.0 → plover-5.2.0}/news.d/bugfix/.gitignore +0 -0
  180. {plover-5.1.0 → plover-5.2.0}/news.d/feature/.gitignore +0 -0
  181. {plover-5.1.0 → plover-5.2.0}/news.d/template.md +0 -0
  182. {plover-5.1.0 → plover-5.2.0}/osx/README.md +0 -0
  183. {plover-5.1.0 → plover-5.2.0}/osx/app_resources/dist_blacklist.txt +0 -0
  184. {plover-5.1.0 → plover-5.2.0}/osx/app_resources/plover.icns +0 -0
  185. {plover-5.1.0 → plover-5.2.0}/osx/app_resources/plover_launcher.c +0 -0
  186. {plover-5.1.0 → plover-5.2.0}/osx/deps.sh +0 -0
  187. {plover-5.1.0 → plover-5.2.0}/osx/dmg_resources/background.png +0 -0
  188. {plover-5.1.0 → plover-5.2.0}/osx/dmg_resources/background.psd +0 -0
  189. {plover-5.1.0 → plover-5.2.0}/osx/dmg_resources/background@2x.png +0 -0
  190. {plover-5.1.0 → plover-5.2.0}/osx/make_dmg.sh +0 -0
  191. {plover-5.1.0 → plover-5.2.0}/osx/notarize_app.sh +0 -0
  192. {plover-5.1.0 → plover-5.2.0}/osx/notarize_common.sh +0 -0
  193. {plover-5.1.0 → plover-5.2.0}/osx/notarize_dmg.sh +0 -0
  194. {plover-5.1.0 → plover-5.2.0}/plover/__main__.py +0 -0
  195. {plover-5.1.0 → plover-5.2.0}/plover/assets/american_english_words.txt +0 -0
  196. {plover-5.1.0 → plover-5.2.0}/plover/assets/commands.json +0 -0
  197. {plover-5.1.0 → plover-5.2.0}/plover/assets/main.json +0 -0
  198. {plover-5.1.0 → plover-5.2.0}/plover/assets/plover-icon.svg +0 -0
  199. {plover-5.1.0 → plover-5.2.0}/plover/assets/plover.ico +0 -0
  200. {plover-5.1.0 → plover-5.2.0}/plover/assets/plover.png +0 -0
  201. {plover-5.1.0 → plover-5.2.0}/plover/assets/user.json +0 -0
  202. {plover-5.1.0 → plover-5.2.0}/plover/command/__init__.py +0 -0
  203. {plover-5.1.0 → plover-5.2.0}/plover/command/set_config.py +0 -0
  204. {plover-5.1.0 → plover-5.2.0}/plover/dictionary/__init__.py +0 -0
  205. {plover-5.1.0 → plover-5.2.0}/plover/dictionary/base.py +0 -0
  206. {plover-5.1.0 → plover-5.2.0}/plover/dictionary/helpers.py +0 -0
  207. {plover-5.1.0 → plover-5.2.0}/plover/dictionary/json_dict.py +0 -0
  208. {plover-5.1.0 → plover-5.2.0}/plover/dictionary/rtfcre_dict.py +0 -0
  209. {plover-5.1.0 → plover-5.2.0}/plover/dictionary/rtfcre_parse.py +0 -0
  210. {plover-5.1.0 → plover-5.2.0}/plover/exception.py +0 -0
  211. {plover-5.1.0 → plover-5.2.0}/plover/gui_none/__init__.py +0 -0
  212. {plover-5.1.0 → plover-5.2.0}/plover/gui_none/add_translation.py +0 -0
  213. {plover-5.1.0 → plover-5.2.0}/plover/gui_none/engine.py +0 -0
  214. {plover-5.1.0 → plover-5.2.0}/plover/gui_none/main.py +0 -0
  215. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/__init__.py +0 -0
  216. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/about_dialog.py +0 -0
  217. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/about_dialog.ui +0 -0
  218. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/add_translation_dialog.py +0 -0
  219. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/add_translation_dialog.ui +0 -0
  220. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/add_translation_widget.py +0 -0
  221. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/add_translation_widget.ui +0 -0
  222. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/config_file_widget.ui +0 -0
  223. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/config_keyboard_widget.ui +0 -0
  224. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/config_plover_hid_widget.ui +0 -0
  225. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/console_widget.ui +0 -0
  226. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/dictionaries_widget.py +0 -0
  227. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/dictionaries_widget.ui +0 -0
  228. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/dictionary_editor.py +0 -0
  229. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/dictionary_editor.ui +0 -0
  230. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/engine.py +0 -0
  231. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/info_browser.py +0 -0
  232. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/log_qt.py +0 -0
  233. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/lookup_dialog.py +0 -0
  234. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/lookup_dialog.ui +0 -0
  235. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/main.py +0 -0
  236. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/paper_tape.py +0 -0
  237. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/paper_tape.ui +0 -0
  238. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/__init__.py +0 -0
  239. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/add.svg +0 -0
  240. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/dictionary_error.svg +0 -0
  241. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/dictionary_favorite.svg +0 -0
  242. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/dictionary_loading.svg +0 -0
  243. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/dictionary_normal.svg +0 -0
  244. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/dictionary_readonly.svg +0 -0
  245. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/down.svg +0 -0
  246. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/folder.svg +0 -0
  247. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/font_selector.svg +0 -0
  248. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/git.png +0 -0
  249. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/lightbulb.svg +0 -0
  250. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/lookup.svg +0 -0
  251. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/pencil.svg +0 -0
  252. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/pin.svg +0 -0
  253. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/plover.png +0 -0
  254. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/plugins_manager.svg +0 -0
  255. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/reconnect.svg +0 -0
  256. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/remove.svg +0 -0
  257. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/save.svg +0 -0
  258. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/settings.svg +0 -0
  259. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/state-disabled.svg +0 -0
  260. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/state-disconnected.svg +0 -0
  261. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/state-enabled.svg +0 -0
  262. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/tape.svg +0 -0
  263. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/translation_add.svg +0 -0
  264. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/trash.svg +0 -0
  265. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/undo.svg +0 -0
  266. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources/up.svg +0 -0
  267. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/resources.qrc +0 -0
  268. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/run_dialog.py +0 -0
  269. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/run_dialog.ui +0 -0
  270. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/steno_validator.py +0 -0
  271. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/suggestions_dialog.py +0 -0
  272. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/suggestions_dialog.ui +0 -0
  273. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/suggestions_widget.py +0 -0
  274. {plover-5.1.0 → plover-5.2.0}/plover/gui_qt/tool.py +0 -0
  275. {plover-5.1.0 → plover-5.2.0}/plover/machine/__init__.py +0 -0
  276. {plover-5.1.0 → plover-5.2.0}/plover/machine/gemini_pr.py +0 -0
  277. {plover-5.1.0 → plover-5.2.0}/plover/machine/keyboard.py +0 -0
  278. {plover-5.1.0 → plover-5.2.0}/plover/machine/passport.py +0 -0
  279. {plover-5.1.0 → plover-5.2.0}/plover/machine/stentura.py +5 -5
  280. {plover-5.1.0 → plover-5.2.0}/plover/machine/tx_bolt.py +0 -0
  281. {plover-5.1.0 → plover-5.2.0}/plover/macro/__init__.py +0 -0
  282. {plover-5.1.0 → plover-5.2.0}/plover/macro/repeat.py +0 -0
  283. {plover-5.1.0 → plover-5.2.0}/plover/macro/retro.py +0 -0
  284. {plover-5.1.0 → plover-5.2.0}/plover/macro/undo.py +0 -0
  285. {plover-5.1.0 → plover-5.2.0}/plover/meta/__init__.py +0 -0
  286. {plover-5.1.0 → plover-5.2.0}/plover/meta/attach.py +0 -0
  287. {plover-5.1.0 → plover-5.2.0}/plover/meta/case.py +0 -0
  288. {plover-5.1.0 → plover-5.2.0}/plover/meta/command.py +0 -0
  289. {plover-5.1.0 → plover-5.2.0}/plover/meta/conditional.py +0 -0
  290. {plover-5.1.0 → plover-5.2.0}/plover/meta/currency.py +0 -0
  291. {plover-5.1.0 → plover-5.2.0}/plover/meta/glue.py +0 -0
  292. {plover-5.1.0 → plover-5.2.0}/plover/meta/key_combo.py +0 -0
  293. {plover-5.1.0 → plover-5.2.0}/plover/meta/mode.py +0 -0
  294. {plover-5.1.0 → plover-5.2.0}/plover/meta/punctuation.py +0 -0
  295. {plover-5.1.0 → plover-5.2.0}/plover/meta/word_end.py +0 -0
  296. {plover-5.1.0 → plover-5.2.0}/plover/misc.py +0 -0
  297. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/__init__.py +0 -0
  298. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/config.py +0 -0
  299. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/linux/__init__.py +0 -0
  300. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/linux/display_server.py +0 -0
  301. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/linux/i18n.py +0 -0
  302. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/linux/log_dbus.py +0 -0
  303. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/linux/serial.py +0 -0
  304. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/linux/wmctrl.py +0 -0
  305. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/linux/wmctrl_x11.py +0 -0
  306. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/osx/__init__.py +0 -0
  307. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/osx/i18n.py +0 -0
  308. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/osx/keyboardcontrol.py +0 -0
  309. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/osx/log.py +0 -0
  310. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/osx/serial.py +0 -0
  311. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/osx/wmctrl.py +0 -0
  312. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/windows/__init__.py +0 -0
  313. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/windows/i18n.py +0 -0
  314. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/windows/keyboardcontrol.py +0 -0
  315. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/windows/keyboardlayout.py +0 -0
  316. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/windows/log.py +0 -0
  317. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/windows/serial.py +0 -0
  318. {plover-5.1.0 → plover-5.2.0}/plover/oslayer/windows/wmctrl.py +0 -0
  319. {plover-5.1.0 → plover-5.2.0}/plover/output/__init__.py +0 -0
  320. {plover-5.1.0 → plover-5.2.0}/plover/output/keyboard.py +0 -0
  321. {plover-5.1.0 → plover-5.2.0}/plover/plugins_manager/__init__.py +0 -0
  322. {plover-5.1.0 → plover-5.2.0}/plover/plugins_manager/__main__.py +0 -0
  323. {plover-5.1.0 → plover-5.2.0}/plover/plugins_manager/global_registry.py +0 -0
  324. {plover-5.1.0 → plover-5.2.0}/plover/plugins_manager/local_registry.py +0 -0
  325. {plover-5.1.0 → plover-5.2.0}/plover/plugins_manager/package_index.py +0 -0
  326. {plover-5.1.0 → plover-5.2.0}/plover/plugins_manager/pip_wrapper.py +0 -0
  327. {plover-5.1.0 → plover-5.2.0}/plover/plugins_manager/plugin_metadata.py +0 -0
  328. {plover-5.1.0 → plover-5.2.0}/plover/plugins_manager/requests.py +0 -0
  329. {plover-5.1.0 → plover-5.2.0}/plover/plugins_manager/utils.py +0 -0
  330. {plover-5.1.0 → plover-5.2.0}/plover/resource.py +0 -0
  331. {plover-5.1.0 → plover-5.2.0}/plover/scripts/__init__.py +0 -0
  332. {plover-5.1.0 → plover-5.2.0}/plover/scripts/dist_main.py +0 -0
  333. {plover-5.1.0 → plover-5.2.0}/plover/scripts/send_command.py +0 -0
  334. {plover-5.1.0 → plover-5.2.0}/plover/steno.py +0 -0
  335. {plover-5.1.0 → plover-5.2.0}/plover/steno_dictionary.py +0 -0
  336. {plover-5.1.0 → plover-5.2.0}/plover/suggestions.py +0 -0
  337. {plover-5.1.0 → plover-5.2.0}/plover/system/english_stenotype.py +0 -0
  338. {plover-5.1.0 → plover-5.2.0}/plover/translation.py +0 -0
  339. {plover-5.1.0 → plover-5.2.0}/plover.egg-info/dependency_links.txt +0 -0
  340. {plover-5.1.0 → plover-5.2.0}/plover.egg-info/entry_points.txt +0 -0
  341. {plover-5.1.0 → plover-5.2.0}/plover.egg-info/top_level.txt +0 -0
  342. {plover-5.1.0 → plover-5.2.0}/plover.egg-info/zip-safe +0 -0
  343. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/__init__.py +0 -0
  344. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/download.py +0 -0
  345. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/get_pip.py +0 -0
  346. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/install_wheels.py +0 -0
  347. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/pyqt.py +0 -0
  348. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/setup.py +0 -0
  349. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/source_less.py +0 -0
  350. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/testing/dict.py +0 -0
  351. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/testing/output.py +0 -0
  352. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/testing/parametrize.py +0 -0
  353. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/testing/steno.py +0 -0
  354. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/tree.py +0 -0
  355. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/trim.py +0 -0
  356. {plover-5.1.0 → plover-5.2.0}/plover_build_utils/zipdir.py +0 -0
  357. {plover-5.1.0 → plover-5.2.0}/pyproject.toml +0 -0
  358. {plover-5.1.0 → plover-5.2.0}/pytest.ini +0 -0
  359. {plover-5.1.0 → plover-5.2.0}/reqs/bootstrap.txt +0 -0
  360. {plover-5.1.0 → plover-5.2.0}/reqs/build.txt +0 -0
  361. {plover-5.1.0 → plover-5.2.0}/reqs/ci.txt +0 -0
  362. {plover-5.1.0 → plover-5.2.0}/reqs/code_quality.txt +0 -0
  363. {plover-5.1.0 → plover-5.2.0}/reqs/dist_extra_gui_qt.txt +0 -0
  364. {plover-5.1.0 → plover-5.2.0}/reqs/dist_extra_log.txt +0 -0
  365. {plover-5.1.0 → plover-5.2.0}/reqs/packaging.txt +0 -0
  366. {plover-5.1.0 → plover-5.2.0}/reqs/release.txt +0 -0
  367. {plover-5.1.0 → plover-5.2.0}/reqs/setup.txt +0 -0
  368. {plover-5.1.0 → plover-5.2.0}/reqs/test.txt +0 -0
  369. {plover-5.1.0 → plover-5.2.0}/setup.cfg +0 -0
  370. {plover-5.1.0 → plover-5.2.0}/test/__init__.py +0 -0
  371. {plover-5.1.0 → plover-5.2.0}/test/conftest.py +0 -0
  372. {plover-5.1.0 → plover-5.2.0}/test/gui_qt/__init__.py +0 -0
  373. {plover-5.1.0 → plover-5.2.0}/test/gui_qt/test_steno_validator.py +0 -0
  374. {plover-5.1.0 → plover-5.2.0}/test/test_blackbox.py +0 -0
  375. {plover-5.1.0 → plover-5.2.0}/test/test_command.py +0 -0
  376. {plover-5.1.0 → plover-5.2.0}/test/test_default_dict.py +0 -0
  377. {plover-5.1.0 → plover-5.2.0}/test/test_formatting.py +0 -0
  378. {plover-5.1.0 → plover-5.2.0}/test/test_json_dict.py +0 -0
  379. {plover-5.1.0 → plover-5.2.0}/test/test_key_combo.py +0 -0
  380. {plover-5.1.0 → plover-5.2.0}/test/test_keymap.py +0 -0
  381. {plover-5.1.0 → plover-5.2.0}/test/test_loading_manager.py +0 -0
  382. {plover-5.1.0 → plover-5.2.0}/test/test_log.py +0 -0
  383. {plover-5.1.0 → plover-5.2.0}/test/test_machine.py +0 -0
  384. {plover-5.1.0 → plover-5.2.0}/test/test_misc.py +0 -0
  385. {plover-5.1.0 → plover-5.2.0}/test/test_orthography.py +0 -0
  386. {plover-5.1.0 → plover-5.2.0}/test/test_passport.py +0 -0
  387. {plover-5.1.0 → plover-5.2.0}/test/test_resource.py +0 -0
  388. {plover-5.1.0 → plover-5.2.0}/test/test_rtfcre_dict.py +0 -0
  389. {plover-5.1.0 → plover-5.2.0}/test/test_steno.py +0 -0
  390. {plover-5.1.0 → plover-5.2.0}/test/test_stentura.py +0 -0
  391. {plover-5.1.0 → plover-5.2.0}/test/test_translation.py +0 -0
  392. {plover-5.1.0 → plover-5.2.0}/windows/README.md +0 -0
  393. {plover-5.1.0 → plover-5.2.0}/windows/dist_blacklist.txt +0 -0
  394. {plover-5.1.0 → plover-5.2.0}/windows/dist_deps.sh +0 -0
  395. {plover-5.1.0 → plover-5.2.0}/windows/installer.bmp +0 -0
  396. {plover-5.1.0 → plover-5.2.0}/windows/installer.nsi +0 -0
@@ -5,6 +5,7 @@ recursive-include doc *.css
5
5
  recursive-include doc *.html
6
6
  recursive-include doc *.ico
7
7
  recursive-include doc *.md
8
+ recursive-include doc *.rst
8
9
  recursive-include doc *.png
9
10
  recursive-include doc *.svg
10
11
  recursive-include doc *.py
@@ -33,10 +34,10 @@ include test/*.py
33
34
  include test/gui_qt/*.py
34
35
  include tox.ini
35
36
  include windows/*
36
- exclude dev/*
37
37
  exclude .pre-commit-config.yaml
38
38
  # without first including it, exluding .readthedocs.yml results in a warning when running locally
39
39
  include .readthedocs.yml
40
40
  exclude .readthedocs.yml
41
41
  exclude plover/gui_qt/*_rc.py
42
42
  exclude plover/gui_qt/*_ui.py
43
+ exclude .mailmap
@@ -1,3 +1,44 @@
1
+ # v5.2.0 (2026-02-01)
2
+
3
+
4
+ ## Features
5
+
6
+ ### Linux
7
+
8
+ - Support determining keyboard layout from Wayland with the `wayland-auto` layout. (#1807)
9
+ - Avoid unnecessary rapid modifier key press/release while typing. (#1810)
10
+
11
+ ### macOS
12
+
13
+ - Add appearance configuration option. (#1786)
14
+
15
+ ### Windows
16
+
17
+ - Add appearance configuration option. (#1786)
18
+
19
+ ## Bugfixes
20
+
21
+ ### Core
22
+
23
+ - Fix a corner case in `plover -s (script)`. (#1803)
24
+
25
+ ### User Interface
26
+
27
+ - Fix default window sizes and extensions config table. (#1789)
28
+ - Update Thea's name and email. (#1792)
29
+ - Remove broken use_timeout checkbox in serial options. (#1793)
30
+ - Make the plugin manager handle some exceptional cases. (#1802)
31
+
32
+ ### macOS
33
+
34
+ - Hide the Start Minimized setting on macOS due to bug in macOS 26. (#1788)
35
+
36
+ ## API
37
+
38
+ ### Core
39
+
40
+ - Migrate HID library to cython-hidapi. (#1812)
41
+
1
42
  # v5.1.0 (2025-11-04)
2
43
 
3
44
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plover
3
- Version: 5.1.0
3
+ Version: 5.2.0
4
4
  Summary: Open Source Stenography Software
5
5
  Home-page: http://www.openstenoproject.org/
6
6
  Download-URL: http://www.openstenoproject.org/plover
@@ -35,7 +35,7 @@ Description-Content-Type: text/markdown
35
35
  License-File: LICENSE.txt
36
36
  Requires-Dist: appdirs
37
37
  Requires-Dist: appnope; "darwin" in sys_platform
38
- Requires-Dist: hid
38
+ Requires-Dist: hidapi
39
39
  Requires-Dist: pkginfo
40
40
  Requires-Dist: plover-stroke
41
41
  Requires-Dist: plyer; "win32" in sys_platform
@@ -48,6 +48,7 @@ Requires-Dist: python-xlib; "linux" in sys_platform or "bsd" in sys_platform
48
48
  Requires-Dist: evdev; "linux" in sys_platform or "bsd" in sys_platform
49
49
  Requires-Dist: packaging
50
50
  Requires-Dist: psutil; "linux" in sys_platform or "bsd" in sys_platform
51
+ Requires-Dist: xkbcommon<1.1; "linux" in sys_platform or "bsd" in sys_platform
51
52
  Requires-Dist: readme-renderer[md]
52
53
  Requires-Dist: requests-cache
53
54
  Requires-Dist: requests-futures
@@ -165,7 +166,7 @@ including [StenoJig][] (JavaScript) and [StenoTray][] (Java).
165
166
  - The [Plover Wiki][Wiki] discusses Plover and Open Steno in
166
167
  general. Edits to the Wiki and new page ideas are welcome.
167
168
  - Graphic art for Plover and stenography in general is always
168
- appreciated. The app's icons are worked on at [TheaMorin/plover\_icons][].
169
+ appreciated. The app's icons are worked on at [panathea/plover\_icons][].
169
170
  You may consider reimagining or reposing [Plover's mascot, Dolores][Mascot].
170
171
  - UX improvement suggestions are welcome. Plover runs on Windows, Mac,
171
172
  and Linux, and should be powerful but out of the way, which poses
@@ -204,7 +205,7 @@ Please follow through for your system:
204
205
  [Troubleshooting Common Issues]: https://plover.wiki/index.php/Troubleshooting_issues
205
206
  [Wiki]: https://plover.wiki
206
207
  [installation guide]: https://plover.wiki/index.php/Installation_Guide
207
- [TheaMorin/plover\_icons]: https://github.com/TheaMorin/plover_icons
208
+ [panathea/plover\_icons]: https://github.com/panathea/plover_icons
208
209
  [Windows README]: https://github.com/openstenoproject/plover/blob/main/windows/README.md
209
210
  [Linux README]: https://github.com/openstenoproject/plover/blob/main/linux/README.md
210
211
  [macOS README]: https://github.com/openstenoproject/plover/blob/main/osx/README.md
@@ -98,7 +98,7 @@ including [StenoJig][] (JavaScript) and [StenoTray][] (Java).
98
98
  - The [Plover Wiki][Wiki] discusses Plover and Open Steno in
99
99
  general. Edits to the Wiki and new page ideas are welcome.
100
100
  - Graphic art for Plover and stenography in general is always
101
- appreciated. The app's icons are worked on at [TheaMorin/plover\_icons][].
101
+ appreciated. The app's icons are worked on at [panathea/plover\_icons][].
102
102
  You may consider reimagining or reposing [Plover's mascot, Dolores][Mascot].
103
103
  - UX improvement suggestions are welcome. Plover runs on Windows, Mac,
104
104
  and Linux, and should be powerful but out of the way, which poses
@@ -137,7 +137,7 @@ Please follow through for your system:
137
137
  [Troubleshooting Common Issues]: https://plover.wiki/index.php/Troubleshooting_issues
138
138
  [Wiki]: https://plover.wiki
139
139
  [installation guide]: https://plover.wiki/index.php/Installation_Guide
140
- [TheaMorin/plover\_icons]: https://github.com/TheaMorin/plover_icons
140
+ [panathea/plover\_icons]: https://github.com/panathea/plover_icons
141
141
  [Windows README]: https://github.com/openstenoproject/plover/blob/main/windows/README.md
142
142
  [Linux README]: https://github.com/openstenoproject/plover/blob/main/linux/README.md
143
143
  [macOS README]: https://github.com/openstenoproject/plover/blob/main/osx/README.md
@@ -0,0 +1,188 @@
1
+ ``plover.config`` -- Configuration
2
+ ==================================
3
+
4
+ .. automodule:: plover.config
5
+ :no-members:
6
+
7
+ .. autoclass:: plover.config.Config
8
+ :members:
9
+ :member-order: bysource
10
+ :special-members: __getitem__, __setitem__
11
+
12
+ .. autoexception:: plover.config.InvalidConfigOption
13
+
14
+ .. autoclass:: plover.config.DictionaryConfig
15
+ :members:
16
+ :member-order: bysource
17
+
18
+ .. _config-keys:
19
+
20
+ Configuration Options
21
+ ---------------------
22
+
23
+ Below is the list of all available configuration keys:
24
+
25
+ Output
26
+ ~~~~~~
27
+
28
+ .. describe:: space_placement
29
+
30
+ When writing translations, whether to add spaces before or after each
31
+ translation. Possible values are ``Before Output`` and ``After Output``.
32
+ By default, will add spaces *before* translations.
33
+
34
+ .. describe:: start_attached
35
+
36
+ Whether to delete the space before the translation when the initial
37
+ stroke is translated. ``False`` by default.
38
+
39
+ .. describe:: start_capitalized
40
+
41
+ Whether to capitalize the translation when the initial stroke is
42
+ translated. ``False`` by default.
43
+
44
+ .. describe:: undo_levels
45
+
46
+ The maximum number of translations Plover is allowed to undo. 100 by default.
47
+
48
+ Each stroke that performs a translation is added onto an undo stack, and
49
+ undo strokes (such as ``*``) remove translations from this stack.
50
+ ``undo_levels`` defines the maximum number of translations in the stack.
51
+
52
+ Logging
53
+ ~~~~~~~
54
+
55
+ .. describe:: log_file_name
56
+
57
+ The path to the stroke log file, either absolute or expressed relative to
58
+ :data:`CONFIG_DIR<plover.oslayer.config.CONFIG_DIR>`. ``strokes.log`` by default.
59
+
60
+ This only sets the path for stroke logs; main Plover logs are always
61
+ written to ``plover.log``.
62
+
63
+ .. describe:: enable_stroke_logging
64
+
65
+ Whether to log strokes. ``False`` by default.
66
+
67
+ .. describe:: enable_translation_logging
68
+
69
+ Whether to log translations. ``False`` by default.
70
+
71
+ Interface
72
+ ~~~~~~~~~
73
+
74
+ .. describe:: start_minimized
75
+
76
+ Whether to hide the main window when Plover starts up. ``False`` by default.
77
+
78
+ .. describe:: show_stroke_display
79
+
80
+ Whether to show the paper tape when Plover starts up. ``False`` by default.
81
+
82
+ .. describe:: show_suggestions_display
83
+
84
+ Whether to show the suggestions window when Plover starts up. ``False`` by default.
85
+
86
+ .. describe:: translation_frame_opacity
87
+
88
+ The opacity of the Add Translation tool, in percent. 100 by default.
89
+
90
+ .. describe:: classic_dictionaries_display_order
91
+
92
+ The order the dictionaries are displayed in the main window.
93
+ ``True`` displays the highest priority dictionary at the bottom;
94
+ ``False`` displays it at the top. ``False`` by default.
95
+
96
+ Plugins
97
+ ~~~~~~~
98
+
99
+ .. describe:: enabled_extensions
100
+
101
+ The list of extensions that are enabled.
102
+
103
+ Machine
104
+ ~~~~~~~
105
+
106
+ .. describe:: auto_start
107
+
108
+ Whether to enable Plover output when it starts up. ``False`` by default.
109
+
110
+ .. describe:: machine_type
111
+
112
+ The name of the currently active machine. ``Keyboard`` by default.
113
+
114
+ .. describe:: machine_specific_options
115
+
116
+ A dictionary of configuration options specific to the current machine.
117
+ Consult your machine plugin's documentation to see the available properties.
118
+ For the default machine plugins, the following options are available:
119
+
120
+ .. describe:: arpeggiate
121
+
122
+ Whether to enable arpeggiate mode on the keyboard. ``False`` by default.
123
+
124
+ .. describe:: port
125
+
126
+ The serial port for serial connections. No default value.
127
+
128
+ The value will most likely be different between platforms; Windows uses COM
129
+ ports, e.g. ``COM3``, whereas Unix-like platforms use device paths, e.g.
130
+ ``/dev/cu.usbmodem14403`` or ``/dev/ttyACM0``.
131
+
132
+ .. describe:: baudrate
133
+
134
+ The baud rate for serial connections. 9600 by default.
135
+
136
+ .. describe:: bytesize
137
+
138
+ The number of bits in a byte for serial connections. 8 by default.
139
+
140
+ .. describe:: parity
141
+
142
+ The parity bit mode for serial connections, one of
143
+ ``N`` (none), ``O`` (odd), ``E`` (even), ``M`` (mark) or ``S`` (space).
144
+ ``N`` by default.
145
+
146
+ .. describe:: stopbits
147
+
148
+ The number of stop bits for serial connections. 1 by default.
149
+
150
+ .. describe:: timeout
151
+
152
+ The read timeout for serial connections in seconds. 2.0 (2 seconds) by default.
153
+
154
+ .. describe:: xonxoff
155
+
156
+ Whether to use XON/XOFF flow control for serial connections.
157
+ ``False`` by default.
158
+
159
+ .. describe:: rtscts
160
+
161
+ Whether to use RTS/CTS flow control for serial connections.
162
+ ``False`` by default.
163
+
164
+ System
165
+ ~~~~~~
166
+
167
+ .. describe:: system_name
168
+
169
+ The name of the current steno system. This is the same system that
170
+ :mod:`plover.system` refers to. ``English Stenotype`` by default.
171
+
172
+ .. describe:: system_keymap
173
+
174
+ A :class:`Keymap<plover.machine.keymap.Keymap>` mapping between machine
175
+ keys and steno keys in the current steno system.
176
+
177
+ If the system defines a keymap in :data:`KEYMAPS<plover.system.KEYMAPS>`
178
+ for the current machine type, that will be the default value; otherwise,
179
+ the machine may define a
180
+ :attr:`KEYMAP_MACHINE_TYPE<plover.machine.base.StenotypeBase.KEYMAP_MACHINE_TYPE>`
181
+ that describes a similar machine to fall back on. If that is not available
182
+ either, the default value is an empty keymap.
183
+
184
+ .. describe:: dictionaries
185
+
186
+ A list of :class:`DictionaryConfig` representing the list of dictionaries
187
+ Plover uses to translate strokes for the current steno system. The
188
+ dictionaries should be listed in order of decreasing priority.
@@ -0,0 +1,148 @@
1
+ ``plover.engine`` -- Steno engine
2
+ ====================================================================
3
+
4
+ .. automodule:: plover.engine
5
+ :no-members:
6
+
7
+ .. autoclass:: plover.engine.StenoEngine
8
+
9
+ .. automethod:: _in_engine_thread
10
+
11
+ .. automethod:: start
12
+
13
+ .. automethod:: quit
14
+
15
+ .. automethod:: restart
16
+
17
+ .. automethod:: run
18
+
19
+ .. automethod:: join
20
+
21
+ .. automethod:: load_config
22
+
23
+ .. automethod:: reset_machine
24
+
25
+ .. automethod:: _send_engine_command
26
+
27
+ .. automethod:: toggle_output
28
+
29
+ .. automethod:: set_output
30
+
31
+ .. automethod:: __getitem__
32
+
33
+ .. automethod:: __setitem__
34
+
35
+ .. automethod:: get_suggestions
36
+
37
+ .. automethod:: clear_translator_state
38
+
39
+ .. automethod:: hook_connect
40
+
41
+ .. automethod:: hook_disconnect
42
+
43
+ The following methods simply provide a way to access the underlying
44
+ :class:`StenoDictionaryCollection<plover.steno_dictionary.StenoDictionaryCollection>`.
45
+ See the documentation there for more complete information.
46
+
47
+ .. automethod:: lookup
48
+
49
+ .. automethod:: raw_lookup
50
+
51
+ .. automethod:: lookup_from_all
52
+
53
+ .. automethod:: raw_lookup_from_all
54
+
55
+ .. automethod:: reverse_lookup
56
+
57
+ .. automethod:: casereverse_lookup
58
+
59
+ .. automethod:: add_dictionary_filter
60
+
61
+ .. automethod:: remove_dictionary_filter
62
+
63
+ .. automethod:: add_translation
64
+
65
+ .. autoclass:: plover.engine.StartingStrokeState
66
+
67
+ .. autoclass:: plover.engine.MachineParams
68
+
69
+ .. autoclass:: plover.engine.ErroredDictionary
70
+
71
+ .. _engine-hooks:
72
+
73
+ Engine Hooks
74
+ ------------
75
+
76
+ Plover uses engine hooks to allow plugins to listen to engine events. By
77
+ calling :meth:`engine.hook_connect<plover.engine.StenoEngine.hook_connect>` and passing the
78
+ name of one of the hooks below and a function, you can write handlers that are
79
+ called when Plover hooks get triggered.
80
+
81
+ .. plover:hook:: stroked(stroke: plover.steno.Stroke)
82
+
83
+ The user just sent a stroke.
84
+
85
+ .. plover:hook:: translated(old, new)
86
+
87
+ .. plover:hook:: machine_state_changed(machine_type: str, machine_state: str)
88
+
89
+ Either the machine type was changed by the user, or the connection state
90
+ of the machine changed. ``machine_type`` is the name of the machine
91
+ (e.g. ``Gemini PR``), and ``machine_state`` is one of ``stopped``,
92
+ ``initializing``, ``connected`` or ``disconnected``.
93
+
94
+ .. plover:hook:: output_changed(enabled: bool)
95
+
96
+ The user requested to either enable or disable steno output. ``enabled`` is
97
+ ``True`` if output is enabled, ``False`` otherwise.
98
+
99
+ .. plover:hook:: config_changed(config: Dict[str, Any])
100
+
101
+ The configuration was changed, or it was loaded for the first time.
102
+ ``config`` is a dictionary containing *only* the changed fields. Call the
103
+ hook function with the :attr:`StenoEngine.config<plover.engine.StenoEngine.config>`
104
+ to initialize your plugin based on the full configuration.
105
+
106
+ .. plover:hook:: dictionaries_loaded(dictionaries: plover.steno_dictionary.StenoDictionaryCollection)
107
+
108
+ The dictionaries were loaded, either when Plover starts up or the system
109
+ is changed or when the engine is reset.
110
+
111
+ .. plover:hook:: send_string(s: str)
112
+
113
+ Plover just sent the string ``s`` over keyboard output.
114
+
115
+ .. plover:hook:: send_backspaces(b: int)
116
+
117
+ Plover just sent backspaces over keyboard output. ``b`` is the number of
118
+ backspaces sent.
119
+
120
+ .. plover:hook:: send_key_combination(c: str)
121
+
122
+ Plover just sent a keyboard combination over keyboard output. ``c`` is a
123
+ string representing the keyboard combination, for example ``Alt_L(Tab)``.
124
+
125
+ .. plover:hook:: add_translation()
126
+
127
+ The Add Translation command was activated -- open the Add Translation tool.
128
+
129
+ .. plover:hook:: focus()
130
+
131
+ The Show command was activated -- reopen Plover's main window and bring it
132
+ to the front.
133
+
134
+ .. plover:hook:: configure()
135
+
136
+ The Configure command was activated -- open the configuration window.
137
+
138
+ .. plover:hook:: lookup()
139
+
140
+ The Lookup command was activated -- open the Lookup tool.
141
+
142
+ .. plover:hook:: suggestions()
143
+
144
+ The Suggestions command was activated -- open the Suggestions tool.
145
+
146
+ .. plover:hook:: quit()
147
+
148
+ The Quit command was activated -- wrap up any pending tasks and quit Plover.
@@ -0,0 +1,20 @@
1
+ ``plover.machine.keyboard_capture`` -- Keyboard capture
2
+ ================================================================
3
+
4
+ .. automodule:: plover.machine.keyboard_capture
5
+ :no-members:
6
+
7
+ .. autoclass:: plover.machine.keyboard_capture.Capture
8
+
9
+ .. automethod:: start
10
+
11
+ .. automethod:: cancel
12
+
13
+ .. automethod:: suppress
14
+
15
+ The following methods are available to implementors to hook into the
16
+ keyboard capture system:
17
+
18
+ .. automethod:: key_down
19
+
20
+ .. automethod:: key_up
@@ -0,0 +1,7 @@
1
+ ``plover.machine.keymap`` -- Machine key bindings
2
+ =================================================
3
+
4
+ .. automodule:: plover.machine.keymap
5
+ :members:
6
+ :member-order: bysource
7
+ :special-members: __getitem__, __setitem__
@@ -1,4 +1,7 @@
1
1
  # Configuration file for the Sphinx documentation builder.
2
+ from pygments.lexer import RegexLexer, bygroups
3
+ from pygments import token as t
4
+ from sphinx.highlighting import lexers
2
5
 
3
6
  # -- Project information -----------------------------------------------------
4
7
 
@@ -6,7 +9,7 @@ project = "Plover"
6
9
  copyright = "Open Steno Project"
7
10
  author = copyright
8
11
 
9
- release = "5.1.0"
12
+ release = "5.2.0"
10
13
  version = release
11
14
 
12
15
  # -- General configuration ---------------------------------------------------
@@ -14,6 +17,8 @@ version = release
14
17
  extensions = [
15
18
  "sphinx_plover",
16
19
  "myst_parser",
20
+ "sphinx.ext.autodoc",
21
+ "sphinx.ext.napoleon",
17
22
  "sphinx.ext.todo",
18
23
  ]
19
24
 
@@ -69,10 +74,6 @@ html_theme_options = {
69
74
  "dark_logo": "dolores.svg",
70
75
  }
71
76
 
72
- from pygments.lexer import RegexLexer, bygroups
73
- from pygments import token as t
74
- from sphinx.highlighting import lexers
75
-
76
77
 
77
78
  class RTFLexer(RegexLexer):
78
79
  name = "rtf"
@@ -17,20 +17,20 @@ You also need [CMake](https://cmake.org) to build [hidapi](https://github.com/li
17
17
 
18
18
  A typical development setup looks like this, assuming that `python` has the correct version:
19
19
 
20
- ### Linux/macOS (Bash):
20
+ ## Linux/macOS (Bash):
21
21
 
22
22
  ```bash
23
23
  cd path/to/plover
24
24
  python -m venv .venv
25
25
  source .venv/bin/activate
26
- pip install -r reqs/dev.txt
26
+ pip install -c reqs/constraints.txt -r reqs/dev.txt
27
27
  pre-commit install
28
28
  pre-commit run --all-files
29
29
  tox
30
30
  tox -e launch -- -l debug
31
31
  ```
32
32
 
33
- ### Windows (PowerShell):
33
+ ## Windows (PowerShell):
34
34
 
35
35
  This assumes that you installed a Git version that includes Git Bash.
36
36
 
@@ -38,7 +38,7 @@ This assumes that you installed a Git version that includes Git Bash.
38
38
  cd path\to\plover
39
39
  python -m venv .venv
40
40
  .venv\Scripts\Activate.ps1
41
- pip install -r reqs\dev.txt
41
+ pip install -c reqs\constraints.txt -r reqs\dev.txt
42
42
  pre-commit install
43
43
  pre-commit run --all-files
44
44
  & "C:\Program Files\Git\bin\bash.exe" -lc "tox"
@@ -47,6 +47,26 @@ pre-commit run --all-files
47
47
 
48
48
  Some features require a Bash shell, which is why on Windows you need to run commands through Git Bash or similar.
49
49
 
50
+ ## Read the Docs build (Docker)
51
+
52
+ To reproduce the Read the Docs build locally, use the official RTD build image.
53
+ The image defaults to a non-root user, so run as root to install packages.
54
+
55
+ ```bash
56
+ docker run --rm -it --platform=linux/amd64 -u root -v "$PWD":/work -w /work readthedocs/build:ubuntu-24.04-2024.06.17 bash
57
+
58
+ apt-get update
59
+ apt-get install -y python3 python3-venv python3-dev build-essential
60
+ python3 -m venv .venv-rtd
61
+ . .venv-rtd/bin/activate
62
+ python -m pip install --upgrade pip setuptools
63
+ python -m pip install -c reqs/constraints.txt -r reqs/dist.txt
64
+ python -m pip install -r doc/requirements.txt
65
+ python -m sphinx -b html -W doc doc/_build/html
66
+ ```
67
+
68
+ The HTML output is in `doc/_build/html/index.html`.
69
+
50
70
  ## Tox
51
71
 
52
72
  The command for using tox is: `tox {-e envlist} {-- arguments}`. Use `tox -a
@@ -84,7 +104,7 @@ any other virtual environment](https://virtualenv.pypa.io/en/latest/user_guide.h
84
104
 
85
105
  The configuration also provides support for lightweight tests only environment:
86
106
  `pyX`, where `X` is the version of the Python interpreter to use. E.g. running
87
- `tox -e 'py3,py36,py37,py38,py39` will execute the testsuite for each version
107
+ `tox -e 'py3,py310,py311,py312` will execute the testsuite for each version
88
108
  of Python we support.
89
109
 
90
110
  # Creating a binary distribution
@@ -0,0 +1,4 @@
1
+ sphinx-plover==0.3
2
+ furo==2025.12.19
3
+ myst-parser==5.0.0
4
+ appdirs==1.4.4
@@ -5,8 +5,7 @@
5
5
  To be able to setup a complete development environment, you'll need to manually
6
6
  install some system libraries (including the development version of your
7
7
  distribution corresponding packages):
8
- - Treal support: `libusb` (1.0) and `libudev` are needed by
9
- the [`hidapi` package](https://pypi.org/project/hidapi/).
10
8
  - log / notifications support: `libdbus` is needed.
9
+ - Uinput support: `libxkbcommon` is needed by the [`xkbcommon` package](https://pypi.org/project/xkbcommon)
11
10
 
12
11
  For the rest of the steps, follow the [developer guide](../doc/developer_guide.md).
@@ -2,7 +2,6 @@
2
2
 
3
3
  set -e
4
4
 
5
- . ./plover_build_utils/deps.sh
6
5
  . ./plover_build_utils/functions.sh
7
6
 
8
7
  topdir="$PWD"
@@ -197,33 +196,10 @@ run "$linuxdeploy" \
197
196
  # Install Plover and dependencies.
198
197
  bootstrap_dist "$wheel"
199
198
 
200
- # ------- Start: Build & bundle hidapi from source -------
201
- hidapi_src="$builddir/hidapi-src"
202
- hidapi_bld="$builddir/hidapi-build"
203
-
204
- . ./linux/build_hidapi.sh
205
-
206
- echo "Downloading and unpacking hidapi ${hidapi_version}…"
207
- fetch_hidapi "$hidapi_src" "$builddir"
208
-
209
- echo "Building hidapi…"
210
- cmake_build_linux "$hidapi_src" "$hidapi_bld" "Release"
211
-
212
- # Locate the produced .so
213
- hidapi_so="$(find "$hidapi_bld" -name 'libhidapi-hidraw.so*' -type f -print -quit)"
214
- if [ -z "$hidapi_so" ] || [ ! -f "$hidapi_so" ]; then
215
- echo "Error: built libhidapi-hidraw.so not found." >&2
216
- exit 3
217
- fi
218
-
219
- # Bundle into the AppDir's lib directory
220
- run cp -v "$hidapi_so" "$appdir/usr/lib/"
221
- base="$(basename "$hidapi_so")"
222
- # Add symlink for unversioned .so if needed
223
- if [ ! -e "$appdir/usr/lib/libhidapi-hidraw.so" ]; then
224
- ln -s "$base" "$appdir/usr/lib/libhidapi-hidraw.so"
225
- fi
226
- # ------- End: Build & bundle hidapi from source -------
199
+ # Reinstall hidapi with the hidraw backend; libusb reports usage/usage_page as 0,
200
+ # which results in HID keyboards not being detected by Plover.
201
+ run "$python" -m pip uninstall -y hidapi || true
202
+ run_eval "HIDAPI_WITH_HIDRAW=1 HIDAPI_WITH_LIBUSB=0 $python -m pip install --no-binary :all: --no-cache-dir hidapi"
227
203
 
228
204
  # Trim the fat, second pass.
229
205
  run "$python" -m plover_build_utils.trim "$appdir" "$builddir/blacklist.txt"
@@ -7,7 +7,7 @@
7
7
  <key>CFBundleDisplayName</key>
8
8
  <string>Plover</string>
9
9
  <key>CFBundleExecutable</key>
10
- <string>MacOS/Plover</string>
10
+ <string>Plover</string>
11
11
  <key>CFBundleIconFile</key>
12
12
  <string>plover.icns</string>
13
13
  <key>CFBundleIdentifier</key>
@@ -3,6 +3,9 @@
3
3
  import plistlib
4
4
  import os.path
5
5
 
6
+ # `defines` is injected by dmgbuild; default to empty for linters.
7
+ defines = globals().get("defines", {})
8
+
6
9
  application = defines.get("app", "./dist/Plover.app")
7
10
  appname = os.path.basename(application)
8
11