PrEditor 1.2.0__py3-none-any.whl → 1.3.0__py3-none-any.whl

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.

Potentially problematic release.


This version of PrEditor might be problematic. Click here for more details.

preditor/gui/console.py CHANGED
@@ -63,6 +63,8 @@ class ConsolePrEdit(QTextEdit):
63
63
 
64
64
  self._firstShow = True
65
65
 
66
+ self.addSepNewline = False
67
+
66
68
  # When executing code, that takes longer than this seconds, flash the window
67
69
  self.flash_time = 1.0
68
70
  self.flash_window = None
@@ -817,6 +819,10 @@ class ConsolePrEdit(QTextEdit):
817
819
  hasattr(window, 'uiErrorHyperlinksACT')
818
820
  and window.uiErrorHyperlinksACT.isChecked()
819
821
  )
822
+ sepPreditorTrace = (
823
+ hasattr(window, 'uiSeparateTracebackACT')
824
+ and window.uiSeparateTracebackACT.isChecked()
825
+ )
820
826
  self.moveCursor(QTextCursor.MoveOperation.End)
821
827
 
822
828
  charFormat = QTextCharFormat()
@@ -855,6 +861,17 @@ class ConsolePrEdit(QTextEdit):
855
861
  filename = info.get("filename", "") if info else ""
856
862
  isConsolePrEdit = '<ConsolePrEdit>' in filename
857
863
 
864
+ # To make it easier to see relevant lines of a traceback, optionally insert
865
+ # a newline separating internal PrEditor code from the code run by user.
866
+ if self.addSepNewline:
867
+ if sepPreditorTrace:
868
+ msg += "\n"
869
+ self.addSepNewline = False
870
+
871
+ preditorCalls = ("cmdresult = e", "exec(compiled,")
872
+ if msg.strip().startswith(preditorCalls):
873
+ self.addSepNewline = True
874
+
858
875
  if info and doHyperlink and not isConsolePrEdit:
859
876
  fileStart = info.get("fileStart")
860
877
  fileEnd = info.get("fileEnd")
@@ -323,3 +323,31 @@ class GroupTabWidget(OneTabWidget):
323
323
  tab_widget = self.currentWidget()
324
324
  tab_widget.setCurrentIndex(editor)
325
325
  return tab_widget.currentWidget()
326
+
327
+ def set_current_groups_from_workbox(self, workbox):
328
+ """Make the specified workbox the current widget. If the workbox is not
329
+ found, the current widget is not changed.
330
+
331
+ Args:
332
+ workbox (WorkboxMixin): The workbox to make current.
333
+
334
+ Returns:
335
+ success (bool): Whether the workbox was found and made the current
336
+ widget
337
+ """
338
+ workbox_infos = self.all_widgets()
339
+ found_info = None
340
+ for workbox_info in workbox_infos:
341
+ if workbox_info[0] == workbox:
342
+ found_info = workbox_info
343
+ break
344
+ if found_info:
345
+ workbox = workbox_info[0]
346
+ group_idx = workbox_info[-2]
347
+ editor_idx = workbox_info[-1]
348
+
349
+ self.setCurrentIndex(group_idx)
350
+ tab_widget = self.currentWidget()
351
+ tab_widget.setCurrentIndex(editor_idx)
352
+
353
+ return bool(found_info)
@@ -93,9 +93,7 @@ class LoggerWindow(Window):
93
93
  self.name = name if name else get_core_name()
94
94
  self._stylesheet = 'Bright'
95
95
 
96
- # Create timer to autohide status messages
97
- self.statusTimer = QTimer()
98
- self.statusTimer.setSingleShot(True)
96
+ self.setupStatusTimer()
99
97
 
100
98
  # Store the previous time a font-resize wheel event was triggered to prevent
101
99
  # rapid-fire WheelEvents. Initialize to the current time.
