euporie 2.3.2__py3-none-any.whl → 2.4.1__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/__main__.py +3 -1
- euporie/console/app.py +6 -4
- euporie/console/tabs/console.py +34 -9
- euporie/core/__init__.py +6 -1
- euporie/core/__main__.py +1 -1
- euporie/core/app.py +79 -109
- euporie/core/border.py +44 -14
- euporie/core/comm/base.py +5 -4
- euporie/core/comm/ipywidgets.py +11 -11
- euporie/core/comm/registry.py +12 -6
- euporie/core/commands.py +30 -23
- euporie/core/completion.py +1 -4
- euporie/core/config.py +15 -5
- euporie/core/convert/{base.py → core.py} +117 -53
- euporie/core/convert/formats/ansi.py +46 -25
- euporie/core/convert/formats/base64.py +3 -3
- euporie/core/convert/formats/common.py +38 -13
- euporie/core/convert/formats/formatted_text.py +54 -12
- euporie/core/convert/formats/html.py +5 -5
- euporie/core/convert/formats/jpeg.py +1 -1
- euporie/core/convert/formats/markdown.py +4 -4
- euporie/core/convert/formats/pdf.py +1 -1
- euporie/core/convert/formats/pil.py +5 -3
- euporie/core/convert/formats/png.py +7 -6
- euporie/core/convert/formats/rich.py +4 -3
- euporie/core/convert/formats/sixel.py +5 -5
- euporie/core/convert/utils.py +1 -1
- euporie/core/current.py +11 -5
- euporie/core/formatted_text/ansi.py +4 -8
- euporie/core/formatted_text/html.py +1630 -856
- euporie/core/formatted_text/markdown.py +177 -166
- euporie/core/formatted_text/table.py +20 -14
- euporie/core/formatted_text/utils.py +21 -10
- euporie/core/io.py +14 -14
- euporie/core/kernel.py +48 -37
- euporie/core/key_binding/bindings/micro.py +5 -1
- euporie/core/key_binding/bindings/mouse.py +2 -2
- euporie/core/keys.py +3 -0
- euporie/core/launch.py +5 -2
- euporie/core/lexers.py +13 -2
- euporie/core/log.py +135 -139
- euporie/core/margins.py +32 -14
- euporie/core/path.py +273 -0
- euporie/core/processors.py +35 -0
- euporie/core/renderer.py +21 -5
- euporie/core/style.py +34 -19
- euporie/core/tabs/base.py +101 -17
- euporie/core/tabs/notebook.py +72 -30
- euporie/core/terminal.py +56 -48
- euporie/core/utils.py +12 -16
- euporie/core/widgets/cell.py +6 -5
- euporie/core/widgets/cell_outputs.py +2 -2
- euporie/core/widgets/decor.py +74 -82
- euporie/core/widgets/dialog.py +132 -28
- euporie/core/widgets/display.py +76 -24
- euporie/core/widgets/file_browser.py +87 -31
- euporie/core/widgets/formatted_text_area.py +1 -3
- euporie/core/widgets/forms.py +79 -40
- euporie/core/widgets/inputs.py +23 -13
- euporie/core/widgets/layout.py +4 -3
- euporie/core/widgets/menu.py +368 -216
- euporie/core/widgets/page.py +99 -58
- euporie/core/widgets/pager.py +1 -1
- euporie/core/widgets/palette.py +30 -27
- euporie/core/widgets/search_bar.py +38 -25
- euporie/core/widgets/status_bar.py +103 -5
- euporie/data/desktop/euporie-console.desktop +7 -0
- euporie/data/desktop/euporie-notebook.desktop +7 -0
- euporie/hub/__main__.py +3 -1
- euporie/hub/app.py +9 -7
- euporie/notebook/__main__.py +3 -1
- euporie/notebook/app.py +7 -30
- euporie/notebook/tabs/__init__.py +7 -3
- euporie/notebook/tabs/display.py +18 -9
- euporie/notebook/tabs/edit.py +106 -23
- euporie/notebook/tabs/json.py +73 -0
- euporie/notebook/tabs/log.py +18 -8
- euporie/notebook/tabs/notebook.py +60 -41
- euporie/preview/__main__.py +3 -1
- euporie/preview/app.py +2 -1
- euporie/preview/tabs/notebook.py +23 -10
- euporie/web/tabs/web.py +149 -0
- euporie/web/widgets/webview.py +563 -0
- euporie-2.4.1.data/data/share/applications/euporie-console.desktop +7 -0
- euporie-2.4.1.data/data/share/applications/euporie-notebook.desktop +7 -0
- {euporie-2.3.2.dist-info → euporie-2.4.1.dist-info}/METADATA +6 -5
- euporie-2.4.1.dist-info/RECORD +129 -0
- {euporie-2.3.2.dist-info → euporie-2.4.1.dist-info}/WHEEL +1 -1
- euporie/core/url.py +0 -64
- euporie-2.3.2.dist-info/RECORD +0 -122
- {euporie-2.3.2.dist-info → euporie-2.4.1.dist-info}/entry_points.txt +0 -0
- {euporie-2.3.2.dist-info → euporie-2.4.1.dist-info}/licenses/LICENSE +0 -0
@@ -5,7 +5,7 @@ from __future__ import annotations
|
|
5
5
|
from functools import partial
|
6
6
|
from typing import TYPE_CHECKING
|
7
7
|
|
8
|
-
from euporie.core.convert.
|
8
|
+
from euporie.core.convert.core import register
|
9
9
|
from euporie.core.convert.formats.common import (
|
10
10
|
chafa_convert_cmd,
|
11
11
|
chafa_convert_py,
|
@@ -15,10 +15,10 @@ from euporie.core.convert.utils import call_subproc, commands_exist, have_module
|
|
15
15
|
from euporie.core.current import get_app
|
16
16
|
|
17
17
|
if TYPE_CHECKING:
|
18
|
+
from pathlib import Path
|
18
19
|
from typing import Any
|
19
20
|
|
20
21
|
from PIL.Image import Image as PilImage
|
21
|
-
from upath import UPath
|
22
22
|
|
23
23
|
|
24
24
|
register(
|
@@ -46,7 +46,7 @@ def png_to_sixel_img2sixel(
|
|
46
46
|
rows: int | None = None,
|
47
47
|
fg: str | None = None,
|
48
48
|
bg: str | None = None,
|
49
|
-
path:
|
49
|
+
path: Path | None = None,
|
50
50
|
) -> str:
|
51
51
|
"""Convert PNG data to sixels :command:`img2sixel`."""
|
52
52
|
bg = bg or get_app().color_palette.bg.base_hex
|
@@ -77,7 +77,7 @@ def pil_to_sixel_py_timg(
|
|
77
77
|
rows: int | None = None,
|
78
78
|
fg: str | None = None,
|
79
79
|
bg: str | None = None,
|
80
|
-
path:
|
80
|
+
path: Path | None = None,
|
81
81
|
) -> str:
|
82
82
|
"""Convert a pillow image to sixels :py:mod:`timg`."""
|
83
83
|
import timg
|
@@ -96,7 +96,7 @@ def pil_to_sixel_py_teimpy(
|
|
96
96
|
rows: int | None = None,
|
97
97
|
fg: str | None = None,
|
98
98
|
bg: str | None = None,
|
99
|
-
path:
|
99
|
+
path: Path | None = None,
|
100
100
|
) -> str:
|
101
101
|
"""Convert a pillow image to sixels :py:mod:`teimpy`."""
|
102
102
|
import numpy as np
|
euporie/core/convert/utils.py
CHANGED
@@ -15,7 +15,7 @@ from typing import TYPE_CHECKING
|
|
15
15
|
import imagesize
|
16
16
|
from prompt_toolkit.filters import Condition, to_filter
|
17
17
|
|
18
|
-
from euporie.core.convert.
|
18
|
+
from euporie.core.convert.core import convert
|
19
19
|
from euporie.core.current import get_app
|
20
20
|
|
21
21
|
if TYPE_CHECKING:
|
euporie/core/current.py
CHANGED
@@ -2,15 +2,21 @@
|
|
2
2
|
|
3
3
|
from __future__ import annotations
|
4
4
|
|
5
|
-
from typing import TYPE_CHECKING
|
5
|
+
from typing import TYPE_CHECKING
|
6
6
|
|
7
|
-
from prompt_toolkit.application.current import
|
7
|
+
from prompt_toolkit.application.current import _current_app_session
|
8
8
|
|
9
9
|
if TYPE_CHECKING:
|
10
10
|
from euporie.core.app import BaseApp
|
11
11
|
|
12
12
|
|
13
13
|
def get_app() -> BaseApp:
|
14
|
-
"""Get the current
|
15
|
-
app
|
16
|
-
|
14
|
+
"""Get the current active (running) Application."""
|
15
|
+
from euporie.core.app import BaseApp
|
16
|
+
|
17
|
+
session = _current_app_session.get()
|
18
|
+
if isinstance(session.app, BaseApp):
|
19
|
+
return session.app
|
20
|
+
|
21
|
+
# Use a baseapp as our "DummyApplication"
|
22
|
+
return BaseApp()
|
@@ -17,7 +17,7 @@ log = logging.getLogger(__name__)
|
|
17
17
|
class ANSI(PTANSI):
|
18
18
|
"""Convert ANSI text into formatted text, preserving all control sequences."""
|
19
19
|
|
20
|
-
def __init__(self, value: str, tab_size: int =
|
20
|
+
def __init__(self, value: str, tab_size: int = 8) -> None:
|
21
21
|
"""Initiate the ANSI processor instance.
|
22
22
|
|
23
23
|
This replaces carriage returns to emulate terminal output.
|
@@ -27,7 +27,8 @@ class ANSI(PTANSI):
|
|
27
27
|
tab_size: The number of spaces to use to represent a tab
|
28
28
|
|
29
29
|
"""
|
30
|
-
|
30
|
+
# Replace tabs with spaces
|
31
|
+
value = value.expandtabs(tabsize=tab_size)
|
31
32
|
# Replace windows style newlines
|
32
33
|
value = value.replace("\r\n", "\n")
|
33
34
|
# Remove anything before a carriage return if there is something after it to
|
@@ -35,7 +36,7 @@ class ANSI(PTANSI):
|
|
35
36
|
value = re.sub(r"^.*\r(?!\n)", "", value, 0, re.MULTILINE)
|
36
37
|
# Clear line by deleting previous characters
|
37
38
|
value = re.sub(r".*\x1b\[2K", "", value, 0)
|
38
|
-
#
|
39
|
+
# Remove hide & show cursor commands
|
39
40
|
value = re.sub(r"\x1b\[\?25[hl]", "", value, 0)
|
40
41
|
|
41
42
|
super().__init__(value)
|
@@ -75,11 +76,6 @@ class ANSI(PTANSI):
|
|
75
76
|
formatted_text.pop()
|
76
77
|
continue
|
77
78
|
|
78
|
-
# Check for tabs
|
79
|
-
elif char == "\t":
|
80
|
-
formatted_text.append(("", " " * self.tab_size))
|
81
|
-
continue
|
82
|
-
|
83
79
|
elif char in ("\x1b", "\x9b"):
|
84
80
|
# Got a CSI sequence, try to compile a control sequence
|
85
81
|
char = yield
|