euporie 2.8.1__py3-none-any.whl → 2.8.3__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.
- euporie/console/tabs/console.py +2 -1
- euporie/core/__init__.py +1 -9
- euporie/core/__main__.py +9 -0
- euporie/core/app.py +11 -0
- euporie/core/convert/datum.py +14 -9
- euporie/core/convert/formats/ansi.py +37 -7
- euporie/core/convert/utils.py +9 -19
- euporie/core/filters.py +5 -52
- euporie/core/format.py +13 -2
- euporie/core/ft/html.py +22 -11
- euporie/core/graphics.py +4 -5
- euporie/core/key_binding/bindings/micro.py +4 -1
- euporie/core/launch.py +7 -2
- euporie/core/layout/scroll.py +7 -6
- euporie/core/widgets/cell.py +8 -0
- euporie/core/widgets/display.py +18 -12
- euporie/core/widgets/inputs.py +24 -11
- euporie/core/widgets/menu.py +4 -4
- euporie/core/widgets/pager.py +2 -1
- euporie/core/widgets/search.py +135 -42
- euporie/notebook/app.py +9 -1
- euporie/notebook/tabs/edit.py +4 -1
- euporie/notebook/tabs/notebook.py +6 -12
- euporie/web/widgets/webview.py +2 -1
- {euporie-2.8.1.dist-info → euporie-2.8.3.dist-info}/METADATA +4 -8
- {euporie-2.8.1.dist-info → euporie-2.8.3.dist-info}/RECORD +31 -31
- {euporie-2.8.1.dist-info → euporie-2.8.3.dist-info}/WHEEL +1 -1
- {euporie-2.8.1.data → euporie-2.8.3.data}/data/share/applications/euporie-console.desktop +0 -0
- {euporie-2.8.1.data → euporie-2.8.3.data}/data/share/applications/euporie-notebook.desktop +0 -0
- {euporie-2.8.1.dist-info → euporie-2.8.3.dist-info}/entry_points.txt +0 -0
- {euporie-2.8.1.dist-info → euporie-2.8.3.dist-info}/licenses/LICENSE +0 -0
euporie/core/widgets/inputs.py
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
from __future__ import annotations
|
4
4
|
|
5
5
|
import logging
|
6
|
+
from functools import lru_cache
|
6
7
|
from typing import TYPE_CHECKING
|
7
8
|
|
8
9
|
from prompt_toolkit.auto_suggest import AutoSuggest, DynamicAutoSuggest
|
@@ -97,6 +98,21 @@ if TYPE_CHECKING:
|
|
97
98
|
log = logging.getLogger(__name__)
|
98
99
|
|
99
100
|
|
101
|
+
@lru_cache
|
102
|
+
def _get_lexer(highlight: bool, lexer: Lexer | None, language: str) -> Lexer:
|
103
|
+
"""Determine which lexer should be used for syntax highlighting."""
|
104
|
+
if not highlight:
|
105
|
+
return SimpleLexer()
|
106
|
+
elif lexer is not None:
|
107
|
+
return lexer
|
108
|
+
try:
|
109
|
+
pygments_lexer_class = get_lexer_by_name(language).__class__
|
110
|
+
except ClassNotFound:
|
111
|
+
return SimpleLexer()
|
112
|
+
else:
|
113
|
+
return PygmentsLexer(pygments_lexer_class, sync_from_start=False)
|
114
|
+
|
115
|
+
|
100
116
|
class KernelInput(TextArea):
|
101
117
|
"""Kernel input text areas.
|
102
118
|
|
@@ -129,7 +145,7 @@ class KernelInput(TextArea):
|
|
129
145
|
scrollbar: FilterOrBool = True,
|
130
146
|
style: str = "class:kernel-input",
|
131
147
|
search_field: SearchToolbar | None = None,
|
132
|
-
preview_search: FilterOrBool =
|
148
|
+
preview_search: FilterOrBool = False,
|
133
149
|
prompt: AnyFormattedText = "",
|
134
150
|
input_processors: list[Processor] | None = None,
|
135
151
|
name: str = "",
|
@@ -182,14 +198,6 @@ class KernelInput(TextArea):
|
|
182
198
|
self._language = language
|
183
199
|
self.lexer = lexer
|
184
200
|
|
185
|
-
def _get_lexer() -> Lexer:
|
186
|
-
try:
|
187
|
-
pygments_lexer_class = get_lexer_by_name(self.language).__class__
|
188
|
-
except ClassNotFound:
|
189
|
-
return SimpleLexer()
|
190
|
-
else:
|
191
|
-
return PygmentsLexer(pygments_lexer_class, sync_from_start=False)
|
192
|
-
|
193
201
|
self.formatters = formatters if formatters is not None else []
|
194
202
|
self._diagnostics = diagnostics or Report()
|
195
203
|
self.inspector = inspector
|
@@ -228,7 +236,8 @@ class KernelInput(TextArea):
|
|
228
236
|
|
229
237
|
# Set extra key-bindings
|
230
238
|
widgets_key_bindings = load_registered_bindings(
|
231
|
-
"euporie.core.widgets.inputs.KernelInput"
|
239
|
+
"euporie.core.widgets.inputs.KernelInput",
|
240
|
+
config=app.config,
|
232
241
|
)
|
233
242
|
if key_bindings:
|
234
243
|
widgets_key_bindings = merge_key_bindings(
|
@@ -240,7 +249,11 @@ class KernelInput(TextArea):
|
|
240
249
|
|
241
250
|
self.control = BufferControl(
|
242
251
|
buffer=self.buffer,
|
243
|
-
lexer=DynamicLexer(
|
252
|
+
lexer=DynamicLexer(
|
253
|
+
lambda: _get_lexer(
|
254
|
+
app.config.syntax_highlighting, self.lexer, self.language
|
255
|
+
)
|
256
|
+
),
|
244
257
|
input_processors=[
|
245
258
|
ConditionalProcessor(
|
246
259
|
DiagnosticProcessor(_get_diagnostics),
|
euporie/core/widgets/menu.py
CHANGED
@@ -408,8 +408,6 @@ class MenuBar:
|
|
408
408
|
"""Close the current menu."""
|
409
409
|
if self.selected_menu:
|
410
410
|
self.selected_menu = self.selected_menu[:-1]
|
411
|
-
log.debug(self.selected_menu)
|
412
|
-
log.debug(self.last_focused)
|
413
411
|
self.refocus()
|
414
412
|
|
415
413
|
# Add global CUA menu shortcut
|
@@ -516,7 +514,7 @@ class MenuBar:
|
|
516
514
|
focused = self.focused()
|
517
515
|
|
518
516
|
# This is called during the rendering. When we discover that this
|
519
|
-
# widget doesn't have the focus anymore
|
517
|
+
# widget doesn't have the focus anymore, reset the menu state.
|
520
518
|
if not focused:
|
521
519
|
self.selected_menu = []
|
522
520
|
|
@@ -527,9 +525,11 @@ class MenuBar:
|
|
527
525
|
# Toggle focus.
|
528
526
|
if not hover and focused and self.selected_menu == [index]:
|
529
527
|
self.selected_menu = []
|
530
|
-
|
528
|
+
else:
|
529
|
+
self.selected_menu = [index]
|
531
530
|
self.refocus()
|
532
531
|
return None
|
532
|
+
|
533
533
|
return NotImplemented
|
534
534
|
|
535
535
|
results: StyleAndTextTuples = []
|
euporie/core/widgets/pager.py
CHANGED
euporie/core/widgets/search.py
CHANGED
@@ -5,7 +5,9 @@ from __future__ import annotations
|
|
5
5
|
import logging
|
6
6
|
from typing import TYPE_CHECKING
|
7
7
|
|
8
|
+
from prompt_toolkit.document import Document
|
8
9
|
from prompt_toolkit.filters.app import is_searching
|
10
|
+
from prompt_toolkit.filters.base import Condition
|
9
11
|
from prompt_toolkit.key_binding.vi_state import InputMode
|
10
12
|
from prompt_toolkit.layout.controls import BufferControl, SearchBufferControl
|
11
13
|
from prompt_toolkit.search import SearchDirection
|
@@ -55,7 +57,12 @@ class SearchBar(PtkSearchToolbar):
|
|
55
57
|
],
|
56
58
|
)
|
57
59
|
self.control.key_bindings = load_registered_bindings(
|
58
|
-
"euporie.core.widgets.search.SearchBar"
|
60
|
+
"euporie.core.widgets.search.SearchBar",
|
61
|
+
config=get_app().config,
|
62
|
+
)
|
63
|
+
search_state = self.control.searcher_search_state
|
64
|
+
search_state.ignore_case = Condition(
|
65
|
+
lambda: self.search_buffer.text.islower() or search_state.text.islower()
|
59
66
|
)
|
60
67
|
|
61
68
|
register_bindings(
|
@@ -73,28 +80,44 @@ class SearchBar(PtkSearchToolbar):
|
|
73
80
|
)
|
74
81
|
|
75
82
|
|
76
|
-
def
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
83
|
+
def find_search_control() -> tuple[SearchBufferControl | None, BufferControl | None]:
|
84
|
+
"""Find the current search buffer and buffer control."""
|
85
|
+
current_buffer_control: BufferControl | None = None
|
86
|
+
search_buffer_control: SearchBufferControl | None = None
|
87
|
+
|
81
88
|
app = get_app()
|
82
89
|
layout = app.layout
|
83
|
-
current_control = layout.current_control
|
84
|
-
|
85
|
-
if
|
90
|
+
current_control = app.layout.current_control
|
91
|
+
|
92
|
+
if isinstance(current_control, SearchBufferControl):
|
93
|
+
search_buffer_control = current_control
|
94
|
+
|
95
|
+
if search_buffer_control is None and app.search_bar is not None:
|
86
96
|
search_buffer_control = app.search_bar.control
|
87
|
-
|
88
|
-
|
89
|
-
|
97
|
+
|
98
|
+
if search_buffer_control is not None and current_buffer_control is None:
|
99
|
+
current_buffer_control = layout.search_links.get(search_buffer_control)
|
100
|
+
|
101
|
+
if current_buffer_control is None and isinstance(current_control, BufferControl):
|
102
|
+
current_buffer_control = current_control
|
103
|
+
|
104
|
+
if (
|
105
|
+
search_buffer_control is None
|
106
|
+
and current_buffer_control is not None
|
107
|
+
and current_buffer_control.search_buffer_control is not None
|
90
108
|
):
|
91
|
-
search_buffer_control =
|
92
|
-
|
93
|
-
|
94
|
-
|
109
|
+
search_buffer_control = current_buffer_control.search_buffer_control
|
110
|
+
|
111
|
+
return search_buffer_control, current_buffer_control
|
112
|
+
|
113
|
+
|
114
|
+
def find_searchable_controls(
|
115
|
+
search_buffer_control: SearchBufferControl, current_control: BufferControl | None
|
116
|
+
) -> list[BufferControl]:
|
117
|
+
"""Find list of searchable controls and the index of the next control."""
|
95
118
|
searchable_controls: list[BufferControl] = []
|
96
119
|
next_control_index = 0
|
97
|
-
for control in layout.find_all_controls():
|
120
|
+
for control in get_app().layout.find_all_controls():
|
98
121
|
# Find the index of the next searchable control so we can link the search
|
99
122
|
# control to it if the currently focused control is not searchable. This is so
|
100
123
|
# that the next searchable control can be focused when search is completed.
|
@@ -105,24 +128,40 @@ def start_global_search(
|
|
105
128
|
isinstance(control, BufferControl)
|
106
129
|
and control.search_buffer_control == search_buffer_control
|
107
130
|
):
|
108
|
-
# Set its search direction
|
109
|
-
control.search_state.direction = direction
|
110
131
|
# Add it to our list
|
111
132
|
searchable_controls.append(control)
|
133
|
+
searchable_controls = (
|
134
|
+
searchable_controls[next_control_index:]
|
135
|
+
+ searchable_controls[:next_control_index]
|
136
|
+
)
|
137
|
+
return searchable_controls
|
138
|
+
|
139
|
+
|
140
|
+
def start_global_search(
|
141
|
+
buffer_control: BufferControl | None = None,
|
142
|
+
direction: SearchDirection = SearchDirection.FORWARD,
|
143
|
+
) -> None:
|
144
|
+
"""Start a search through all searchable `buffer_controls` in the layout."""
|
145
|
+
search_buffer_control, current_control = find_search_control()
|
146
|
+
if search_buffer_control is None:
|
147
|
+
return
|
148
|
+
searchable_controls = find_searchable_controls(
|
149
|
+
search_buffer_control, current_control
|
150
|
+
)
|
112
151
|
|
113
152
|
# Stop the search if we did not find any searchable controls
|
114
153
|
if not searchable_controls:
|
115
154
|
return
|
116
155
|
|
117
156
|
# If the current control is searchable, link it
|
157
|
+
app = get_app()
|
158
|
+
layout = app.layout
|
118
159
|
if current_control in searchable_controls:
|
119
160
|
assert isinstance(current_control, BufferControl)
|
120
161
|
layout.search_links[search_buffer_control] = current_control
|
121
162
|
else:
|
122
163
|
# otherwise use the next after the currently selected control
|
123
|
-
layout.search_links[search_buffer_control] = searchable_controls[
|
124
|
-
next_control_index % len(searchable_controls)
|
125
|
-
]
|
164
|
+
layout.search_links[search_buffer_control] = searchable_controls[0]
|
126
165
|
# Make sure to focus the search BufferControl
|
127
166
|
layout.focus(search_buffer_control)
|
128
167
|
# If we're in Vi mode, make sure to go into insert mode.
|
@@ -137,31 +176,85 @@ def find() -> None:
|
|
137
176
|
|
138
177
|
def find_prev_next(direction: SearchDirection) -> None:
|
139
178
|
"""Find the previous or next search match."""
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
search_buffer_control
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
179
|
+
if is_searching():
|
180
|
+
accept_search()
|
181
|
+
|
182
|
+
search_buffer_control, current_control = find_search_control()
|
183
|
+
if search_buffer_control is None:
|
184
|
+
return
|
185
|
+
searchable_controls = find_searchable_controls(
|
186
|
+
search_buffer_control, current_control
|
187
|
+
)
|
188
|
+
|
189
|
+
if direction == SearchDirection.BACKWARD:
|
190
|
+
searchable_controls = searchable_controls[:1] + searchable_controls[1:][::-1]
|
191
|
+
|
192
|
+
# Search over all searchable buffers
|
193
|
+
for i, control in enumerate(searchable_controls):
|
154
194
|
# Update search_state.
|
155
195
|
search_state = control.search_state
|
156
196
|
search_state.direction = direction
|
157
197
|
# Apply search to buffer
|
158
198
|
buffer = control.buffer
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
)
|
164
|
-
|
199
|
+
|
200
|
+
search_result: tuple[int, int] | None = None
|
201
|
+
|
202
|
+
# If we are searching history, use the PTK buffer search implementation
|
203
|
+
if buffer.enable_history_search():
|
204
|
+
search_result = buffer._search(search_state)
|
205
|
+
|
206
|
+
# Otherwise, only search the buffer's current "working line"
|
207
|
+
else:
|
208
|
+
document = buffer.document
|
209
|
+
# If have move to the next buffer, set the cursor position for the start of
|
210
|
+
# the search to the start or the end of the text, depending on if we are
|
211
|
+
# searching forwards or backwards
|
212
|
+
if i > 0:
|
213
|
+
if direction == SearchDirection.FORWARD:
|
214
|
+
document = Document(document.text, 0)
|
215
|
+
else:
|
216
|
+
document = Document(document.text, len(document.text))
|
217
|
+
|
218
|
+
text = search_state.text
|
219
|
+
ignore_case = search_state.ignore_case()
|
220
|
+
|
221
|
+
if direction == SearchDirection.FORWARD:
|
222
|
+
# Try find at the current input.
|
223
|
+
new_index = document.find(
|
224
|
+
text,
|
225
|
+
# If we have moved to the next buffer, include the current position
|
226
|
+
# which will be the start of the document text
|
227
|
+
include_current_position=i > 0,
|
228
|
+
ignore_case=ignore_case,
|
229
|
+
)
|
230
|
+
if new_index is not None:
|
231
|
+
search_result = (
|
232
|
+
buffer.working_index,
|
233
|
+
document.cursor_position + new_index,
|
234
|
+
)
|
235
|
+
else:
|
236
|
+
# Try find at the current input.
|
237
|
+
new_index = document.find_backwards(text, ignore_case=ignore_case)
|
238
|
+
if new_index is not None:
|
239
|
+
search_result = (
|
240
|
+
buffer.working_index,
|
241
|
+
document.cursor_position + new_index,
|
242
|
+
)
|
243
|
+
|
244
|
+
if search_result is not None:
|
245
|
+
working_index, cursor_position = search_result
|
246
|
+
buffer.working_index = working_index
|
247
|
+
buffer.cursor_position = cursor_position
|
248
|
+
# Set SelectionState
|
249
|
+
buffer.selection_state = SelectionState(
|
250
|
+
buffer.cursor_position + len(search_state.text)
|
251
|
+
)
|
252
|
+
buffer.selection_state.enter_shift_mode()
|
253
|
+
|
254
|
+
# Trigger a cursor position changed event on this buffer
|
255
|
+
buffer._cursor_position_changed()
|
256
|
+
|
257
|
+
break
|
165
258
|
|
166
259
|
|
167
260
|
@add_cmd()
|
euporie/notebook/app.py
CHANGED
@@ -445,7 +445,15 @@ class NotebookApp(BaseApp):
|
|
445
445
|
description="Turn elements of euporie's interface on or off",
|
446
446
|
),
|
447
447
|
self.config.get_item("color_scheme").menu,
|
448
|
-
|
448
|
+
MenuItem(
|
449
|
+
"Syntax highlighting",
|
450
|
+
children=[
|
451
|
+
self.config.get_item("syntax_highlighting").menu,
|
452
|
+
separator,
|
453
|
+
*self.config.get_item("syntax_theme").menu.children,
|
454
|
+
],
|
455
|
+
description="Configure syntax highlighting",
|
456
|
+
),
|
449
457
|
get_cmd("toggle-expand").menu,
|
450
458
|
get_cmd("toggle-line-numbers").menu,
|
451
459
|
self.config.get_item("set_cursor_shape").menu,
|
euporie/notebook/tabs/edit.py
CHANGED
@@ -148,7 +148,10 @@ class EditorTab(KernelTab):
|
|
148
148
|
[self.input_box],
|
149
149
|
width=Dimension(weight=1),
|
150
150
|
height=Dimension(weight=1),
|
151
|
-
key_bindings=load_registered_bindings(
|
151
|
+
key_bindings=load_registered_bindings(
|
152
|
+
"euporie.core.tabs.base.Tab",
|
153
|
+
config=self.app.config,
|
154
|
+
),
|
152
155
|
)
|
153
156
|
|
154
157
|
def save(self, path: Path | None = None, cb: Callable | None = None) -> None:
|
@@ -28,9 +28,7 @@ from euporie.core.filters import (
|
|
28
28
|
cursor_on_first_line,
|
29
29
|
cursor_on_last_line,
|
30
30
|
display_has_focus,
|
31
|
-
have_formatter,
|
32
31
|
insert_mode,
|
33
|
-
kernel_is_python,
|
34
32
|
kernel_tab_has_focus,
|
35
33
|
multiple_cells_selected,
|
36
34
|
replace_mode,
|
@@ -86,7 +84,7 @@ class Notebook(BaseNotebook):
|
|
86
84
|
except ModuleNotFoundError:
|
87
85
|
pass
|
88
86
|
else:
|
89
|
-
file_extensions
|
87
|
+
file_extensions.update(dict.fromkeys(NOTEBOOK_EXTENSIONS))
|
90
88
|
|
91
89
|
allow_stdin = True
|
92
90
|
|
@@ -246,15 +244,16 @@ class Notebook(BaseNotebook):
|
|
246
244
|
key_bindings=load_registered_bindings(
|
247
245
|
"euporie.core.tabs.base.Tab",
|
248
246
|
"euporie.notebook.tabs.notebook.Notebook",
|
247
|
+
config=self.app.config,
|
249
248
|
),
|
250
249
|
)
|
251
250
|
|
252
251
|
@property
|
253
252
|
def cell(self) -> Cell:
|
254
253
|
"""Return the currently selected `Cell` in this `Notebook`."""
|
255
|
-
cell
|
256
|
-
|
257
|
-
return
|
254
|
+
if isinstance(cell := self.page.get_child().content, Cell):
|
255
|
+
return cell
|
256
|
+
return Cell(0, {}, self)
|
258
257
|
|
259
258
|
# Editing specific stuff
|
260
259
|
|
@@ -1096,12 +1095,7 @@ class Notebook(BaseNotebook):
|
|
1096
1095
|
cell.input_box.reformat()
|
1097
1096
|
|
1098
1097
|
@staticmethod
|
1099
|
-
@add_cmd(
|
1100
|
-
filter=have_formatter
|
1101
|
-
& kernel_is_python
|
1102
|
-
& notebook_has_focus
|
1103
|
-
& ~buffer_has_focus,
|
1104
|
-
)
|
1098
|
+
@add_cmd(filter=notebook_has_focus & ~buffer_has_focus)
|
1105
1099
|
def _reformat_notebook() -> None:
|
1106
1100
|
"""Automatically reformat all code cells in the notebook."""
|
1107
1101
|
nb = get_app().tab
|
euporie/web/widgets/webview.py
CHANGED
@@ -95,7 +95,8 @@ class WebViewControl(UIControl):
|
|
95
95
|
self.render_thread = Thread(target=self.loop.run_forever, daemon=True)
|
96
96
|
|
97
97
|
self.key_bindings = load_registered_bindings(
|
98
|
-
"euporie.web.widgets.webview.WebViewControl"
|
98
|
+
"euporie.web.widgets.webview.WebViewControl",
|
99
|
+
config=get_app().config,
|
99
100
|
)
|
100
101
|
|
101
102
|
self._dom_cache: FastDictCache[tuple[Path], HTML] = FastDictCache(
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.3
|
2
2
|
Name: euporie
|
3
|
-
Version: 2.8.
|
3
|
+
Version: 2.8.3
|
4
4
|
Summary: Euporie is a suite of terminal applications for interacting with Jupyter kernels
|
5
5
|
Project-URL: Documentation, https://euporie.readthedocs.io/en/latest
|
6
6
|
Project-URL: Issues, https://github.com/joouha/euporie/issues
|
@@ -29,10 +29,10 @@ Requires-Dist: imagesize~=1.3
|
|
29
29
|
Requires-Dist: jupyter-client>=7.1
|
30
30
|
Requires-Dist: jupytext>=1.14.0
|
31
31
|
Requires-Dist: linkify-it-py~=1.0
|
32
|
-
Requires-Dist: markdown-it-py~=2.
|
32
|
+
Requires-Dist: markdown-it-py~=2.2.0
|
33
33
|
Requires-Dist: mdit-py-plugins~=0.3.0
|
34
34
|
Requires-Dist: nbformat~=5.0
|
35
|
-
Requires-Dist: pillow
|
35
|
+
Requires-Dist: pillow>=9.0
|
36
36
|
Requires-Dist: platformdirs~=3.5
|
37
37
|
Requires-Dist: prompt-toolkit~=3.0.36
|
38
38
|
Requires-Dist: pygments~=2.11
|
@@ -41,10 +41,6 @@ Requires-Dist: sixelcrop~=0.1.6
|
|
41
41
|
Requires-Dist: timg~=1.1.6
|
42
42
|
Requires-Dist: typing-extensions~=4.5
|
43
43
|
Requires-Dist: universal-pathlib~=0.2.1
|
44
|
-
Provides-Extra: format
|
45
|
-
Requires-Dist: black>=19.3.b0; extra == 'format'
|
46
|
-
Requires-Dist: isort~=5.10.1; extra == 'format'
|
47
|
-
Requires-Dist: ruff~=0.1.0; extra == 'format'
|
48
44
|
Provides-Extra: hub
|
49
45
|
Requires-Dist: asyncssh~=2.10.1; extra == 'hub'
|
50
46
|
Description-Content-Type: text/x-rst
|
@@ -3,10 +3,10 @@ euporie/console/__main__.py,sha256=m2EnzIDLO4dHlDt41JNKpUvAUSw6wD-X0V3YhymXqxc,2
|
|
3
3
|
euporie/console/app.py,sha256=Icu-q-qTOuap873-s0ONcrtluD6EH5DPlbxX8ue6Zqo,7379
|
4
4
|
euporie/console/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
euporie/console/tabs/__init__.py,sha256=Grm9EO1gnBO1o-k6Nqnlzo8XLIgFZSXNAdz49Vvh4zY,55
|
6
|
-
euporie/console/tabs/console.py,sha256=
|
7
|
-
euporie/core/__init__.py,sha256=
|
8
|
-
euporie/core/__main__.py,sha256=
|
9
|
-
euporie/core/app.py,sha256=
|
6
|
+
euporie/console/tabs/console.py,sha256=egClI0kRqQeBKjXOthxgpQ4eQpekaaN1LM76tKXJlEA,26109
|
7
|
+
euporie/core/__init__.py,sha256=Qk14pXMsR00wCnGYpMoqM4Acmqlaf1p7KKV8jKKIcdQ,313
|
8
|
+
euporie/core/__main__.py,sha256=_TeewhwpThCpmL8qYYtd61qeE_t61To1zrcM9o4lL_s,842
|
9
|
+
euporie/core/app.py,sha256=ZXpGbIOjMYahcUMIZw8DSumuWb45iE84-xgY7JQtJG8,46329
|
10
10
|
euporie/core/border.py,sha256=kJbpyxwJBtIRpFOpXhDtaCT1_oyVRjRiYKG4lXn3-iA,48507
|
11
11
|
euporie/core/clipboard.py,sha256=Ps1wTcIV2B1PKfXiNKITR8nee2bo5qVfdCuhobiCNms,4461
|
12
12
|
euporie/core/commands.py,sha256=uOS4cJTzxSv8jEMComMDAqaAUrsPjaB_AY4tTeZFGfY,8256
|
@@ -15,15 +15,15 @@ euporie/core/config.py,sha256=ka6wloVH2hLhe7ga3w0nKLtuYsMenXcumdIC4eNSqM8,22811
|
|
15
15
|
euporie/core/current.py,sha256=BdSVCLngNpZdtYJaxdijuu8N9yRcoU_wr0jI6RGRSms,557
|
16
16
|
euporie/core/data_structures.py,sha256=eA54Cg305R1mVX6YGTRPIvTN4piEFKrltehif49l92o,1800
|
17
17
|
euporie/core/diagnostics.py,sha256=5rS3DbJqNiPVfOb3tU4RKyq2rIMoS3O3_0-a62zknPE,1686
|
18
|
-
euporie/core/filters.py,sha256=
|
19
|
-
euporie/core/format.py,sha256=
|
20
|
-
euporie/core/graphics.py,sha256=
|
18
|
+
euporie/core/filters.py,sha256=wjTE7INpUAglprngLipLa66S_pNXoalu0HrcmmJeSlM,8253
|
19
|
+
euporie/core/format.py,sha256=oFlD3aX_uVeLhqxo2n-zaUBsiNKpWqhx6W-5arFY5C4,4154
|
20
|
+
euporie/core/graphics.py,sha256=g9kJeuoOCgx4IeD_EIlf3tAdRfQy4bTLs7istiZnvl0,32651
|
21
21
|
euporie/core/history.py,sha256=uO14q8keGEtH1R9loaZrBfy66GfXcJhxyXW95-35niA,2542
|
22
22
|
euporie/core/inspection.py,sha256=JhUttlOqvcYOLTSqrn49zSACbaeGLwbwK-BVOLllh6Y,2563
|
23
23
|
euporie/core/io.py,sha256=ipl11Uo3mOmbqTjqC9k1Z8nwXmgNWgY-7ROI3WG4FwY,4469
|
24
24
|
euporie/core/kernel.py,sha256=9bKFeE41Hrr241scVSnIjTFwKVSEk3yDc9HGK2rLXMs,46223
|
25
25
|
euporie/core/keys.py,sha256=hfxzZjh4dbDdEkel1YXu8p5RgGwD44oZ9mptHZ0TcfA,3309
|
26
|
-
euporie/core/launch.py,sha256=
|
26
|
+
euporie/core/launch.py,sha256=drtCrvVmGS19nMjL21Q0YwB7zZ0EK0E-0Wa_rRS0N70,1540
|
27
27
|
euporie/core/lexers.py,sha256=AXNDYOR0BZf0sYj9o8YSb0oF4AGYZdKygwFIUKJ3XFM,1083
|
28
28
|
euporie/core/log.py,sha256=6d8Dk5SA2fYr2QL1BqATmMtTU_BQ_DuONqNSQAYiOek,16323
|
29
29
|
euporie/core/lsp.py,sha256=LU-sPEl-jeGA-nqlJMoFl0SzcTS9cY9KDKVmU3bDXdk,49204
|
@@ -44,12 +44,12 @@ euporie/core/comm/base.py,sha256=72PF6upybtBnNB3M8oNkR8WDzC2vptRS9TmIKJkNRq4,404
|
|
44
44
|
euporie/core/comm/ipywidgets.py,sha256=obOKgcYc8OBB1PfKfNRB59ppZbnVA2eCDokSTUucZ7Q,52725
|
45
45
|
euporie/core/comm/registry.py,sha256=cxH5r6BZe-NUy0zFqxTriAnP0_spMY3m9r1Na688i7o,1353
|
46
46
|
euporie/core/convert/__init__.py,sha256=SdXTdFh5Exb7NLtiY7pDuv4AcQdP5b1syQSoZeanJco,391
|
47
|
-
euporie/core/convert/datum.py,sha256=
|
47
|
+
euporie/core/convert/datum.py,sha256=UxZBmiizxwviQF06IyBqPLiRWre4FSTdFOljb1WZWjM,14327
|
48
48
|
euporie/core/convert/mime.py,sha256=uQwXw2hUsfS_dMeR4Ci6Zv4fORIBnEa9rdRa-nVT-Ls,3142
|
49
49
|
euporie/core/convert/registry.py,sha256=IP43FE1edE2WDpjlKNylWhQV88WULpzWCIddBOQxxk8,2757
|
50
|
-
euporie/core/convert/utils.py,sha256=
|
50
|
+
euporie/core/convert/utils.py,sha256=h1qlZBQ0YqV-EgdIDZcO14KJwIqA5FfDOW_nd4ZtIDA,2438
|
51
51
|
euporie/core/convert/formats/__init__.py,sha256=sPJqKh1aA0V2jJs5cXUBmAEadsozUsGxv55irlrVr68,164
|
52
|
-
euporie/core/convert/formats/ansi.py,sha256=
|
52
|
+
euporie/core/convert/formats/ansi.py,sha256=SqkwtKqo-7wD2_tCgsJYwsCcM4vBgXPA5tGB7oVqtcM,14327
|
53
53
|
euporie/core/convert/formats/base64.py,sha256=8tP29nX_patgOG9lYr-HIn0I_6VyV_SyfDi-ZZBTp6Q,878
|
54
54
|
euporie/core/convert/formats/common.py,sha256=bDfVSBrMYCM1yAuKO254R2JBO-viZHB0MArezti5txM,4959
|
55
55
|
euporie/core/convert/formats/ft.py,sha256=6RKWq0y3kbJ96kbMjfazGeBg3uha8CWoseRPa4WLWHE,2810
|
@@ -64,7 +64,7 @@ euporie/core/convert/formats/sixel.py,sha256=gsBDwXowN5eg-X-khzUjhYcNUsNl2up3zQV
|
|
64
64
|
euporie/core/convert/formats/svg.py,sha256=SY-rioXSm5lK6LLp3mu3YeFYTFOJ-jCvEwH-wusfU1s,805
|
65
65
|
euporie/core/ft/__init__.py,sha256=Ib-pswos3RiOM2Vn8GCZ4rwuoTNPeBJ0jhgRpwu7BKE,55
|
66
66
|
euporie/core/ft/ansi.py,sha256=ICUBohoOVtbkf96T3EsFcHf-oSsWMxD7uyRoEFnhS1I,5796
|
67
|
-
euporie/core/ft/html.py,sha256=
|
67
|
+
euporie/core/ft/html.py,sha256=ITqARO7LK6UKMb6NTCl73UdxwfOT2nMSE-x1Ysp15WQ,179417
|
68
68
|
euporie/core/ft/table.py,sha256=L6rtT1XHArydL7gYX1m98MPoKCDYk8L7jibKRiayaGc,53325
|
69
69
|
euporie/core/ft/utils.py,sha256=Or3eZwoJi2NbYQg0M2mk815RlKcDmGXr7K5-7JJcT1k,27773
|
70
70
|
euporie/core/key_binding/__init__.py,sha256=zFKrJrZARNht6Tl4TT5Fw3fk-IrD8SBYk5mBJ5K_F1A,47
|
@@ -76,7 +76,7 @@ euporie/core/key_binding/vi_state.py,sha256=ek3Wxsckihsr5x9ULiDtNnVkOEiCBzoF4m4q
|
|
76
76
|
euporie/core/key_binding/bindings/__init__.py,sha256=vzrTyqaHWRxLDdiLStPQ-AprURIie76-i3cibELIDsA,274
|
77
77
|
euporie/core/key_binding/bindings/basic.py,sha256=djhGhPC6yDPfgXcNXfh14wLhFdraUBQH8VMfkZnLZvI,1648
|
78
78
|
euporie/core/key_binding/bindings/completion.py,sha256=npf61P0NvmrYMG8qT-1AYDReLcoMHsgdG5gzBloSTWk,2081
|
79
|
-
euporie/core/key_binding/bindings/micro.py,sha256=
|
79
|
+
euporie/core/key_binding/bindings/micro.py,sha256=NZSeYZIlN2kA-nNRC8_0ECqT4jRbGOfcTllKnpRrXh8,28020
|
80
80
|
euporie/core/key_binding/bindings/mouse.py,sha256=xbsBFSF2zLtK-f_Aj2NQ5kFaWaR1fimvs7dXhBpiFFM,6545
|
81
81
|
euporie/core/key_binding/bindings/page_navigation.py,sha256=FWIv4iqWUCMjFHLu-I5Z08NIULXuTIjrn9fC25XImYg,4142
|
82
82
|
euporie/core/layout/__init__.py,sha256=T5iGOnMGfNwVffJlfFMwGTFBLV7RkOuKw5gVp6cl4wA,59
|
@@ -87,25 +87,25 @@ euporie/core/layout/decor.py,sha256=qMCgkrjokpqH9gaBXLe_rGLx9AwzfJ7rtyVhSAVh45w,
|
|
87
87
|
euporie/core/layout/mouse.py,sha256=GJvFwOCZ8x-CppW8rGmJ6kV6JdW0Ndjihf8IwkuBI6Q,5165
|
88
88
|
euporie/core/layout/print.py,sha256=YNDafjVTcI8GwOjueLBuqWMY72alxV9HE0BQaka9sgA,4645
|
89
89
|
euporie/core/layout/screen.py,sha256=0xP9ZErMcw51nPgBbrm-DSQqFq5WNvsh9fw1amz2Z28,2224
|
90
|
-
euporie/core/layout/scroll.py,sha256=
|
90
|
+
euporie/core/layout/scroll.py,sha256=mVmAbECfytPk2oPMZ_HpeAbSsYIXyX8FDQQ7a8UWRw4,33149
|
91
91
|
euporie/core/tabs/__init__.py,sha256=Grm9EO1gnBO1o-k6Nqnlzo8XLIgFZSXNAdz49Vvh4zY,55
|
92
92
|
euporie/core/tabs/base.py,sha256=Gdydp8Km9p6Hdqs-pdHvxGAKyWhvE_76zdE4ywcZF-g,20934
|
93
93
|
euporie/core/tabs/notebook.py,sha256=4EdMMVvHzIAMAVkIZyDeToz5ad-emse5g5l2sMluTDU,17953
|
94
94
|
euporie/core/widgets/__init__.py,sha256=ektso_Ea1-pZB04alUujQsa2r-kv8xAF0SmQOv_bvHQ,52
|
95
|
-
euporie/core/widgets/cell.py,sha256=
|
95
|
+
euporie/core/widgets/cell.py,sha256=MucSmfWmlNaN4hoEsLnwFo5MVo3qrLShtR9AVfUZJlo,36040
|
96
96
|
euporie/core/widgets/cell_outputs.py,sha256=FSTvEYvwqNiHvj1UgbDYyQnW8pZpfdz2sKodxysqFsE,17334
|
97
97
|
euporie/core/widgets/decor.py,sha256=GPZG7-h3MKynQIXJ_YoR6tPpYxtmrXi0uoyVCovSjBQ,8770
|
98
98
|
euporie/core/widgets/dialog.py,sha256=Dj6CAHtHlSPmk2F30FXZZ2kYrEFYGkPAKzbWHUfaw-c,32675
|
99
|
-
euporie/core/widgets/display.py,sha256=
|
99
|
+
euporie/core/widgets/display.py,sha256=UicJq9iSzHrrYXdXTXWPvBsC69ttZU8GHJ7xRK5Fbmo,21767
|
100
100
|
euporie/core/widgets/file_browser.py,sha256=SmoQnngytD8-NgiRCKNLeFSdrqSCWRUUaGu8Tq295TQ,20731
|
101
101
|
euporie/core/widgets/formatted_text_area.py,sha256=J7P_TNXPZKZkiBdjAVkPvkfRY1veXe4tzXU241k4b-Q,4037
|
102
102
|
euporie/core/widgets/forms.py,sha256=iZj09v9I91ByuwUpGvf1FZrH2LF8FDIE-2MuAGIbLeA,85459
|
103
|
-
euporie/core/widgets/inputs.py,sha256=
|
103
|
+
euporie/core/widgets/inputs.py,sha256=Rpsy-kouiDeoSWPs89l1pSTXGnyAV0_tufQ3EqZp1P8,21826
|
104
104
|
euporie/core/widgets/layout.py,sha256=GAmWCUIhyhFvk0RBx8L7VeQpudKaFgkoyTk1tRKDJ94,23490
|
105
|
-
euporie/core/widgets/menu.py,sha256=
|
106
|
-
euporie/core/widgets/pager.py,sha256=
|
105
|
+
euporie/core/widgets/menu.py,sha256=K5Zkv_wKs7-2ZgMDygLDTKj5Vkh7MPLwc9ZWIhXa_xM,32856
|
106
|
+
euporie/core/widgets/pager.py,sha256=mbqB2-mX8bORUKM5492s5K9rpoGrvrBN1qY7uYE9o0g,6527
|
107
107
|
euporie/core/widgets/palette.py,sha256=e15dnPAg7VYjjahae-XsWViCjUA63jR5fdS3Oyof3MY,10847
|
108
|
-
euporie/core/widgets/search.py,sha256=
|
108
|
+
euporie/core/widgets/search.py,sha256=szGAC19LYhAnMvQGLRWrjPoUjQa9Q3nhyugQ3uFshaU,11816
|
109
109
|
euporie/core/widgets/status.py,sha256=WnS9PzlfPyyVXLTaswLHV1tgbvmYCSWqs1re-DOTxXQ,5558
|
110
110
|
euporie/core/widgets/tree.py,sha256=BG7QRsI2GzSJPReNQu9zWFjO0iy8TeJwrmCmP5dc2ek,3760
|
111
111
|
euporie/data/desktop/euporie-console.desktop,sha256=DI08G0Dl2s5asM6afWUfkKvO5YmcBm-pWQZzUHiNnqc,153
|
@@ -116,17 +116,17 @@ euporie/hub/app.py,sha256=w1J4A0X-W8Tr_rlRm13jMDjn35ggTOggDDVhCSIvitE,6129
|
|
116
116
|
euporie/hub/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
117
117
|
euporie/notebook/__init__.py,sha256=rOE71d95pym_ILYVg07NO9oDYbSB0AskxbC8cr4htiU,44
|
118
118
|
euporie/notebook/__main__.py,sha256=m2EnzIDLO4dHlDt41JNKpUvAUSw6wD-X0V3YhymXqxc,289
|
119
|
-
euporie/notebook/app.py,sha256=
|
119
|
+
euporie/notebook/app.py,sha256=JySFMBP0QkvJHlyFCbLfzZBijJjixmVSek-lruTAD1Q,21686
|
120
120
|
euporie/notebook/current.py,sha256=rQ_R9B0b8JmWILxEyGzGfuVY2iVkHTghq4qRiC-MYSU,387
|
121
121
|
euporie/notebook/enums.py,sha256=g7quMch8KAlaaYJS0UppWqx6tx-ZFt7HxFcmEfam5OM,221
|
122
122
|
euporie/notebook/filters.py,sha256=c2PncF-n4dE67cFmVmhsMhFVWCfxePAaCW6mb6zm0Yo,1502
|
123
123
|
euporie/notebook/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
124
124
|
euporie/notebook/tabs/__init__.py,sha256=CnHrMzmr4tKEd8Rs8swFvNDWj0fCiLChdqha0AtDNqY,417
|
125
125
|
euporie/notebook/tabs/display.py,sha256=y8wMa-MsQZky_JgJEwUtMUGIbLnFiAZMfrX1u-km6VM,2595
|
126
|
-
euporie/notebook/tabs/edit.py,sha256=
|
126
|
+
euporie/notebook/tabs/edit.py,sha256=Hop0AIvIaXJ9SaWtgxpocjGN0JEcsNuPkBsZPcJ76UE,6529
|
127
127
|
euporie/notebook/tabs/json.py,sha256=xKDHYkA59aleBpm6qLuic5GNPNQU6qApLuIT1vZzJrg,2179
|
128
128
|
euporie/notebook/tabs/log.py,sha256=VJQRC_4SB4aZ4tVELm6ldkFCON_A_rqxBfi-sZzGBOw,3550
|
129
|
-
euporie/notebook/tabs/notebook.py,sha256=
|
129
|
+
euporie/notebook/tabs/notebook.py,sha256=oIWfzPLhQZIvaStB1Nh2UXhko4GTW39xmRH0UYe39NA,43002
|
130
130
|
euporie/notebook/widgets/__init__.py,sha256=74tOl0bYuWkaKT-4pgD5zmdiIkoFYx8uGj4SxcLHLtQ,48
|
131
131
|
euporie/notebook/widgets/side_bar.py,sha256=EDFAulshV7YqA50w84RRl88UI60AehIXYYA2exlFh0M,7243
|
132
132
|
euporie/preview/__init__.py,sha256=B6RsBuuT0JJk1v6U5n95VuFXcOeFLq6UGgt4w-n_nEI,51
|
@@ -136,11 +136,11 @@ euporie/preview/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
136
136
|
euporie/preview/tabs/__init__.py,sha256=rY6DfQ-8qRo_AiICCD-zTyhJBnuMjawWDd8tRxR6q58,43
|
137
137
|
euporie/preview/tabs/notebook.py,sha256=IHY-cAWo5UmehmXpSSLyuTJvjN9jBeD5BsSoa86zrUw,8504
|
138
138
|
euporie/web/tabs/web.py,sha256=6wTB7ZLRqG79eQwKwsPIw03gHDUalmMVROSS9Z9j3YM,5228
|
139
|
-
euporie/web/widgets/webview.py,sha256=
|
140
|
-
euporie-2.8.
|
141
|
-
euporie-2.8.
|
142
|
-
euporie-2.8.
|
143
|
-
euporie-2.8.
|
144
|
-
euporie-2.8.
|
145
|
-
euporie-2.8.
|
146
|
-
euporie-2.8.
|
139
|
+
euporie/web/widgets/webview.py,sha256=PA8hWqJs8FLMEFNAHYKz4Zt2fJTg-BSyuCji6isxz3o,20800
|
140
|
+
euporie-2.8.3.data/data/share/applications/euporie-console.desktop,sha256=DI08G0Dl2s5asM6afWUfkKvO5YmcBm-pWQZzUHiNnqc,153
|
141
|
+
euporie-2.8.3.data/data/share/applications/euporie-notebook.desktop,sha256=RtpJzvizTDuOp0BLa2bLgVHx11LG6L7PL-oF-wHTsgU,155
|
142
|
+
euporie-2.8.3.dist-info/METADATA,sha256=a5j1deTZou2cOApnrYnNxEO-rYXgRBNHThbUNQijlD0,6417
|
143
|
+
euporie-2.8.3.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
|
144
|
+
euporie-2.8.3.dist-info/entry_points.txt,sha256=iHdjwf9iCAipy7w3tXCH2W_SavHVCSHpJk_84--b7rE,776
|
145
|
+
euporie-2.8.3.dist-info/licenses/LICENSE,sha256=rI0bfSsCfCVw6d8vk7WokRxd3t8yx5xV4fC5fwaMgCg,1079
|
146
|
+
euporie-2.8.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|