@@ -815,6 +813,7 @@ class LoggerWindow(Window):
815
813
  'uiStatusLbl_limit': self.uiStatusLBL.limit(),
816
814
  'textEditorPath': self.textEditorPath,
817
815
  'textEditorCmdTempl': self.textEditorCmdTempl,
816
+ 'uiSeparateTracebackACT': self.uiSeparateTracebackACT.isChecked(),
818
817
  'currentStyleSheet': self._stylesheet,
819
818
  'flash_time': self.uiConsoleTXT.flash_time,
820
819
  'find_files_regex': self.uiFindInWorkboxesWGT.uiRegexBTN.isChecked(),
@@ -967,6 +966,8 @@ class LoggerWindow(Window):
967
966
  self.textEditorPath = pref.get('textEditorPath', defaultExePath)
968
967
  self.textEditorCmdTempl = pref.get('textEditorCmdTempl', defaultCmd)
969
968
 
969
+ self.uiSeparateTracebackACT.setChecked(pref.get('uiSeparateTracebackACT', True))
970
+
970
971
  self.uiWordWrapACT.setChecked(pref.get('wordWrap', True))
971
972
  self.setWordWrap(self.uiWordWrapACT.isChecked())
972
973
  self.uiClearBeforeRunningACT.setChecked(pref.get('clearBeforeRunning', False))
@@ -1041,16 +1042,24 @@ class LoggerWindow(Window):
1041
1042
  self.uiStatusLBL.setText(txt)
1042
1043
  self.uiMenuBar.adjustSize()
1043
1044
 
1045
+ def setupStatusTimer(self):
1046
+ # Create timer to autohide status messages
1047
+ self.statusTimer = QTimer()
1048
+ self.statusTimer.setSingleShot(True)
1049
+ self.statusTimer.setInterval(2000)
1050
+ self.statusTimer.timeout.connect(self.clearStatusText)
1051
+
1044
1052
  def clearStatusText(self):
1045
1053
  """Clear any displayed status text"""
1046
1054
  self.uiStatusLBL.clear()
1047
1055
  self.uiMenuBar.adjustSize()
1048
1056
 
1049
1057
  def autoHideStatusText(self):
1050
- """Set timer to automatically clear status text"""
1051
- if self.statusTimer.isActive():
1052
- self.statusTimer.stop()
1053
- self.statusTimer.singleShot(2000, self.clearStatusText)
1058
+ """Set timer to automatically clear status text.
1059
+
1060
+ If timer is already running, it will be automatically stopped first (We can't
1061
+ use static method QTimer.singleShot for this)
1062
+ """
1054
1063
  self.statusTimer.start()
1055
1064
 
1056
1065
  def setStyleSheet(self, stylesheet, recordPrefs=True):
@@ -92,7 +92,7 @@
92
92
  <x>0</x>
93
93
  <y>0</y>
94
94
  <width>796</width>
95
- <height>21</height>
95
+ <height>22</height>
96
96
  </rect>
97
97
  </property>
98
98
  <widget class="QMenu" name="uiDebugMENU">
@@ -193,6 +193,8 @@
193
193
  <addaction name="uiSetFlashWindowIntervalACT"/>
194
194
  <addaction name="separator"/>
195
195
  <addaction name="uiErrorHyperlinksACT"/>
196
+ <addaction name="uiSeparateTracebackACT"/>
197
+ <addaction name="separator"/>
196
198
  <addaction name="uiSetPreferredTextEditorPathACT"/>
197
199
  <addaction name="uiSetWorkboxEditorACT"/>
198
200
  </widget>
@@ -1003,6 +1005,14 @@ at the indicated line in the specified text editor.
1003
1005
  <string>Highlight Exact Completion</string>
1004
1006
  </property>
1005
1007
  </action>
1008
+ <action name="uiSeparateTracebackACT">
1009
+ <property name="checkable">
1010
+ <bool>true</bool>
1011
+ </property>
1012
+ <property name="text">
1013
+ <string>Visually Separate PrEditor Traceback</string>
1014
+ </property>
1015
+ </action>
1006
1016
  </widget>
