pyqt-code-editor 0.0.52__tar.gz → 0.0.53__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 (84) hide show
  1. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/PKG-INFO +1 -1
  2. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/__init__.py +1 -1
  3. pyqt_code_editor-0.0.53/pyqt_code_editor/mixins/merge_undo_actions.py +54 -0
  4. pyqt_code_editor-0.0.52/pyqt_code_editor/mixins/merge_undo_actions.py +0 -32
  5. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/COPYING +0 -0
  6. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyproject.toml +0 -0
  7. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/_settings.py +0 -0
  8. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/app.py +0 -0
  9. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/code_editors/__init__.py +0 -0
  10. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/code_editors/code_editors.py +0 -0
  11. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/code_editors/languages/__init__.py +0 -0
  12. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/code_editors/languages/generic.py +0 -0
  13. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/code_editors/languages/javascript.py +0 -0
  14. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/code_editors/languages/markdown.py +0 -0
  15. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/code_editors/languages/python.py +0 -0
  16. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/code_editors/languages/text.py +0 -0
  17. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/components/__init__.py +0 -0
  18. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/components/editor_panel.py +0 -0
  19. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/components/find_in_files.py +0 -0
  20. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/components/jupyter_console.py +0 -0
  21. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/components/project_explorer.py +0 -0
  22. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/components/settings_panel.py +0 -0
  23. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/components/sigmund.py +0 -0
  24. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/components/workspace_explorer.py +0 -0
  25. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/environment_manager.py +0 -0
  26. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/__init__.py +0 -0
  27. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/auto_indent.py +0 -0
  28. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/auto_pair.py +0 -0
  29. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/base.py +0 -0
  30. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/check.py +0 -0
  31. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/comment.py +0 -0
  32. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/complete.py +0 -0
  33. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/execute.py +0 -0
  34. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/file_link.py +0 -0
  35. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/highlight_matching_brackets.py +0 -0
  36. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/line_number.py +0 -0
  37. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/python_auto_indent.py +0 -0
  38. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/search_replace.py +0 -0
  39. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/shortcuts.py +0 -0
  40. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/smart_backspace_delete.py +0 -0
  41. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/symbols.py +0 -0
  42. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/theme.py +0 -0
  43. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/widgets/__init__.py +0 -0
  44. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/mixins/zoom.py +0 -0
  45. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/sigmund-analyst.png +0 -0
  46. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/signal_router.py +0 -0
  47. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/syntax_highlighters/__init__.py +0 -0
  48. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/syntax_highlighters/languages/__init__.py +0 -0
  49. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/syntax_highlighters/languages/generic.py +0 -0
  50. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/syntax_highlighters/languages/python.py +0 -0
  51. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/syntax_highlighters/syntax_highlighter.py +0 -0
  52. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/themes.py +0 -0
  53. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/utils/__init__.py +0 -0
  54. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/utils/languages/__init__.py +0 -0
  55. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/utils/languages/python/__init__.py +0 -0
  56. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/utils/languages/python/_auto_indent.py +0 -0
  57. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/utils/languages/python/_extract_cells.py +0 -0
  58. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/utils/languages/python/_mask_str_in_code.py +0 -0
  59. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/watchdog.py +0 -0
  60. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/widgets/__init__.py +0 -0
  61. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/widgets/calltip_widget.py +0 -0
  62. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/widgets/completion_popup.py +0 -0
  63. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/widgets/dock.py +0 -0
  64. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/widgets/quick_open_dialog.py +0 -0
  65. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/widgets/quick_open_file_dialog.py +0 -0
  66. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/widgets/quick_symbol_dialog.py +0 -0
  67. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/widgets/search_replace_frame.py +0 -0
  68. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/widgets/tab_splitter.py +0 -0
  69. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/widgets/tabbed_editor.py +0 -0
  70. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/__init__.py +0 -0
  71. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/languages/__init__.py +0 -0
  72. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/languages/generic.py +0 -0
  73. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/languages/python.py +0 -0
  74. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/manager.py +0 -0
  75. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/process.py +0 -0
  76. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/providers/__init__.py +0 -0
  77. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/providers/codestral.py +0 -0
  78. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/providers/jedi.py +0 -0
  79. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/providers/ruff.py +0 -0
  80. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/providers/sigmund.py +0 -0
  81. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/providers/symbol.py +0 -0
  82. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/providers/tree_sitter.py +0 -0
  83. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/pyqt_code_editor/worker/settings.py +0 -0
  84. {pyqt_code_editor-0.0.52 → pyqt_code_editor-0.0.53}/readme.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqt_code_editor
