euporie 2.8.2__py3-none-any.whl → 2.8.4__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.
Files changed (49) hide show
  1. euporie/console/tabs/console.py +227 -104
  2. euporie/core/__init__.py +1 -1
  3. euporie/core/__main__.py +1 -1
  4. euporie/core/app.py +31 -18
  5. euporie/core/clipboard.py +1 -1
  6. euporie/core/comm/ipywidgets.py +5 -5
  7. euporie/core/commands.py +1 -1
  8. euporie/core/config.py +4 -4
  9. euporie/core/convert/datum.py +4 -1
  10. euporie/core/convert/registry.py +7 -2
  11. euporie/core/filters.py +3 -1
  12. euporie/core/ft/html.py +2 -4
  13. euporie/core/graphics.py +6 -6
  14. euporie/core/kernel.py +56 -32
  15. euporie/core/key_binding/bindings/__init__.py +2 -1
  16. euporie/core/key_binding/bindings/mouse.py +24 -22
  17. euporie/core/key_binding/bindings/vi.py +46 -0
  18. euporie/core/layout/cache.py +33 -23
  19. euporie/core/layout/containers.py +235 -73
  20. euporie/core/layout/decor.py +3 -3
  21. euporie/core/layout/print.py +14 -2
  22. euporie/core/layout/scroll.py +15 -21
  23. euporie/core/margins.py +59 -30
  24. euporie/core/style.py +7 -5
  25. euporie/core/tabs/base.py +32 -0
  26. euporie/core/tabs/notebook.py +6 -3
  27. euporie/core/terminal.py +12 -17
  28. euporie/core/utils.py +2 -4
  29. euporie/core/widgets/cell.py +64 -109
  30. euporie/core/widgets/dialog.py +25 -20
  31. euporie/core/widgets/file_browser.py +3 -3
  32. euporie/core/widgets/forms.py +8 -7
  33. euporie/core/widgets/inputs.py +21 -9
  34. euporie/core/widgets/layout.py +5 -5
  35. euporie/core/widgets/status.py +3 -3
  36. euporie/hub/app.py +7 -3
  37. euporie/notebook/app.py +68 -47
  38. euporie/notebook/tabs/log.py +1 -1
  39. euporie/notebook/tabs/notebook.py +5 -3
  40. euporie/preview/app.py +3 -0
  41. euporie/preview/tabs/notebook.py +9 -14
  42. euporie/web/tabs/web.py +0 -1
  43. {euporie-2.8.2.dist-info → euporie-2.8.4.dist-info}/METADATA +5 -5
  44. {euporie-2.8.2.dist-info → euporie-2.8.4.dist-info}/RECORD +49 -48
  45. {euporie-2.8.2.data → euporie-2.8.4.data}/data/share/applications/euporie-console.desktop +0 -0
  46. {euporie-2.8.2.data → euporie-2.8.4.data}/data/share/applications/euporie-notebook.desktop +0 -0
  47. {euporie-2.8.2.dist-info → euporie-2.8.4.dist-info}/WHEEL +0 -0
  48. {euporie-2.8.2.dist-info → euporie-2.8.4.dist-info}/entry_points.txt +0 -0
  49. {euporie-2.8.2.dist-info → euporie-2.8.4.dist-info}/licenses/LICENSE +0 -0
euporie/notebook/app.py CHANGED
@@ -74,6 +74,8 @@ class NotebookApp(BaseApp):
74
74
  notebooks in the terminal.
75
75
  """
76
76
 
77
+ _tab_container: AnyContainer
78
+
77
79
  name = "notebook"
78
80
 
79
81
  def __init__(self, **kwargs: Any) -> None:
@@ -84,8 +86,13 @@ class NotebookApp(BaseApp):
84
86
  super().__init__(**kwargs)
85
87
  self.bindings_to_load.append("euporie.notebook.app.NotebookApp")
86
88
 
89
+ self.on_tabs_change += self.set_tab_container
90
+
87
91
  # Register config hooks
88
92
  self.config.get_item("show_cell_borders").event += lambda x: self.refresh()
93
+ self.config.get_item("tab_mode").event += self.set_tab_container
94
+ self.config.get_item("background_pattern").event += self.set_tab_container
95
+ self.config.get_item("background_character").event += self.set_tab_container
89
96
 
90
97
  async def _poll_terminal_colors(self) -> None:
91
98
  """Repeatedly query the terminal for its background and foreground colours."""
@@ -96,10 +103,6 @@ class NotebookApp(BaseApp):
96
103
  def pre_run(self, app: Application | None = None) -> None:
97
104
  """Continue loading the app."""
98
105
  super().pre_run(app)
99
- # Ensure an opened tab is focused
100
- if self.tab:
101
- self.tab.focus()
102
-
103
106
  # Load style hooks and start polling terminal style
104
107
  if self.config.terminal_polling_interval and hasattr(
105
108
  self.input, "vt100_parser"
@@ -118,29 +121,58 @@ class NotebookApp(BaseApp):
118
121
  """Return a container with all opened tabs.
119
122
 
120
123
  Returns:
121
- A layout displaying the opened tab containers.
122
-
124
+ A layout container displaying the opened tab containers.
123
125
  """
124
- if self.tabs:
125
- if TabMode(self.config.tab_mode) == TabMode.TILE_HORIZONTALLY:
126
- return HSplit(
127
- children=self.tabs,
128
- padding=1,
129
- padding_style="class:tab-padding",
130
- padding_char="─",
131
- )
132
- elif TabMode(self.config.tab_mode) == TabMode.TILE_VERTICALLY:
133
- return VSplit(
134
- children=self.tabs,
135
- padding=1,
136
- padding_style="class:tab-padding",
137
- padding_char="│",
138
- )
139
- else:
140
- return DynamicContainer(lambda: self.tabs[self._tab_idx])
126
+ try:
127
+ return self._tab_container
128
+ except AttributeError:
129
+ self.set_tab_container()
130
+ return self._tab_container
131
+
132
+ def set_tab_container(self, app: BaseApp | None = None) -> None:
133
+ """Set the container to use to display opened tabs."""
134
+ if not self.tabs:
135
+ self._tab_container = Pattern(
136
+ self.config.background_character,
137
+ self.config.background_pattern,
138
+ )
139
+ elif TabMode(self.config.tab_mode) == TabMode.TILE_HORIZONTALLY:
140
+ self._tab_container = HSplit(
141
+ children=self.tabs,
142
+ padding=1,
143
+ padding_style="class:tab-padding",
144
+ padding_char="─",
145
+ )
146
+ elif TabMode(self.config.tab_mode) == TabMode.TILE_VERTICALLY:
147
+ self._tab_container = VSplit(
148
+ children=self.tabs,
149
+ padding=1,
150
+ padding_style="class:tab-padding",
151
+ padding_char="│",
152
+ )
141
153
  else:
142
- return Pattern(
143
- self.config.background_character, self.config.background_pattern
154
+ self._tab_container = HSplit(
155
+ [
156
+ ConditionalContainer(
157
+ Window(
158
+ TabBarControl(
159
+ tabs=self.tab_bar_tabs,
160
+ active=lambda: self._tab_idx,
161
+ closeable=True,
162
+ ),
163
+ height=2,
164
+ style="class:app-tab-bar",
165
+ dont_extend_height=True,
166
+ ),
167
+ filter=Condition(
168
+ lambda: (
169
+ len(self.tabs) > 1 or self.config.always_show_tab_bar
170
+ )
171
+ and TabMode(self.config.tab_mode) == TabMode.STACK
172
+ ),
173
+ ),
174
+ DynamicContainer(lambda: self.tabs[self._tab_idx]),
175
+ ]
144
176
  )
145
177
 
146
178
  def _statusbar_defaults(self) -> StatusBarFields | None:
@@ -186,24 +218,6 @@ class NotebookApp(BaseApp):
186
218
  filter=have_tabs,
187
219
  )
188
220
 
189
- self.tab_bar_control = TabBarControl(
190
- tabs=self.tab_bar_tabs,
191
- active=lambda: self._tab_idx,
192
- closeable=True,
193
- )
194
- tab_bar = ConditionalContainer(
195
- Window(
196
- self.tab_bar_control,
197
- height=2,
198
- style="class:app-tab-bar",
199
- dont_extend_height=True,
200
- ),
201
- filter=Condition(
202
- lambda: (len(self.tabs) > 1 or self.config.always_show_tab_bar)
203
- and TabMode(self.config.tab_mode) == TabMode.STACK
204
- ),
205
- )
206
-
207
221
  self.pager = Pager()
208
222
  self.search_bar = SearchBar()
209
223
 
@@ -255,7 +269,6 @@ class NotebookApp(BaseApp):
255
269
  self.side_bar,
256
270
  HSplit(
257
271
  [
258
- tab_bar,
259
272
  DynamicContainer(self.tab_container),
260
273
  self.pager,
261
274
  ],
@@ -445,7 +458,15 @@ class NotebookApp(BaseApp):
445
458
  description="Turn elements of euporie's interface on or off",
446
459
  ),
447
460
  self.config.get_item("color_scheme").menu,
448
- self.config.get_item("syntax_theme").menu,
461
+ MenuItem(
462
+ "Syntax highlighting",
463
+ children=[
464
+ self.config.get_item("syntax_highlighting").menu,
465
+ separator,
466
+ *self.config.get_item("syntax_theme").menu.children,
467
+ ],
468
+ description="Configure syntax highlighting",
469
+ ),
449
470
  get_cmd("toggle-expand").menu,
450
471
  get_cmd("toggle-line-numbers").menu,
451
472
  self.config.get_item("set_cursor_shape").menu,
@@ -492,8 +513,8 @@ class NotebookApp(BaseApp):
492
513
  from euporie.notebook.current import get_app
493
514
 
494
515
  app = get_app()
495
- app.tabs.append(Notebook(app, None))
496
- app.tabs[-1].focus()
516
+ app.add_tab(tab := Notebook(app, None))
517
+ tab.focus()
497
518
 
498
519
  @staticmethod
499
520
  @add_cmd()
@@ -106,5 +106,5 @@ class LogView(Tab):
106
106
  break
107
107
  else:
108
108
  tab = LogView(app)
109
- app.tabs.append(tab)
109
+ app.add_tab(tab)
110
110
  tab.focus()
@@ -155,13 +155,13 @@ class Notebook(BaseNotebook):
155
155
 
156
156
  def post_init_kernel(self) -> None:
157
157
  """Start the kernel after if has been loaded."""
158
+ # Load container
159
+ super().post_init_kernel()
160
+
158
161
  # Start kernel
159
162
  if self.kernel._status == "stopped":
160
163
  self.kernel.start(cb=self.kernel_started, wait=False)
161
164
 
162
- # Load container
163
- super().post_init_kernel()
164
-
165
165
  @property
166
166
  def selected_indices(self) -> list[int]:
167
167
  """Return a list of the currently selected cell indices."""
@@ -274,6 +274,8 @@ class Notebook(BaseNotebook):
274
274
 
275
275
  def enter_edit_mode(self) -> None:
276
276
  """Enter cell edit mode."""
277
+ # Signal the page to scroll so the cursor is visible on next render
278
+ self.page.scroll_to_cursor = True
277
279
  self.edit_mode = True
278
280
  # Only one cell can be selected in edit mode
279
281
  self.select(self.cell.index)
euporie/preview/app.py CHANGED
@@ -189,6 +189,9 @@ class PreviewApp(BaseApp):
189
189
  # time.sleep(0.1)
190
190
  super()._redraw(render_as_done=True)
191
191
 
192
+ def _update_invalidate_events(self) -> None:
193
+ """Do nothing, as we don't need invalidation events for the preview app."""
194
+
192
195
  # ################################### Settings ####################################