1007
1017
  <customwidgets>
1008
1018
  <customwidget>
@@ -84,8 +84,8 @@ class WorkboxMixin(object):
84
84
  txt = '\n' * line + txt
85
85
 
86
86
  # execute the code
87
- filename = self.__workbox_filename__(selection=True)
88
- ret, was_eval = self.__console__().executeString(txt, filename=filename)
87
+ title = self.__workbox_trace_title__(selection=True)
88
+ ret, was_eval = self.__console__().executeString(txt, filename=title)
89
89
  if was_eval:
90
90
  # If the selected code was a statement print the result of the statement.
91
91
  ret = repr(ret)
@@ -145,7 +145,7 @@ class WorkboxMixin(object):
145
145
 
146
146
  return group, editor
147
147
 
148
- def __workbox_filename__(self, selection=False):
148
+ def __workbox_trace_title__(self, selection=False):
149
149
  title = "WorkboxSelection" if selection else "Workbox"
150
150
  group, editor = self.__group_tab_index__()
151
151
  if group == -1 or editor == -1:
@@ -57,8 +57,8 @@ class WorkboxTextEdit(WorkboxMixin, QTextEdit):
57
57
 
58
58
  def __exec_all__(self):
59
59
  txt = self.__text__().rstrip()
60
- filename = self.__workbox_filename__()
61
- self.__console__().executeString(txt, filename=filename)
60
+ title = self.__workbox_trace_title__()
61
+ self.__console__().executeString(txt, filename=title)
62
62
 
63
63
  def __font__(self):
64
64
  return self.font()
@@ -73,8 +73,8 @@ class WorkboxWidget(WorkboxMixin, DocumentEditor):
73
73
 
74
74
  def __exec_all__(self):
75
75
  txt = self.__unix_end_lines__(self.text()).rstrip()
76
- filename = self.__workbox_filename__()
77
- self.__console__().executeString(txt, filename=filename)
76
+ title = self.__workbox_trace_title__()
77
+ self.__console__().executeString(txt, filename=title)
78
78
 
79
79
  def __file_monitoring_enabled__(self):
80
80
  return self._fileMonitoringActive
@@ -150,7 +150,12 @@ class WorkboxWidget(WorkboxMixin, DocumentEditor):
150
150
 
151
151
  def __selected_text__(self, start_of_line=False, selectText=False):
152
152
  line, s, end, e = self.getSelection()
153
- if line == -1:
153
+
154
+ # Sometime self.getSelection returns values that equate to a non-existent
155
+ # selection, ie start and end are the same, so let's process it as if there is
156
+ # no selection
157
+ selectionIsEmpty = line == end and s == e
158
+ if line == -1 or selectionIsEmpty:
154
159
  # Nothing is selected, return the current line of text
155
160
  line, index = self.getCursorPosition()
156
161
  txt = self.text(line)
@@ -188,7 +193,7 @@ class WorkboxWidget(WorkboxMixin, DocumentEditor):
188
193
  Returns:
189
194
  str: The requested text.