3
- Version: 0.0.52
3
+ Version: 0.0.53
4
4
  Summary: Fully featured code-editor widgets for PyQt
5
5
  Keywords: code editor,pyqt,ide
6
6
  Author-email: Sebastiaan Mathôt <s.mathot@cogsci.nl>
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._settings import settings
4
4
 
5
- __version__ = '0.0.52'
5
+ __version__ = '0.0.53'
@@ -0,0 +1,54 @@
1
+ from qtpy.QtCore import Qt
2
+ from qtpy.QtGui import QTextCursor
3
+
4
+
5
+ class MergeUndoActions:
6
+ """Ensures that all changes made as part of a key press result in a
7
+ single edit block for undo purposes. This class should be the first
8
+ mixin of the list.
9
+ """
10
+ def keyPressEvent(self, event):
11
+ # Navigation keys that should NOT be wrapped in edit blocks. This
12
+ # avoids cursor glitches when navigating vertically/horizontally.
13
+ navigation_keys = {
14
+ Qt.Key.Key_Up, Qt.Key.Key_Down,
15
+ Qt.Key.Key_Left, Qt.Key.Key_Right,
16
+ Qt.Key.Key_Home, Qt.Key.Key_End,
17
+ Qt.Key.Key_PageUp, Qt.Key.Key_PageDown,
18
+ }
19
+
20
+ key = event.key()
21
+ modifiers = event.modifiers()
22
+
23
+ is_navigation = (
24
+ key in navigation_keys
25
+ and not (modifiers & Qt.KeyboardModifier.ShiftModifier)
26
+ )
27
+
28
+ # Treat platform "command" modifier as well (Control on Windows/Linux, Meta on macOS)
29
+ ctrl_or_meta = Qt.KeyboardModifier.ControlModifier | Qt.KeyboardModifier.MetaModifier
30
+ has_ctrl_or_meta = bool(modifiers & ctrl_or_meta)
31
+ has_shift = bool(modifiers & Qt.KeyboardModifier.ShiftModifier)
32
+
33
+ # Common Undo/Redo shortcuts:
34
+ # - Undo: Ctrl+Z / Cmd+Z
35
+ # - Redo: Ctrl+Shift+Z / Cmd+Shift+Z / Ctrl+Y / Cmd+Y
36
+ is_undo = has_ctrl_or_meta and key == Qt.Key.Key_Z and not has_shift
37
+ is_redo = has_ctrl_or_meta and (
38
+ (key == Qt.Key.Key_Z and has_shift) or
39
+ key == Qt.Key.Key_Y
40
+ )
41
+
42
+ if is_navigation or is_undo or is_redo:
43
+ # Do not wrap these in an edit block
44
+ super().keyPressEvent(event)
45
+ return
46
+
47
+ # For editing keys, wrap the operation in a single edit block.
48
+ # Use the widget's actual text cursor, not a fresh document cursor.
49
+ cursor = self.textCursor()
50
+ cursor.beginEditBlock()
51
+ try:
52
+ super().keyPressEvent(event)
53
+ finally:
54
+ cursor.endEditBlock()
@@ -1,32 +0,0 @@
1
- from qtpy.QtCore import Qt
2
- from qtpy.QtGui import QTextCursor
3
-
4
-
5
- class MergeUndoActions:
6
- """Ensures that all changes made as part of a key press result in a
7
- single edit block for undo purposes. This class should be the first
8
- mixin of the list.
9
- """
10
- def keyPressEvent(self, event):
11
- # Navigation keys that should NOT be wrapped in edit blocks. This
12
- # causes a specific issue with the cursor jumping to the start of a
13
- # line when navigating vertically.
14
- navigation_keys = {
15
- Qt.Key.Key_Up, Qt.Key.Key_Down,
16
- Qt.Key.Key_Left, Qt.Key.Key_Right,
17
- Qt.Key.Key_Home, Qt.Key.Key_End,
18
- Qt.Key.Key_PageUp, Qt.Key.Key_PageDown
19
- }
20
- is_navigation = (event.key() in navigation_keys and
21
- not (event.modifiers() & Qt.KeyboardModifier.ShiftModifier))
22
- if is_navigation:
23
- super().keyPressEvent(event)
24
- return
25
- # Wrap all other keys (editing operations) in a single edit block to
26
- # unify changes into a single undo action
27
- cursor = QTextCursor(self.document())
28
- cursor.beginEditBlock()
29
- try:
30
- super().keyPressEvent(event)
31
- finally:
32
- cursor.endEditBlock()