193
196
 
194
197
  add_setting(
@@ -5,7 +5,6 @@ from __future__ import annotations
5
5
  import logging
6
6
  from typing import TYPE_CHECKING
7
7
 
8
- from prompt_toolkit.cache import FastDictCache
9
8
  from prompt_toolkit.layout.containers import (
10
9
  ConditionalContainer,
11
10
  DynamicContainer,
@@ -47,15 +46,13 @@ class PreviewNotebook(BaseNotebook):
47
46
  ) -> None:
48
47
  """Create a new instance."""
49
48
  self.cell_index = 0
50
- self.cells: FastDictCache[tuple[int], Cell] = FastDictCache(
51
- get_value=self.get_cell
52
- )
53
-
54
49
  super().__init__(app, path, use_kernel_history=use_kernel_history)
55
50
 
56
51
  self.app.before_render += self.before_render
57
52
  self.app.after_render += self.after_render
58
53
 
54
+ self._cell = Cell(0, {}, self)
55
+
59
56
  def pre_init_kernel(self) -> None:
60
57
  """Filter cells before kernel is loaded."""
61
58
  super().pre_init_kernel()
@@ -156,17 +153,15 @@ class PreviewNotebook(BaseNotebook):
156
153
  # Trigger a re-draw of the app right away, now with the next cell
157
154
  self.app.invalidate()
158
155
 
159
- def get_cell(self, index: int) -> Cell:
160
- """Render a cell by its index."""
161
- if index < len(self.json["cells"]):
162
- return Cell(index, self.json["cells"][index], self)
163
- else:
164
- return Cell(0, {}, self)
165
-
166
156
  @property
167
157
  def cell(self) -> Cell:
168
- """Return the current cell."""
169
- return self.cells[(self.cell_index,)]
158
+ """Load the current cell's data into our cell instance."""
159
+ cell = self._cell
160
+ cell_json = self.json["cells"][self.cell_index]
161
+ cell.json = cell_json
162
+ cell.input = cell_json["source"]
163
+ cell.output_area.json = cell.output_json
164
+ return cell
170
165
 
171
166
  def load_container(self) -> AnyContainer:
172
167
  """Load the notebook's main container."""
euporie/web/tabs/web.py CHANGED
@@ -1,6 +1,5 @@
1
1
  """Defines a web-view tab."""
2
2
 
3
-
4
3
  from __future__ import annotations
5
4
 
6
5
  import logging
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: euporie
3
- Version: 2.8.2
3
+ Version: 2.8.4
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
@@ -28,16 +28,16 @@ Requires-Dist: fsspec[http]>=2022.12.0
28
28
  Requires-Dist: imagesize~=1.3
29
29
  Requires-Dist: jupyter-client>=7.1
30
30
  Requires-Dist: jupytext>=1.14.0
31
- Requires-Dist: linkify-it-py~=1.0
32
- Requires-Dist: markdown-it-py~=2.1.0
33
- Requires-Dist: mdit-py-plugins~=0.3.0
31
+ Requires-Dist: linkify-it-py~=2.0
32
+ Requires-Dist: markdown-it-py~=3.0
33
+ Requires-Dist: mdit-py-plugins~=0.4.2
34
34
  Requires-Dist: nbformat~=5.0
35
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
39
39
  Requires-Dist: pyperclip~=1.8
40
- Requires-Dist: sixelcrop~=0.1.6
40
+ Requires-Dist: sixelcrop~=0.1.8
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
@@ -3,50 +3,50 @@ 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=egClI0kRqQeBKjXOthxgpQ4eQpekaaN1LM76tKXJlEA,26109
7
- euporie/core/__init__.py,sha256=YSCEIHk41Hc1BVsqRvmgKdvTgcxf8Ctf8rOuAbPdDzI,313
8
- euporie/core/__main__.py,sha256=_TeewhwpThCpmL8qYYtd61qeE_t61To1zrcM9o4lL_s,842
9
- euporie/core/app.py,sha256=MVGQJbXb30LbDgETCLbHTnpFD_zRhn8vSE0mWQzNw2o,46040
6
+ euporie/console/tabs/console.py,sha256=JsKslgnHHUtDLItpC6Dxcql29v4GICn2raln4DpnBjc,31021
7
+ euporie/core/__init__.py,sha256=ZWQhL70IXhO4R_0h0HVYNq-CUCqRB1axpm6fSZMS6OQ,313
8
+ euporie/core/__main__.py,sha256=xeDgX2wOce0SBnojquayfidznlnn8QU8edGEXYrDSBM,817
9
+ euporie/core/app.py,sha256=xy8LMugJZNbUB7STXHQozu4eRY4H1VAN0-e8VyR75Gk,46401
10
10
  euporie/core/border.py,sha256=kJbpyxwJBtIRpFOpXhDtaCT1_oyVRjRiYKG4lXn3-iA,48507
11
- euporie/core/clipboard.py,sha256=Ps1wTcIV2B1PKfXiNKITR8nee2bo5qVfdCuhobiCNms,4461
12
- euporie/core/commands.py,sha256=uOS4cJTzxSv8jEMComMDAqaAUrsPjaB_AY4tTeZFGfY,8256
11
+ euporie/core/clipboard.py,sha256=FzMk6uAFTcgNW-beaQ9Jyrpvd3JG9aBP-5S_gMy6Xak,4470
12
+ euporie/core/commands.py,sha256=4L-8UV9ejz2HG_U2-dzbybXLdn1SKfruOjgga5XiIX0,8254
13
13
  euporie/core/completion.py,sha256=97pe7PdeUsahbgYLwvKhmik5aDAdZFZFOuOmhi9I8d8,5478
14
- euporie/core/config.py,sha256=ka6wloVH2hLhe7ga3w0nKLtuYsMenXcumdIC4eNSqM8,22811
14
+ euporie/core/config.py,sha256=JCoBmGVGegDWfnQItmcGCHn_Plv-6dwQjZpoBRrezkM,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=wjTE7INpUAglprngLipLa66S_pNXoalu0HrcmmJeSlM,8253
18
+ euporie/core/filters.py,sha256=R41Yf18znfTQQEagpLicZC-1HEdOxWbL2K6zgdCyt6M,8314
19
19
  euporie/core/format.py,sha256=oFlD3aX_uVeLhqxo2n-zaUBsiNKpWqhx6W-5arFY5C4,4154
20
- euporie/core/graphics.py,sha256=g9kJeuoOCgx4IeD_EIlf3tAdRfQy4bTLs7istiZnvl0,32651
20
+ euporie/core/graphics.py,sha256=zc4Vff851i6E_fy0vJ-GbMHk1VvMZNFIXvY4kBBOH8Y,32655
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
- euporie/core/kernel.py,sha256=9bKFeE41Hrr241scVSnIjTFwKVSEk3yDc9HGK2rLXMs,46223
24
+ euporie/core/kernel.py,sha256=lqc7fbiZdeHBVDWtOdztsXWENUWQyi887Vbj8Fq_uSw,47360
25
25
  euporie/core/keys.py,sha256=hfxzZjh4dbDdEkel1YXu8p5RgGwD44oZ9mptHZ0TcfA,3309
26
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
30
- euporie/core/margins.py,sha256=Y8_YFTo7CBGgyJfaj7JRSx_7dwGz2tdMikBxSckxFuY,23637
30
+ euporie/core/margins.py,sha256=QDWboU3K5YriRmahe1ZJsitZtfpLkWqKrt6dS0jsnyo,24942
31
31
  euporie/core/path.py,sha256=tm1mAtPlwwvXO7YdN5ZD1HG2x5i3tMT83v80N_V4Rk8,2275
32
32
  euporie/core/processors.py,sha256=63vwLEuSdp5B_PuQ-zv--qtC05GTlbhXVojISzHUnIk,5478
33
33
  euporie/core/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  euporie/core/pygments.py,sha256=TE3VrZ-QKe4n6hmoYuNmt0l0XR6qmko7JvO5YHSt_rU,2588
35
35
  euporie/core/reference.py,sha256=x8-7405xgTEcK7ImqikQtVAXXqFanz61UQ3mn7v_4-o,65039
36
36
  euporie/core/renderer.py,sha256=XhjSsNFiHBZigtBy7Bp942jfs0iz1Il2GIwNNKOZp00,17264
37
- euporie/core/style.py,sha256=08uO1695j-8LDQOwhfgOcUesXB1xhJpCfI_xosTiPtI,33407
37
+ euporie/core/style.py,sha256=vmh2otvH2ZAcmgrvbibHJosDRy-5n5RzDi3FY5DiGOc,33606
38
38
  euporie/core/suggest.py,sha256=T86TsEY1_Z7XnW9ncUDKwP4utJc-wYFDV5U8MY78Q7A,5512
39
- euporie/core/terminal.py,sha256=BVwdgpBHYPNA9nht-9uS2Oy79T4wWt6y9wnlzSyKt9Q,17958
40
- euporie/core/utils.py,sha256=ZzaLogLbZw_c8-wdk2XS6dwpgIpQotKwhN2nzalHL8Y,2702
39
+ euporie/core/terminal.py,sha256=hlbjlIEo6YkMujobwppPsu7bIeSrO6maeeLP9IwLxcY,17906
40
+ euporie/core/utils.py,sha256=0p_Kmcsx77H8zvTCAJ6S6Aag3z1l611dst2reB2FZpw,2686
41
41
  euporie/core/validation.py,sha256=cA40YnpWdB1Wpi-B4DeyQ541IEFNh2q6ypCqbVT0aXU,1180
42
42
  euporie/core/comm/__init__.py,sha256=jTf9gPhonyl-UOEC7lc8RwLGJiNhFSuDZqm8rpZRnnI,52
43
43
  euporie/core/comm/base.py,sha256=72PF6upybtBnNB3M8oNkR8WDzC2vptRS9TmIKJkNRq4,4047
44
- euporie/core/comm/ipywidgets.py,sha256=obOKgcYc8OBB1PfKfNRB59ppZbnVA2eCDokSTUucZ7Q,52725
44
+ euporie/core/comm/ipywidgets.py,sha256=O37QczvaDksi6f-xoaVuAekKAJE3K7EnW27ZMPIDpY8,52738
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=UxZBmiizxwviQF06IyBqPLiRWre4FSTdFOljb1WZWjM,14327
47
+ euporie/core/convert/datum.py,sha256=6EtBAagMUOJAgpCKAUqKdPeJfKc2pCLLbB7fTGAEB3w,14410
48
48
  euporie/core/convert/mime.py,sha256=uQwXw2hUsfS_dMeR4Ci6Zv4fORIBnEa9rdRa-nVT-Ls,3142
49
- euporie/core/convert/registry.py,sha256=IP43FE1edE2WDpjlKNylWhQV88WULpzWCIddBOQxxk8,2757
49
+ euporie/core/convert/registry.py,sha256=vVBM78Rf778wDFGdnmxc9mkDPGczeLUVsehZv6u9w0s,2902
50
50
  euporie/core/convert/utils.py,sha256=h1qlZBQ0YqV-EgdIDZcO14KJwIqA5FfDOW_nd4ZtIDA,2438
51
51
  euporie/core/convert/formats/__init__.py,sha256=sPJqKh1aA0V2jJs5cXUBmAEadsozUsGxv55irlrVr68,164
52
52
  euporie/core/convert/formats/ansi.py,sha256=SqkwtKqo-7wD2_tCgsJYwsCcM4vBgXPA5tGB7oVqtcM,14327
@@ -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=ITqARO7LK6UKMb6NTCl73UdxwfOT2nMSE-x1Ysp15WQ,179417
67
+ euporie/core/ft/html.py,sha256=ncmpObJQWaNYCqzqqXmDyk4hCm60tfvvz8epnoEjcDQ,179401
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
@@ -73,50 +73,51 @@ euporie/core/key_binding/micro_state.py,sha256=h_CBBiIUa4mHf70ZZDNbXreC0p0H3boNV
73
73
  euporie/core/key_binding/registry.py,sha256=UBT_dPpndgzgrKoI7AdbL4PmZUGvZ4hBC7YGkGNTIXA,1348
74
74
  euporie/core/key_binding/utils.py,sha256=UZ0ymB4vLPFaxbx9jhqR_cKaSt08efrlvFtb1KZixcU,2407
75
75
  euporie/core/key_binding/vi_state.py,sha256=ek3Wxsckihsr5x9ULiDtNnVkOEiCBzoF4m4qY6wAB9Q,702
76
- euporie/core/key_binding/bindings/__init__.py,sha256=vzrTyqaHWRxLDdiLStPQ-AprURIie76-i3cibELIDsA,274
76
+ euporie/core/key_binding/bindings/__init__.py,sha256=qbDXRvt21fwd-esuCU5ljYwoYSK_AGVDjJ_SijdCnsg,288
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
79
  euporie/core/key_binding/bindings/micro.py,sha256=NZSeYZIlN2kA-nNRC8_0ECqT4jRbGOfcTllKnpRrXh8,28020
80
- euporie/core/key_binding/bindings/mouse.py,sha256=xbsBFSF2zLtK-f_Aj2NQ5kFaWaR1fimvs7dXhBpiFFM,6545
80
+ euporie/core/key_binding/bindings/mouse.py,sha256=UGzOFMA-3FaN_Fag_4LigBQ7Gk2pn5_s7PAj_myCRTo,6949
81
81
  euporie/core/key_binding/bindings/page_navigation.py,sha256=FWIv4iqWUCMjFHLu-I5Z08NIULXuTIjrn9fC25XImYg,4142
82
+ euporie/core/key_binding/bindings/vi.py,sha256=XutOsbBI8ywyWR5XY2pUN14Vga6R0vrDK27q7ZhE8pM,1567
82
83
  euporie/core/layout/__init__.py,sha256=T5iGOnMGfNwVffJlfFMwGTFBLV7RkOuKw5gVp6cl4wA,59
83
- euporie/core/layout/cache.py,sha256=5jCF_Y-1vx4D5i9-iRDea3jD5F0Nvn14eKHLZl6TW6k,15057
84
- euporie/core/layout/containers.py,sha256=y6m5P-4_Ng49CCJuR5ghtumf7VwE7dOqeNEgEPDAPZ4,38831
84
+ euporie/core/layout/cache.py,sha256=i4yDyFWM9zxnB1CCW7oV9kJvp5D_IJMoVOfs53QXgrU,15144
85
+ euporie/core/layout/containers.py,sha256=ECzq_Q8XQKuG5v51JP90QJLvlDJ796bpOdl5PVuVz6w,44637
85
86
  euporie/core/layout/controls.py,sha256=iFklysBxk_roWKfNN4Hdjqf4sFdEBzNWZq2OavlpJHY,825
86
- euporie/core/layout/decor.py,sha256=qMCgkrjokpqH9gaBXLe_rGLx9AwzfJ7rtyVhSAVh45w,14106
87
+ euporie/core/layout/decor.py,sha256=8EuHM4cDr4njagA2SuPeXMmj5tpK7q609r2w8o9BUoI,14108
87
88
  euporie/core/layout/mouse.py,sha256=GJvFwOCZ8x-CppW8rGmJ6kV6JdW0Ndjihf8IwkuBI6Q,5165
88
- euporie/core/layout/print.py,sha256=YNDafjVTcI8GwOjueLBuqWMY72alxV9HE0BQaka9sgA,4645
89
+ euporie/core/layout/print.py,sha256=cVOD2BYciQKC9-mWFz9dw6Ttc60MUnDjjBI7jT7Zxco,5154
89
90
  euporie/core/layout/screen.py,sha256=0xP9ZErMcw51nPgBbrm-DSQqFq5WNvsh9fw1amz2Z28,2224
90
- euporie/core/layout/scroll.py,sha256=mVmAbECfytPk2oPMZ_HpeAbSsYIXyX8FDQQ7a8UWRw4,33149
91
+ euporie/core/layout/scroll.py,sha256=aluts7jUkzIXqJKyOhNr27eI3miTh27dOYcpmaJsV_w,32824
91
92
  euporie/core/tabs/__init__.py,sha256=Grm9EO1gnBO1o-k6Nqnlzo8XLIgFZSXNAdz49Vvh4zY,55
92
- euporie/core/tabs/base.py,sha256=Gdydp8Km9p6Hdqs-pdHvxGAKyWhvE_76zdE4ywcZF-g,20934
93
- euporie/core/tabs/notebook.py,sha256=4EdMMVvHzIAMAVkIZyDeToz5ad-emse5g5l2sMluTDU,17953
93
+ euporie/core/tabs/base.py,sha256=69KU5ZN73aPIBswllXwrSEUa-A1CoCmXD1_E1TGWGP8,21989
94
+ euporie/core/tabs/notebook.py,sha256=-g5wuKdH6iWL69ti9hKpdPJrndTvuAfp5Rl8f_sm18M,18152
94
95
  euporie/core/widgets/__init__.py,sha256=ektso_Ea1-pZB04alUujQsa2r-kv8xAF0SmQOv_bvHQ,52
95
- euporie/core/widgets/cell.py,sha256=MucSmfWmlNaN4hoEsLnwFo5MVo3qrLShtR9AVfUZJlo,36040
96
+ euporie/core/widgets/cell.py,sha256=cP0yU-7drPvyloPMvxRe73nZg732pAo-XEh4V5ScTq0,34697
96
97
  euporie/core/widgets/cell_outputs.py,sha256=FSTvEYvwqNiHvj1UgbDYyQnW8pZpfdz2sKodxysqFsE,17334
97
98
  euporie/core/widgets/decor.py,sha256=GPZG7-h3MKynQIXJ_YoR6tPpYxtmrXi0uoyVCovSjBQ,8770
98
- euporie/core/widgets/dialog.py,sha256=Dj6CAHtHlSPmk2F30FXZZ2kYrEFYGkPAKzbWHUfaw-c,32675
99
+ euporie/core/widgets/dialog.py,sha256=pnF1uyTkovXb-6bhB9LWZU_XkV9L6h5G1NDe-GN2i28,32951
99
100
  euporie/core/widgets/display.py,sha256=UicJq9iSzHrrYXdXTXWPvBsC69ttZU8GHJ7xRK5Fbmo,21767
100
- euporie/core/widgets/file_browser.py,sha256=SmoQnngytD8-NgiRCKNLeFSdrqSCWRUUaGu8Tq295TQ,20731
101
+ euporie/core/widgets/file_browser.py,sha256=kH1bIap6zkB6KV_1GoA34yd95LIZ3b20cgqJWQlWMik,20733
101
102
  euporie/core/widgets/formatted_text_area.py,sha256=J7P_TNXPZKZkiBdjAVkPvkfRY1veXe4tzXU241k4b-Q,4037
102
- euporie/core/widgets/forms.py,sha256=iZj09v9I91ByuwUpGvf1FZrH2LF8FDIE-2MuAGIbLeA,85459
103
- euporie/core/widgets/inputs.py,sha256=U0hdE8PkucHhwBuzDrU-iTjaJKeC98pydKBH1ViUkgo,21509
104
- euporie/core/widgets/layout.py,sha256=GAmWCUIhyhFvk0RBx8L7VeQpudKaFgkoyTk1tRKDJ94,23490
103
+ euporie/core/widgets/forms.py,sha256=rrLbgMo4YQRTeG0sLd45PCaL2ztckd99RIeZQvnhDmo,85475
104
+ euporie/core/widgets/inputs.py,sha256=Rpsy-kouiDeoSWPs89l1pSTXGnyAV0_tufQ3EqZp1P8,21826
105
+ euporie/core/widgets/layout.py,sha256=G1Tgy0bQbJfpnnlAQx0NzJ6gzaOnrPiXuXZov20dhQo,23507
105
106
  euporie/core/widgets/menu.py,sha256=K5Zkv_wKs7-2ZgMDygLDTKj5Vkh7MPLwc9ZWIhXa_xM,32856
106
107
  euporie/core/widgets/pager.py,sha256=mbqB2-mX8bORUKM5492s5K9rpoGrvrBN1qY7uYE9o0g,6527
107
108
  euporie/core/widgets/palette.py,sha256=e15dnPAg7VYjjahae-XsWViCjUA63jR5fdS3Oyof3MY,10847
108
109
  euporie/core/widgets/search.py,sha256=szGAC19LYhAnMvQGLRWrjPoUjQa9Q3nhyugQ3uFshaU,11816
109
- euporie/core/widgets/status.py,sha256=WnS9PzlfPyyVXLTaswLHV1tgbvmYCSWqs1re-DOTxXQ,5558
110
+ euporie/core/widgets/status.py,sha256=LphylR8zFVs5Oq3s_Pd-1B0BfPd8UAR5BvsjEG4ggxo,5560
110
111
  euporie/core/widgets/tree.py,sha256=BG7QRsI2GzSJPReNQu9zWFjO0iy8TeJwrmCmP5dc2ek,3760
111
112
  euporie/data/desktop/euporie-console.desktop,sha256=DI08G0Dl2s5asM6afWUfkKvO5YmcBm-pWQZzUHiNnqc,153
112
113
  euporie/data/desktop/euporie-notebook.desktop,sha256=RtpJzvizTDuOp0BLa2bLgVHx11LG6L7PL-oF-wHTsgU,155
113
114
  euporie/hub/__init__.py,sha256=NcrOlSFgI4y5gEbD4lFY-Ryd1K79EeMoeAp41A6tDT0,44
114
115
  euporie/hub/__main__.py,sha256=m2EnzIDLO4dHlDt41JNKpUvAUSw6wD-X0V3YhymXqxc,289
115
- euporie/hub/app.py,sha256=w1J4A0X-W8Tr_rlRm13jMDjn35ggTOggDDVhCSIvitE,6129
116
+ euporie/hub/app.py,sha256=nsihRIlimet6HoFNCZwmY8iyBUPSdoRxTwRw9iwC_iQ,6285
116
117
  euporie/hub/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
118
  euporie/notebook/__init__.py,sha256=rOE71d95pym_ILYVg07NO9oDYbSB0AskxbC8cr4htiU,44
118
119
  euporie/notebook/__main__.py,sha256=m2EnzIDLO4dHlDt41JNKpUvAUSw6wD-X0V3YhymXqxc,289
119
- euporie/notebook/app.py,sha256=KvsSwjttvSuJgBsXa2eT0cUJVLOIdqzUM2lxuf2VneE,21320
120
+ euporie/notebook/app.py,sha256=QQFvWorsxTxzcUdVVmc4d0FpbC88neTTbxbsLQu5xKw,22481
120
121
  euporie/notebook/current.py,sha256=rQ_R9B0b8JmWILxEyGzGfuVY2iVkHTghq4qRiC-MYSU,387
121
122
  euporie/notebook/enums.py,sha256=g7quMch8KAlaaYJS0UppWqx6tx-ZFt7HxFcmEfam5OM,221
122
123
  euporie/notebook/filters.py,sha256=c2PncF-n4dE67cFmVmhsMhFVWCfxePAaCW6mb6zm0Yo,1502
@@ -125,22 +126,22 @@ euporie/notebook/tabs/__init__.py,sha256=CnHrMzmr4tKEd8Rs8swFvNDWj0fCiLChdqha0At
125
126
  euporie/notebook/tabs/display.py,sha256=y8wMa-MsQZky_JgJEwUtMUGIbLnFiAZMfrX1u-km6VM,2595
126
127
  euporie/notebook/tabs/edit.py,sha256=Hop0AIvIaXJ9SaWtgxpocjGN0JEcsNuPkBsZPcJ76UE,6529
127
128
  euporie/notebook/tabs/json.py,sha256=xKDHYkA59aleBpm6qLuic5GNPNQU6qApLuIT1vZzJrg,2179
128
- euporie/notebook/tabs/log.py,sha256=VJQRC_4SB4aZ4tVELm6ldkFCON_A_rqxBfi-sZzGBOw,3550
129
- euporie/notebook/tabs/notebook.py,sha256=oIWfzPLhQZIvaStB1Nh2UXhko4GTW39xmRH0UYe39NA,43002
129
+ euporie/notebook/tabs/log.py,sha256=qGyjx4Cz9WZ7QP6blh4lCJaJpSDBWnFMpCLRR90aE6U,3546
130
+ euporie/notebook/tabs/notebook.py,sha256=pho5gJZFV5un8hQ5wBc-_JwsRVy6r1YE3wuTJTSKn80,43120
130
131
  euporie/notebook/widgets/__init__.py,sha256=74tOl0bYuWkaKT-4pgD5zmdiIkoFYx8uGj4SxcLHLtQ,48
131
132
  euporie/notebook/widgets/side_bar.py,sha256=EDFAulshV7YqA50w84RRl88UI60AehIXYYA2exlFh0M,7243
132
133
  euporie/preview/__init__.py,sha256=B6RsBuuT0JJk1v6U5n95VuFXcOeFLq6UGgt4w-n_nEI,51
133
134
  euporie/preview/__main__.py,sha256=m2EnzIDLO4dHlDt41JNKpUvAUSw6wD-X0V3YhymXqxc,289
134
- euporie/preview/app.py,sha256=XyZ3HpngCg_jCpDeVPMAUkZjHB3ZnNXdNPPjHuAtegI,8138
135
+ euporie/preview/app.py,sha256=qbDKbSvE_D2_OMU20atVXkWNT8nRjb_BtSRxYzDgsEI,8272
135
136
  euporie/preview/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
137
  euporie/preview/tabs/__init__.py,sha256=rY6DfQ-8qRo_AiICCD-zTyhJBnuMjawWDd8tRxR6q58,43
137
- euporie/preview/tabs/notebook.py,sha256=IHY-cAWo5UmehmXpSSLyuTJvjN9jBeD5BsSoa86zrUw,8504
138
- euporie/web/tabs/web.py,sha256=6wTB7ZLRqG79eQwKwsPIw03gHDUalmMVROSS9Z9j3YM,5228
138
+ euporie/preview/tabs/notebook.py,sha256=KcKB84cUwqB9mbUC7ZfLSDlmhIjYhfSD6uiYX334uEc,8339
139
+ euporie/web/tabs/web.py,sha256=LAVjWdGkTRHT2rtmnU0ITbQzV5aIOAhH5am0kKuynC4,5227
139
140
  euporie/web/widgets/webview.py,sha256=PA8hWqJs8FLMEFNAHYKz4Zt2fJTg-BSyuCji6isxz3o,20800
140
- euporie-2.8.2.data/data/share/applications/euporie-console.desktop,sha256=DI08G0Dl2s5asM6afWUfkKvO5YmcBm-pWQZzUHiNnqc,153
141
- euporie-2.8.2.data/data/share/applications/euporie-notebook.desktop,sha256=RtpJzvizTDuOp0BLa2bLgVHx11LG6L7PL-oF-wHTsgU,155
142
- euporie-2.8.2.dist-info/METADATA,sha256=NdFolI9f2fVf0wavBferKZQtwhPIWylVIn5h8MB1wZ4,6417
143
- euporie-2.8.2.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
144
- euporie-2.8.2.dist-info/entry_points.txt,sha256=iHdjwf9iCAipy7w3tXCH2W_SavHVCSHpJk_84--b7rE,776
145
- euporie-2.8.2.dist-info/licenses/LICENSE,sha256=rI0bfSsCfCVw6d8vk7WokRxd3t8yx5xV4fC5fwaMgCg,1079
146
- euporie-2.8.2.dist-info/RECORD,,
141
+ euporie-2.8.4.data/data/share/applications/euporie-console.desktop,sha256=DI08G0Dl2s5asM6afWUfkKvO5YmcBm-pWQZzUHiNnqc,153
142
+ euporie-2.8.4.data/data/share/applications/euporie-notebook.desktop,sha256=RtpJzvizTDuOp0BLa2bLgVHx11LG6L7PL-oF-wHTsgU,155
143
+ euporie-2.8.4.dist-info/METADATA,sha256=QbvlH35_CH8vp3NcF3AKGBpjOaKHfD-UpX26uucjzf0,6415
144
+ euporie-2.8.4.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
145
+ euporie-2.8.4.dist-info/entry_points.txt,sha256=iHdjwf9iCAipy7w3tXCH2W_SavHVCSHpJk_84--b7rE,776
146
+ euporie-2.8.4.dist-info/licenses/LICENSE,sha256=rI0bfSsCfCVw6d8vk7WokRxd3t8yx5xV4fC5fwaMgCg,1079
147
+ euporie-2.8.4.dist-info/RECORD,,