190
195
  """
191
- if line:
196
+ if line is not None:
192
197
  return self.text(line)
193
198
  elif (start is None) != (end is None):
194
199
  raise ValueError('You must pass start and end if you pass either.')
@@ -21,7 +21,7 @@ from functools import partial
21
21
 
22
22
  import Qt as Qt_py
23
23
  from Qt.QtCore import Property, QEvent, QPoint, Qt, Signal
24
- from Qt.QtGui import QColor, QFont, QFontMetrics, QIcon, QKeySequence
24
+ from Qt.QtGui import QColor, QFont, QFontMetrics, QIcon, QKeyEvent, QKeySequence
25
25
  from Qt.QtWidgets import (
26
26
  QAction,
27
27
  QApplication,
@@ -326,7 +326,8 @@ class DocumentEditor(QsciScintilla):
326
326
 
327
327
  with undo_step(self):
328
328
  # lookup the selected text positions
329
- cursorLine, cursorIndex = self.expandCursorToLineSelection()
329
+ origSelection = self.expandCursorToLineSelection()
330
+ origStartLine, origStartCol, origEndLine, origEndCol = origSelection
330
331
  startLine, startCol, endLine, endCol = self.getSelection()
331
332
 
332
333
  # Collect comments and indents, to determine indentation to use, and whether
@@ -351,11 +352,14 @@ class DocumentEditor(QsciScintilla):
351
352
 
352
353
  # If all lines are comments, we un-comment. If any aren't
353
354
  # comments, we comment.
355
+ sel_adjust = 0
354
356
  if doWhich is None:
355
357
  if all(comments):
356
358
  doWhich = "Uncomment"
359
+ sel_adjust = -1 * len(commentSpace)
357
360
  else:
358
361
  doWhich = "Comment"
362
+ sel_adjust = len(commentSpace)
359
363
 
360
364
  for line in range(startLine, endLine + 1):
361
365
  lineText = self.getSelectionCurrentLineText(line)
@@ -367,19 +371,12 @@ class DocumentEditor(QsciScintilla):
367
371
  if doWhich == "Comment":
368
372
  self.setCursorPosition(line, indent)
369
373
  self.insert(commentSpace)
370
- if cursorIndex is not None and cursorIndex >= indent:
371
- cursorIndex += len(commentSpace)
372
- if line == startLine:
373
- startCol -= len(commentSpace)
374
- if line == endLine:
375
- endCol += len(commentSpace)
376
-
377
374
  elif doWhich == "Uncomment":
378
375
  for curComment in [commentSpace, comment]:
379
376
  foundText = self.getSelectedCommentText(
380
377
  line, indent, len(curComment)
381
378
  )
382
- startCol, endCol, cursorIndex, removed = self.removeComment(
379
+ startCol, endCol, _, removed = self.removeComment(
383
380
  foundText,
384
381
  curComment,
385
382
  line,
@@ -388,16 +385,20 @@ class DocumentEditor(QsciScintilla):
388
385
  startCol,
389
386
  endLine,
390
387
  endCol,
391
- cursorIndex,
388
+ origEndCol,
392
389
  )
393
390
  if removed:
394
391
  break
395
392
 
393
+ # Adjust columns so selection moves in or out with comment. If startCol
394
+ # began at 0 keep it there.
395
+ adjustedStartCol = origStartCol + sel_adjust if origStartCol else 0
396
+ adjustedendCol = origEndCol + sel_adjust
397
+
396
398
  # restore the currently selected text, or cursor position
397
- if cursorLine is not None:
398
- startLine, endLine = cursorLine, cursorLine
399
- startCol, endCol = cursorIndex, cursorIndex
400
- self.setSelection(startLine, startCol, endLine, endCol)
399
+ self.setSelection(
400
+ origStartLine, adjustedStartCol, origEndLine, adjustedendCol
401
+ )
401
402
 
402
403
  def removeComment(
403
404
  self,
@@ -460,11 +461,26 @@ class DocumentEditor(QsciScintilla):
460
461
  return lineText
461
462
 
462
463
  def expandCursorToLineSelection(self):
463
- line, index = None, None
464
- if not self.hasSelectedText():
465
- line, index = self.getCursorPosition()
466
- self.setSelection(line, 0, line, self.lineLength(line))
467
- return line, index
464
+ start_line = None
465
+ start_idx = None
466
+ end_line = None
467
+ end_idx = None
468
+ lineLength = None
469
+
470
+ if self.hasSelectedText():
471
+ start_line, start_idx, end_line, end_idx = self.getSelection()
472
+ else:
473
+ start_line, start_idx = self.getCursorPosition()
474
+ end_line = start_line
475
+ end_idx = start_idx
476
+
477
+ if start_line is not None:
478
+ # Get lineLength this way instead of self.lineLength (QScintilla) because
479
+ # that gets confused by \r\n vs \n , so linked files will behave
480
+ # incorrectly.
481
+ lineLength = len(self.text(end_line).rstrip())
482
+ self.setSelection(start_line, 0, end_line, lineLength)
483
+ return start_line, start_idx, end_line, end_idx
468
484
 
469
485
  def copy(self):
470
486
  """Copies the selected text.
@@ -861,11 +877,39 @@ class DocumentEditor(QsciScintilla):
861
877
 
862
878
  def keyPressEvent(self, event):
863
879
  key = event.key()
880
+ modifiers = event.modifiers()
881
+
882
+ retPressed = key == Qt.Key.Key_Return
883
+ altPressed = modifiers == Qt.KeyboardModifier.AltModifier
884
+ altReturnPressed = altPressed and retPressed
885
+
864
886
  if key == Qt.Key.Key_Backtab:
865
887
  self.unindentSelection()
866
888
  elif key == Qt.Key.Key_Escape:
867
889
  # Using QShortcut for Escape did not seem to work.
868
890
  self.showAutoComplete(True)
891
+ elif altReturnPressed:
892
+ # If Alt Return pressed, create new unindented line
893
+
894
+ # Capture initial autoIndent state, then ensure it's disabled
895
+ autoIndent = self.autoIndent()
896
+ self.setAutoIndent(False)
897
+
898
+ # Create and send a new KeyEvent, just Return (Cannot just send original
899
+ # event, it doesn't register.
900
+ new_event = QKeyEvent(
901
+ event.type(),
902
+ Qt.Key.Key_Return,
903
+ Qt.KeyboardModifier(0),
904
+ "",
905
+ event.isAutoRepeat(),
906
+ event.count(),
907
+ )
908
+ QsciScintilla.keyPressEvent(self, new_event)
909
+
910
+ # Reset autoIndent property
911
+ self.setAutoIndent(autoIndent)
912
+
869
913
  else:
870
914
  return QsciScintilla.keyPressEvent(self, event)
871
915
 
preditor/version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.2.0'
32
- __version_tuple__ = version_tuple = (1, 2, 0)
31
+ __version__ = version = '1.3.0'
32
+ __version_tuple__ = version_tuple = (1, 3, 0)
33
33
 
34
- __commit_id__ = commit_id = 'g5a9de95c6'
34
+ __commit_id__ = commit_id = 'gaa3ec1d05'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PrEditor
3
- Version: 1.2.0
3
+ Version: 1.3.0
4
4
  Summary: A python REPL and Editor and console based on Qt.
5
5
  Author-email: Blur Studio <opensource@blur.com>
6
6
  License: LGPL-3.0
@@ -13,7 +13,7 @@ preditor/plugins.py,sha256=RAeyvdZxQsZY313ae5aAhahqpjuhaXJzDxPyLcR-09U,4401
13
13
  preditor/prefs.py,sha256=BPtSsdv2yuiRpIaqEml9fxlVYKHNfqQ77hp5YIQRDBg,2172
14
14
  preditor/settings.py,sha256=DV9_DbJorEnhdIvW15E7h7PswlQUsy0UlA8bXUYN0og,2206
15
15
  preditor/streamhandler_helper.py,sha256=kiU6T9WqJ3JKTTKCa7IUU8brwK7zO5UUpEzLhEfKe44,1788
16
- preditor/version.py,sha256=zHRWUFacu0mfM24GYuT-vIcPzFr12VT8INArUatU4D0,712
16
+ preditor/version.py,sha256=gOAxH-HjHWFYNCPGwqNzK33-aNqHMaGyyUsQHLT91oc,712
17
17
  preditor/weakref.py,sha256=b--KomFAHcMWr3DEAIN2j3XxRhjDWKw0WABXyn1nxDg,12177
18
18
  preditor/cores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  preditor/cores/core.py,sha256=mdVXlEPDh8kIdOpMDqi8P1VaqfVvyu5cXBq_toONcaM,586
@@ -32,7 +32,7 @@ preditor/gui/__init__.py,sha256=DeOH5K4_M0YLNx1i7NRvwCgwjyjkre4vVwlr5OEMx9Q,3423
32
32
  preditor/gui/app.py,sha256=EhVsVMr5C5WSKNDlxGawzg-3lbTJxDMLi2fPomECacM,5869
33
33
  preditor/gui/codehighlighter.py,sha256=wUOgLDhcAQf72DSS65r9_RYdv6PVJwWFXTdOPvvps_A,6790
34
34
  preditor/gui/completer.py,sha256=U2FBJA_ceFq_viGqPogncH-6vhrtTcpxAF61SUnaOJ8,7813
35
- preditor/gui/console.py,sha256=S4JZz5rkjLKhA5YYXXs6bx_C56BBlVENccnW2DnTeL0,35791
35
+ preditor/gui/console.py,sha256=BEvEU7yjjn1kz1BF9T7JlqXpLCP7pI5nP6Rbdh2P-os,36476
36
36
  preditor/gui/dialog.py,sha256=fasmBDhN-B6uretbSQ3x1SxImsQLSKIMw4PC9B8BimI,6535
37
37
  preditor/gui/drag_tab_bar.py,sha256=_TFLRyodO5e16R8DNGQjPAwrGk2SBnqtj4Bn8mxr0HI,8018
38
38
  preditor/gui/editor_chooser.py,sha256=lv1eY0UJOulX1l-P-ZQEoneYz6BNX2VkXEbg3GUu1ag,1991
@@ -41,18 +41,18 @@ preditor/gui/find_files.py,sha256=TtsjHXKWvwKrxHYZryB_NPANoFpMRlAxWJp1hA6Ny2I,43
41
41
  preditor/gui/level_buttons.py,sha256=h0pMMzp-ElwcN_qfR4EBQtXn1C666KVcnR9dMoixD3E,12597
42
42
  preditor/gui/logger_window_handler.py,sha256=43-DxzuNJq6UV6Ofc4TKRt179Sf5AxDkVDGrtq_Knok,1571
43
43
  preditor/gui/logger_window_plugin.py,sha256=x6mTuS6gmeMZtV0UIXHXIif1_B5oKVbJhuIBaW0BFVs,1210
44
- preditor/gui/loggerwindow.py,sha256=gGntieiZ2GdNY99CXNrldrv5abYzfSWYk-HdIVb3sYM,54378
44
+ preditor/gui/loggerwindow.py,sha256=Ai1n1RHve7bn-rVoTeoT5oTH5HDrKfw8v9f_0zWuBYA,54733
45
45
  preditor/gui/newtabwidget.py,sha256=5aCWn9xAl5h1oZACqVuEsOAbzKTS2RegrLI41gROC8A,1971
46
46
  preditor/gui/set_text_editor_path_dialog.py,sha256=bn8IeQHXPSU4PLYXQmSxKB1V8iuJaI1PA5aDJNgxXks,2292
47
47
  preditor/gui/status_label.py,sha256=SlNRmPc28S4E2OFVmErv0DmZstk4011Q_7uLp43SF0A,3320
48
48
  preditor/gui/suggest_path_quotes_dialog.py,sha256=QUJf_9hs8wOO6bFOr8_Z2xnNhSA8TfKFMOzheUqUDnY,1822
49
49
  preditor/gui/window.py,sha256=6Ztjqb0Xfh8DsI7hBF4Rg-4-gWPZKTV4GRJiz3V8O6Q,5904
50
- preditor/gui/workbox_mixin.py,sha256=uvLqbcdPOAL23kCz3Bnm1zOZ5PjXEUR9WEr-yE5iaTA,14990
51
- preditor/gui/workbox_text_edit.py,sha256=shOeQSo3OdDnxig0xLiGZOcwwiR6fUkKLPlx2PejH40,4475
52
- preditor/gui/workboxwidget.py,sha256=Dp81l3sFFUhmm8NZj-RTNbp4Up9fjTXb8arH0WWtjs4,10316
50
+ preditor/gui/workbox_mixin.py,sha256=4wowgU-iuegoOUv9Az69AWuRERXuCF8sdaNNStVBJBw,14990
51
+ preditor/gui/workbox_text_edit.py,sha256=wrJcGqIJ2-5BqEcP_qVKNlWUD8Geo8IxrIXncnDG6yw,4472
52
+ preditor/gui/workboxwidget.py,sha256=7m2QzuOfoTuB2H9mODnwZ1npX0zI_1bjeQp3_Lh990s,10588
53
53
  preditor/gui/fuzzy_search/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
54
  preditor/gui/fuzzy_search/fuzzy_search.py,sha256=zohr6oAE99FZFlLjqKZajBrdyJIYLW96rcCOy5Bn1i0,3714
55
- preditor/gui/group_tab_widget/__init__.py,sha256=3C2wAdD8XrXYGetjOL9lIoNhcQf5AP-QfXgMAvqRJMg,13037
55
+ preditor/gui/group_tab_widget/__init__.py,sha256=udAR7WDxNx3-J2Idc1QyJ7wW78rSxQGTdjUW_2bctlE,13974
56
56
  preditor/gui/group_tab_widget/grouped_tab_menu.py,sha256=lopd3mjHJIE_5xLdlZL0ghuBzsYo36vO1OZE6L6tqbI,1288
57
57
  preditor/gui/group_tab_widget/grouped_tab_models.py,sha256=duwEdtbvsJ1nPKFakrnY8QuCoBx4M7mOpB0_0Nrm6_Y,4027
58
58
  preditor/gui/group_tab_widget/grouped_tab_widget.py,sha256=Z8SXWN3-Ukl7cwambNwX4Gb2uKBDsVM-EG9Z6W7ICts,3025
@@ -60,7 +60,7 @@ preditor/gui/group_tab_widget/one_tab_widget.py,sha256=PdZAXjmV9oTHakh8aFYRlLnfw
60
60
  preditor/gui/ui/editor_chooser.ui,sha256=cYSVHK0A4-zst6JyDkrBZK9qcAontbhV4Mmnw5ps72E,2736
61
61
  preditor/gui/ui/errordialog.ui,sha256=i7cVc28FPxA_b4Xa58W_xmRJ_1GFb5rgtUhR_gZcf4E,1831
62
62
  preditor/gui/ui/find_files.ui,sha256=8mdD3Vg3ofRMChdKntxiDHO3JXHQSKjjY6OLY_1W5lc,3328
63
- preditor/gui/ui/loggerwindow.ui,sha256=r3L46h3YNLiQ1dPvWY24D5Zqrd2X2x5Zs6jMjDTDDyg,31279
63
+ preditor/gui/ui/loggerwindow.ui,sha256=dkfn2qY9nZeX7-7p9CMZh5W2Y83Tirn1ZeFAXjisquU,31580
64
64
  preditor/gui/ui/set_text_editor_path_dialog.ui,sha256=VLBpTvGneXAi9RX1dRd6oPwKoZhQ_m5HO1j1qXPhTxc,5201
65
65
  preditor/gui/ui/suggest_path_quotes_dialog.ui,sha256=0hcr7kEFmmMVEp7vv18mDpvWZ0zOrojlkTLhIWCFKww,5923
66
66
  preditor/resource/environment_variables.html,sha256=-uWicgOkour-sxtY-crrjMiLMyJzAzshwUXKqSm6TmI,3134
@@ -116,7 +116,7 @@ preditor/resource/lang/python.json,sha256=CXiQh0jcgd-OCrM-s9IF7s4o-g5WRA4vDaAyTR
116
116
  preditor/resource/stylesheet/Bright.css,sha256=SfnPRBqfqEL4IF8RGt9PpLX_cSiGpfG9Q2hE1F9uTsk,2480
117
117
  preditor/resource/stylesheet/Dark.css,sha256=Sige7beBhRyfav9_mXvn-LhksxbX0_WEgpZSKhmPavc,5384
118
118
  preditor/scintilla/__init__.py,sha256=IDndbcS8KW1TMcQTA1Vd-LzcdsNtOUfyldnjkKae0yw,956
119
- preditor/scintilla/documenteditor.py,sha256=j9ZAAyYZwPZbI0hW5ou76aIpaFzvzukAT9l8KLY9s1o,79927
119
+ preditor/scintilla/documenteditor.py,sha256=9DyZBNPD59W1x8CGFHhxlgf9WTHi6ni7EIlyL7aMnIM,81477
120
120
  preditor/scintilla/finddialog.py,sha256=WxNVvkCfXrw_8E3-7tS1DIS9H1-ioLASDgIbniDxz3g,2376
121
121
  preditor/scintilla/delayables/__init__.py,sha256=lj9tMc3IL2QeaN858Ixt_n7clJngbKqG2sk66vIcFcQ,275
122
122
  preditor/scintilla/delayables/smart_highlight.py,sha256=5emI4StsQCIYizoFsib1rdw0gnUarV9TQ6CwxmzXXpU,3623
@@ -157,11 +157,11 @@ preditor/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
157
  preditor/utils/cute.py,sha256=tLTChQ1-zMzHHaKpG85u4FbtJl_2R1E8-uckpOQbEEM,1057
158
158
  preditor/utils/stylesheets.py,sha256=EVWZNq3WnaRiyUPoYMKQo_dLEwbRyKu26b03I1JDA-s,1622
159
159
  preditor/utils/text_search.py,sha256=21kuSDTpLIPUcriB81WP1kWfzuDBuP13ZtHUtypP5jE,14218
160
- preditor-1.2.0.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
160
+ preditor-1.3.0.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
161
161
  tests/find_files/test_find_files.py,sha256=ETVe1tC666uTc_5pPhjzPCaMrMkYUB8iKGXDfW9usgI,2722
162
162
  tests/ide/test_delayable_engine.py,sha256=Nv6SQXpwIdfgRbEOsEcR-7jhjZ6E0THPdwDoPvAM6y4,5948
163
- preditor-1.2.0.dist-info/METADATA,sha256=mrSA7IThDujGF3AhzzJ0OluiwMayoDbvO9qRgfjHll0,12744
164
- preditor-1.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
165
- preditor-1.2.0.dist-info/entry_points.txt,sha256=mpe0HFD_oIEBNPTJNyUEbmMV6Ivrp4EuYyZ34C5d_PU,519
166
- preditor-1.2.0.dist-info/top_level.txt,sha256=dZSBDecBQovRyqbFdvwk1AvMon636dJ14vr9ov1LSPs,20
167
- preditor-1.2.0.dist-info/RECORD,,
163
+ preditor-1.3.0.dist-info/METADATA,sha256=FZD8AFoCOMs3bl6DWKWD5dCUnouqkXl1TSzrUNa1PhM,12744
164
+ preditor-1.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
165
+ preditor-1.3.0.dist-info/entry_points.txt,sha256=mpe0HFD_oIEBNPTJNyUEbmMV6Ivrp4EuYyZ34C5d_PU,519
166
+ preditor-1.3.0.dist-info/top_level.txt,sha256=dZSBDecBQovRyqbFdvwk1AvMon636dJ14vr9ov1LSPs,20
167
+ preditor-1.3.0.dist-info/RECORD,,