hspylib-clitt 0.9.127__py3-none-any.whl → 0.9.128__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 hspylib-clitt might be problematic. Click here for more details.
- clitt/.version +1 -1
- clitt/__init__.py +2 -2
- clitt/addons/__init__.py +2 -2
- clitt/addons/appman/__init__.py +2 -2
- clitt/addons/appman/templates/__init__.py +2 -2
- clitt/addons/widman/__init__.py +2 -2
- clitt/addons/widman/widgets/__init__.py +2 -2
- clitt/core/__init__.py +2 -2
- clitt/core/exception/__init__.py +2 -2
- clitt/core/icons/__init__.py +2 -2
- clitt/core/icons/emojis/__init__.py +2 -2
- clitt/core/icons/font_awesome/__init__.py +2 -2
- clitt/core/term/__init__.py +2 -2
- clitt/core/term/cursor.py +17 -7
- clitt/core/term/terminal.py +7 -3
- clitt/core/tui/__init__.py +2 -2
- clitt/core/tui/line_input/__init__.py +2 -2
- clitt/core/tui/line_input/keyboard_input.py +84 -77
- clitt/core/tui/mchoose/__init__.py +2 -2
- clitt/core/tui/mdashboard/__init__.py +2 -2
- clitt/core/tui/menu/__init__.py +2 -2
- clitt/core/tui/minput/__init__.py +2 -2
- clitt/core/tui/mselect/__init__.py +2 -2
- clitt/core/tui/table/__init__.py +2 -2
- clitt/core/tui/tui_application.py +2 -2
- clitt/core/tui/tui_component.py +28 -18
- clitt/utils/__init__.py +2 -2
- {hspylib_clitt-0.9.127.dist-info → hspylib_clitt-0.9.128.dist-info}/METADATA +2 -2
- {hspylib_clitt-0.9.127.dist-info → hspylib_clitt-0.9.128.dist-info}/RECORD +31 -31
- {hspylib_clitt-0.9.127.dist-info → hspylib_clitt-0.9.128.dist-info}/WHEEL +1 -1
- {hspylib_clitt-0.9.127.dist-info → hspylib_clitt-0.9.128.dist-info}/top_level.txt +0 -0
clitt/.version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.9.
|
|
1
|
+
0.9.128
|
clitt/__init__.py
CHANGED
clitt/addons/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.addons
|
|
6
6
|
"""Package initialization."""
|
|
@@ -9,4 +9,4 @@ __all__ = [
|
|
|
9
9
|
'appman',
|
|
10
10
|
'widman'
|
|
11
11
|
]
|
|
12
|
-
__version__ = '0.9.
|
|
12
|
+
__version__ = '0.9.128'
|
clitt/addons/appman/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.addons.appman
|
|
6
6
|
"""Package initialization."""
|
|
@@ -10,4 +10,4 @@ __all__ = [
|
|
|
10
10
|
'appman_enums',
|
|
11
11
|
'templates'
|
|
12
12
|
]
|
|
13
|
-
__version__ = '0.9.
|
|
13
|
+
__version__ = '0.9.128'
|
clitt/addons/widman/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.addons.widman
|
|
6
6
|
"""Package initialization."""
|
|
@@ -11,4 +11,4 @@ __all__ = [
|
|
|
11
11
|
'widgets',
|
|
12
12
|
'widman'
|
|
13
13
|
]
|
|
14
|
-
__version__ = '0.9.
|
|
14
|
+
__version__ = '0.9.128'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.addons.widman.widgets
|
|
6
6
|
"""Package initialization."""
|
|
@@ -11,4 +11,4 @@ __all__ = [
|
|
|
11
11
|
'widget_send_msg',
|
|
12
12
|
'widget_time_calc'
|
|
13
13
|
]
|
|
14
|
-
__version__ = '0.9.
|
|
14
|
+
__version__ = '0.9.128'
|
clitt/core/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core
|
|
6
6
|
"""Package initialization."""
|
|
@@ -12,4 +12,4 @@ __all__ = [
|
|
|
12
12
|
'term',
|
|
13
13
|
'tui'
|
|
14
14
|
]
|
|
15
|
-
__version__ = '0.9.
|
|
15
|
+
__version__ = '0.9.128'
|
clitt/core/exception/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.exception
|
|
6
6
|
"""Package initialization."""
|
|
@@ -8,4 +8,4 @@
|
|
|
8
8
|
__all__ = [
|
|
9
9
|
'exceptions'
|
|
10
10
|
]
|
|
11
|
-
__version__ = '0.9.
|
|
11
|
+
__version__ = '0.9.128'
|
clitt/core/icons/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.icons
|
|
6
6
|
"""Package initialization."""
|
|
@@ -9,4 +9,4 @@ __all__ = [
|
|
|
9
9
|
'emojis',
|
|
10
10
|
'font_awesome'
|
|
11
11
|
]
|
|
12
|
-
__version__ = '0.9.
|
|
12
|
+
__version__ = '0.9.128'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.icons.emojis
|
|
6
6
|
"""Package initialization."""
|
|
@@ -9,4 +9,4 @@ __all__ = [
|
|
|
9
9
|
'emojis',
|
|
10
10
|
'face_smiling'
|
|
11
11
|
]
|
|
12
|
-
__version__ = '0.9.
|
|
12
|
+
__version__ = '0.9.128'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.icons.font_awesome
|
|
6
6
|
"""Package initialization."""
|
|
@@ -15,4 +15,4 @@ __all__ = [
|
|
|
15
15
|
'trickplay_icons',
|
|
16
16
|
'widget_icons'
|
|
17
17
|
]
|
|
18
|
-
__version__ = '0.9.
|
|
18
|
+
__version__ = '0.9.128'
|
clitt/core/term/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.term
|
|
6
6
|
"""Package initialization."""
|
|
@@ -11,4 +11,4 @@ __all__ = [
|
|
|
11
11
|
'screen',
|
|
12
12
|
'terminal'
|
|
13
13
|
]
|
|
14
|
-
__version__ = '0.9.
|
|
14
|
+
__version__ = '0.9.128'
|
clitt/core/term/cursor.py
CHANGED
|
@@ -126,27 +126,28 @@ class Cursor(metaclass=Singleton):
|
|
|
126
126
|
self.position = get_cursor_position() or self.position
|
|
127
127
|
return self.position
|
|
128
128
|
|
|
129
|
-
def write(self, obj: Any, end: str = "") -> Position:
|
|
129
|
+
def write(self, obj: Any = "", end: str = "", markdown: bool = False) -> Position:
|
|
130
130
|
"""Write the string representation of the object to the screen.
|
|
131
131
|
:param obj the object to be written.
|
|
132
132
|
:param end string appended after the last value, default a newline.
|
|
133
|
+
:param markdown: whether to print a markdown render.
|
|
133
134
|
:return the cursor position after writing.
|
|
134
135
|
"""
|
|
135
|
-
sysout(obj, end=end)
|
|
136
|
-
text = (str(obj) + end)
|
|
137
|
-
|
|
138
|
-
text_offset = len(text[max(0, last_index_of(text, os.linesep)) :])
|
|
136
|
+
sysout(obj, end=end, markdown=markdown)
|
|
137
|
+
text: str = self.cleanup_text(str(obj) + end)
|
|
138
|
+
text_offset: int = self.offset_text(text)
|
|
139
139
|
self.position = self.position[0] + text.count(os.linesep), text_offset + (
|
|
140
140
|
self.position[1] if text.count(os.linesep) == 0 else 0
|
|
141
141
|
)
|
|
142
142
|
return self.position
|
|
143
143
|
|
|
144
|
-
def writeln(self, obj: Any) -> Position:
|
|
144
|
+
def writeln(self, obj: Any = "", markdown: bool = False) -> Position:
|
|
145
145
|
"""Write the string representation of the object to the screen, appending a new line.
|
|
146
146
|
:param obj the object to be written.
|
|
147
|
+
:param markdown: whether to print a markdown render.
|
|
147
148
|
:return the cursor position after writing.
|
|
148
149
|
"""
|
|
149
|
-
return self.write(obj, end=os.linesep)
|
|
150
|
+
return self.write(obj, end=os.linesep, markdown=markdown)
|
|
150
151
|
|
|
151
152
|
def save(self) -> Position:
|
|
152
153
|
"""Save the current cursor position and attributes.
|
|
@@ -170,5 +171,14 @@ class Cursor(metaclass=Singleton):
|
|
|
170
171
|
sysout(Vt100.mode(0), end=end)
|
|
171
172
|
return self.position
|
|
172
173
|
|
|
174
|
+
def cleanup_text(self, text: str) -> str:
|
|
175
|
+
"""TODO"""
|
|
176
|
+
return VtColor.strip_colors(VtCode.strip_codes(text.replace("%EOL%", os.linesep)))
|
|
177
|
+
|
|
178
|
+
def offset_text(self, text: str) -> int:
|
|
179
|
+
"""TODO"""
|
|
180
|
+
text: str = self.cleanup_text(text)
|
|
181
|
+
return len(text[max(0, last_index_of(text, os.linesep)):])
|
|
182
|
+
|
|
173
183
|
|
|
174
184
|
assert (cursor := Cursor().INSTANCE) is not None, "Failed to create Cursor instance"
|
clitt/core/term/terminal.py
CHANGED
|
@@ -177,9 +177,13 @@ class Terminal(metaclass=Singleton):
|
|
|
177
177
|
cls.INSTANCE.screen.clear()
|
|
178
178
|
|
|
179
179
|
@classmethod
|
|
180
|
-
def echo(cls, obj: Any, end: str = os.linesep) -> None:
|
|
181
|
-
"""Write the string representation of the object to the screen.
|
|
182
|
-
|
|
180
|
+
def echo(cls, obj: Any = "", end: str = os.linesep, markdown: bool = False) -> None:
|
|
181
|
+
"""Write the string representation of the object to the screen.
|
|
182
|
+
:param obj the object to be written.
|
|
183
|
+
:param end string appended after the last value, default a newline.
|
|
184
|
+
:param markdown: whether to print a markdown render.
|
|
185
|
+
"""
|
|
186
|
+
cls.INSTANCE.screen.cursor.write(obj, end=end, markdown=markdown)
|
|
183
187
|
|
|
184
188
|
@classmethod
|
|
185
189
|
def alternate_screen(cls, enable: bool) -> None:
|
clitt/core/tui/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.tui
|
|
6
6
|
"""Package initialization."""
|
|
@@ -17,4 +17,4 @@ __all__ = [
|
|
|
17
17
|
'tui_component',
|
|
18
18
|
'tui_preferences'
|
|
19
19
|
]
|
|
20
|
-
__version__ = '0.9.
|
|
20
|
+
__version__ = '0.9.128'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.tui.line_input
|
|
6
6
|
"""Package initialization."""
|
|
@@ -9,4 +9,4 @@ __all__ = [
|
|
|
9
9
|
'keyboard_input',
|
|
10
10
|
'line_input'
|
|
11
11
|
]
|
|
12
|
-
__version__ = '0.9.
|
|
12
|
+
__version__ = '0.9.128'
|
|
@@ -12,10 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
Copyright·(c)·2024,·HSPyLib
|
|
14
14
|
"""
|
|
15
|
-
|
|
15
|
+
import os
|
|
16
|
+
from collections import defaultdict
|
|
16
17
|
from typing import Optional, Callable, TypeAlias
|
|
17
18
|
|
|
18
|
-
from clitt.core.term.commons import Direction
|
|
19
|
+
from clitt.core.term.commons import Direction, Position
|
|
19
20
|
from clitt.core.term.terminal import Terminal
|
|
20
21
|
from clitt.core.tui.tui_component import TUIComponent
|
|
21
22
|
from hspylib.core.tools.dict_tools import get_or_default
|
|
@@ -28,6 +29,9 @@ KeyBinding: TypeAlias = dict[Keyboard, Callable[[], None]]
|
|
|
28
29
|
class KeyboardInput(TUIComponent):
|
|
29
30
|
"""Provides a keyboard input for terminal UIs with undo and history."""
|
|
30
31
|
|
|
32
|
+
# minimum length to be considered as history store.
|
|
33
|
+
_MIN_HIST_STORE_LEN: int = 3
|
|
34
|
+
|
|
31
35
|
# Current history index.
|
|
32
36
|
_HIST_INDEX: int = 0
|
|
33
37
|
|
|
@@ -40,9 +44,6 @@ class KeyboardInput(TUIComponent):
|
|
|
40
44
|
# Stack containing current input reverts.
|
|
41
45
|
_REDO_HISTORY: list[str] = []
|
|
42
46
|
|
|
43
|
-
# Map containing the custom keybindings.
|
|
44
|
-
_BINDINGS: KeyBinding = {}
|
|
45
|
-
|
|
46
47
|
@classmethod
|
|
47
48
|
def preload_history(cls, history: list[str]) -> None:
|
|
48
49
|
"""Preload the input with the provided dictionary.
|
|
@@ -69,6 +70,8 @@ class KeyboardInput(TUIComponent):
|
|
|
69
70
|
"""Add the following input to the history set.
|
|
70
71
|
:param input_text: The input text to add to the history.
|
|
71
72
|
"""
|
|
73
|
+
if not len(input_text) > cls._MIN_HIST_STORE_LEN:
|
|
74
|
+
return
|
|
72
75
|
if cls._HISTORY[-1] != '':
|
|
73
76
|
cls._HISTORY.append('')
|
|
74
77
|
if input_text:
|
|
@@ -101,41 +104,64 @@ class KeyboardInput(TUIComponent):
|
|
|
101
104
|
text_color: VtColor = VtColor.NC,
|
|
102
105
|
navbar_enable: bool = False,
|
|
103
106
|
):
|
|
107
|
+
self._HISTORY[-1] = ""
|
|
108
|
+
self._HIST_INDEX = max(0, len(self._HISTORY) - 1)
|
|
104
109
|
super().__init__(prompt)
|
|
105
110
|
self._placeholder: str = placeholder
|
|
106
111
|
self._prompt_color: VtColor = prompt_color
|
|
107
112
|
self._text_color: VtColor = text_color
|
|
108
113
|
self._navbar_enable: bool = navbar_enable
|
|
114
|
+
self._offset: Position = 0, 0
|
|
109
115
|
self._input_index: int = 0
|
|
110
116
|
self._input_text: str = ""
|
|
111
117
|
self._suggestion: str = ""
|
|
112
|
-
self.
|
|
113
|
-
self.
|
|
114
|
-
|
|
118
|
+
self._bindings: KeyBinding = defaultdict()
|
|
119
|
+
self._bind_keys()
|
|
120
|
+
|
|
121
|
+
@property
|
|
122
|
+
def prompt(self) -> str:
|
|
123
|
+
return f"{self.prompt_color}{self.title}{self.text_color}"
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def text(self) -> str:
|
|
127
|
+
return self._input_text
|
|
128
|
+
|
|
129
|
+
@text.setter
|
|
130
|
+
def text(self, value: str) -> None:
|
|
131
|
+
self._input_text = value
|
|
115
132
|
|
|
116
133
|
@property
|
|
117
134
|
def length(self) -> int:
|
|
118
|
-
return len(self.
|
|
135
|
+
return len(self.text) if self.text else 0
|
|
119
136
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
137
|
+
@property
|
|
138
|
+
def prompt_color(self) -> str:
|
|
139
|
+
return self._prompt_color.placeholder
|
|
140
|
+
|
|
141
|
+
@property
|
|
142
|
+
def text_color(self) -> str:
|
|
143
|
+
return self._text_color.placeholder
|
|
144
|
+
|
|
145
|
+
@property
|
|
146
|
+
def placeholder(self) -> str:
|
|
147
|
+
return self._placeholder
|
|
148
|
+
|
|
149
|
+
@property
|
|
150
|
+
def bindings(self) -> KeyBinding:
|
|
151
|
+
return self._bindings
|
|
123
152
|
|
|
153
|
+
def execute(self) -> Optional[str | Keyboard]:
|
|
154
|
+
keypress = self._loop(cleanup=False) or Keyboard.VK_ESC
|
|
124
155
|
if keypress.isEnter():
|
|
125
|
-
self._add_history(self.
|
|
156
|
+
self._add_history(self.text)
|
|
126
157
|
self._UNDO_HISTORY.clear()
|
|
127
158
|
self._REDO_HISTORY.clear()
|
|
128
|
-
|
|
129
|
-
self.cursor.restore()
|
|
130
|
-
self.write(f"{self._prompt_color.placeholder}{self.title}{self._text_color.placeholder}")
|
|
131
|
-
self.write(self._input_text)
|
|
132
|
-
self._terminal.cursor.erase(Direction.DOWN)
|
|
133
|
-
Terminal.set_show_cursor(True)
|
|
159
|
+
self.cursor.erase(Direction.DOWN)
|
|
134
160
|
elif keypress == Keyboard.VK_ESC:
|
|
135
|
-
self.
|
|
161
|
+
self.text = None
|
|
136
162
|
self.writeln("%NC%")
|
|
137
163
|
|
|
138
|
-
return self.
|
|
164
|
+
return self.text
|
|
139
165
|
|
|
140
166
|
def reset(self) -> None:
|
|
141
167
|
"""Reset the contents of the input."""
|
|
@@ -152,27 +178,30 @@ class KeyboardInput(TUIComponent):
|
|
|
152
178
|
|
|
153
179
|
def complete(self) -> None:
|
|
154
180
|
"""Complete the input text with the suggested text."""
|
|
155
|
-
self.
|
|
156
|
-
self.
|
|
181
|
+
text: str = self.text + self._suggestion
|
|
182
|
+
self._update_input(text)
|
|
183
|
+
self._input_index = len(text)
|
|
157
184
|
|
|
158
185
|
def render(self) -> None:
|
|
159
186
|
Terminal.set_show_cursor(False)
|
|
160
|
-
self.cursor.
|
|
161
|
-
self.
|
|
162
|
-
self.
|
|
163
|
-
|
|
164
|
-
|
|
187
|
+
self.cursor.move(self._offset[0], Direction.UP)
|
|
188
|
+
self.cursor.move(self._offset[1], Direction.LEFT)
|
|
189
|
+
self.cursor.erase(Direction.DOWN)
|
|
190
|
+
self.write(self.prompt)
|
|
191
|
+
if self.text:
|
|
192
|
+
self.write(self.text)
|
|
165
193
|
self._render_suggestions()
|
|
166
194
|
else:
|
|
167
|
-
self.write(f"%GRAY%{self.
|
|
168
|
-
self.
|
|
169
|
-
self.cursor.move(len(self.
|
|
195
|
+
self.write(f"%GRAY%{self.placeholder}%NC%")
|
|
196
|
+
self.cursor.erase(Direction.DOWN)
|
|
197
|
+
self.cursor.move(len(self.placeholder), Direction.LEFT)
|
|
170
198
|
self._re_render = False
|
|
171
199
|
self._set_cursor_pos()
|
|
200
|
+
self._offset = self.prompt.count(os.linesep), self.cursor.position[1]
|
|
172
201
|
Terminal.set_show_cursor()
|
|
173
202
|
|
|
174
203
|
def navbar(self, **kwargs) -> str:
|
|
175
|
-
|
|
204
|
+
...
|
|
176
205
|
|
|
177
206
|
def handle_keypress(self) -> Keyboard:
|
|
178
207
|
if keypress := Keyboard.wait_keystroke():
|
|
@@ -182,26 +211,25 @@ class KeyboardInput(TUIComponent):
|
|
|
182
211
|
if self._input_index > 0:
|
|
183
212
|
self._input_index = max(0, self._input_index - 1)
|
|
184
213
|
self._update_input(
|
|
185
|
-
self.
|
|
214
|
+
self.text[: self._input_index] + self.text[1 + self._input_index:]
|
|
186
215
|
)
|
|
187
216
|
case Keyboard.VK_DELETE:
|
|
188
217
|
self._update_input(
|
|
189
|
-
self.
|
|
218
|
+
self.text[: self._input_index] + self.text[1 + self._input_index:]
|
|
190
219
|
)
|
|
191
220
|
case Keyboard.VK_LEFT:
|
|
192
221
|
self._input_index = max(0, self._input_index - 1)
|
|
193
222
|
case Keyboard.VK_RIGHT:
|
|
194
223
|
self._input_index = min(self.length, self._input_index + 1)
|
|
195
224
|
case Keyboard.VK_UP:
|
|
196
|
-
self.
|
|
225
|
+
self.text = self._prev_in_history()
|
|
197
226
|
self._input_index = self.length
|
|
198
227
|
case Keyboard.VK_DOWN:
|
|
199
|
-
self.
|
|
228
|
+
self.text = self._next_in_history()
|
|
200
229
|
self._input_index = self.length
|
|
201
230
|
# Customizable key bindings.
|
|
202
|
-
case _ as key if key in self.
|
|
203
|
-
fn
|
|
204
|
-
if fn and isinstance(fn, Callable):
|
|
231
|
+
case _ as key if key in self.bindings:
|
|
232
|
+
if (fn := self.bindings[key]) and callable(fn):
|
|
205
233
|
fn()
|
|
206
234
|
# Printable characters
|
|
207
235
|
case _ as key if key.val.isprintable():
|
|
@@ -210,50 +238,29 @@ class KeyboardInput(TUIComponent):
|
|
|
210
238
|
if key.val and key.val.isprintable():
|
|
211
239
|
text += key.val
|
|
212
240
|
self._update_input(
|
|
213
|
-
self.
|
|
241
|
+
self.text[: self._input_index] + text + self.text[self._input_index:])
|
|
214
242
|
self._input_index += len(text)
|
|
215
243
|
# Loop breaking characters
|
|
216
244
|
case _ as key if key in Keyboard.break_keys():
|
|
217
245
|
self._done = True
|
|
218
246
|
case _:
|
|
219
|
-
self.
|
|
247
|
+
self.text = keypress
|
|
220
248
|
self._done = True
|
|
221
249
|
self._re_render = True
|
|
222
250
|
|
|
223
251
|
return keypress
|
|
224
252
|
|
|
225
|
-
def
|
|
226
|
-
"""
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
})
|
|
237
|
-
|
|
238
|
-
def _prepare_render(self, auto_wrap: bool = True, show_cursor: bool = True) -> None:
|
|
239
|
-
self.screen.add_watcher(self.invalidate)
|
|
240
|
-
Terminal.set_auto_wrap(auto_wrap)
|
|
241
|
-
Terminal.set_show_cursor(show_cursor)
|
|
242
|
-
self.cursor.save()
|
|
243
|
-
|
|
244
|
-
def _loop(self, break_keys: list[Keyboard] = None) -> Keyboard:
|
|
245
|
-
break_keys = break_keys or Keyboard.break_keys()
|
|
246
|
-
keypress = Keyboard.VK_NONE
|
|
247
|
-
|
|
248
|
-
# Wait for user interaction
|
|
249
|
-
while not self._done and keypress and keypress not in break_keys:
|
|
250
|
-
# Menu Renderization
|
|
251
|
-
if self._re_render:
|
|
252
|
-
self.render()
|
|
253
|
-
# Navigation input
|
|
254
|
-
keypress = self.handle_keypress()
|
|
255
|
-
|
|
256
|
-
return keypress
|
|
253
|
+
def _bind_keys(self) -> None:
|
|
254
|
+
"""Configure the default key bindings."""
|
|
255
|
+
self._bindings.update({
|
|
256
|
+
Keyboard.VK_CTRL_A: self.home,
|
|
257
|
+
Keyboard.VK_CTRL_E: self.end,
|
|
258
|
+
Keyboard.VK_CTRL_R: self.reset,
|
|
259
|
+
Keyboard.VK_CTRL_F: self.forget_history,
|
|
260
|
+
Keyboard.VK_HOME: self.home,
|
|
261
|
+
Keyboard.VK_END: self.end,
|
|
262
|
+
Keyboard.VK_TAB: self.complete
|
|
263
|
+
})
|
|
257
264
|
|
|
258
265
|
def _set_cursor_pos(self):
|
|
259
266
|
"""Set the cursor position on the input."""
|
|
@@ -264,15 +271,15 @@ class KeyboardInput(TUIComponent):
|
|
|
264
271
|
"""Update the value of the input.
|
|
265
272
|
:param text: The text to be set.
|
|
266
273
|
"""
|
|
267
|
-
self._UNDO_HISTORY.append(self.
|
|
268
|
-
self._HISTORY[-1] = text if text not in self._HISTORY else self.
|
|
269
|
-
self.
|
|
274
|
+
self._UNDO_HISTORY.append(self.text)
|
|
275
|
+
self._HISTORY[-1] = text if text not in self._HISTORY else self.text
|
|
276
|
+
self.text = text
|
|
270
277
|
self._HIST_INDEX = max(0, len(self._HISTORY) - 1)
|
|
271
278
|
return text
|
|
272
279
|
|
|
273
280
|
def _render_suggestions(self) -> None:
|
|
274
281
|
"""Render the input suggestions."""
|
|
275
|
-
edt_text: str = self.
|
|
282
|
+
edt_text: str = self.text
|
|
276
283
|
filtered: list[str] = list(filter(lambda h: h.startswith(edt_text), self._HISTORY))
|
|
277
284
|
hint: str = ''
|
|
278
285
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.tui.mchoose
|
|
6
6
|
"""Package initialization."""
|
|
@@ -9,4 +9,4 @@ __all__ = [
|
|
|
9
9
|
'mchoose',
|
|
10
10
|
'menu_choose'
|
|
11
11
|
]
|
|
12
|
-
__version__ = '0.9.
|
|
12
|
+
__version__ = '0.9.128'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.tui.mdashboard
|
|
6
6
|
"""Package initialization."""
|
|
@@ -11,4 +11,4 @@ __all__ = [
|
|
|
11
11
|
'mdashboard',
|
|
12
12
|
'menu_dashboard'
|
|
13
13
|
]
|
|
14
|
-
__version__ = '0.9.
|
|
14
|
+
__version__ = '0.9.128'
|
clitt/core/tui/menu/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.tui.menu
|
|
6
6
|
"""Package initialization."""
|
|
@@ -13,4 +13,4 @@ __all__ = [
|
|
|
13
13
|
'tui_menu_ui',
|
|
14
14
|
'tui_menu_view'
|
|
15
15
|
]
|
|
16
|
-
__version__ = '0.9.
|
|
16
|
+
__version__ = '0.9.128'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.tui.minput
|
|
6
6
|
"""Package initialization."""
|
|
@@ -16,4 +16,4 @@ __all__ = [
|
|
|
16
16
|
'minput',
|
|
17
17
|
'minput_utils'
|
|
18
18
|
]
|
|
19
|
-
__version__ = '0.9.
|
|
19
|
+
__version__ = '0.9.128'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.tui.mselect
|
|
6
6
|
"""Package initialization."""
|
|
@@ -9,4 +9,4 @@ __all__ = [
|
|
|
9
9
|
'menu_select',
|
|
10
10
|
'mselect'
|
|
11
11
|
]
|
|
12
|
-
__version__ = '0.9.
|
|
12
|
+
__version__ = '0.9.128'
|
clitt/core/tui/table/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# _*_ coding: utf-8 _*_
|
|
2
2
|
#
|
|
3
|
-
# hspylib-clitt v0.9.
|
|
3
|
+
# hspylib-clitt v0.9.128
|
|
4
4
|
#
|
|
5
5
|
# Package: main.clitt.core.tui.table
|
|
6
6
|
"""Package initialization."""
|
|
@@ -9,4 +9,4 @@ __all__ = [
|
|
|
9
9
|
'table_enums',
|
|
10
10
|
'table_renderer'
|
|
11
11
|
]
|
|
12
|
-
__version__ = '0.9.
|
|
12
|
+
__version__ = '0.9.128'
|
|
@@ -41,10 +41,10 @@ class TUIApplication(Application, metaclass=AbstractSingleton):
|
|
|
41
41
|
self._app_name = os.path.basename(sys.argv[0]) if name is None else name
|
|
42
42
|
|
|
43
43
|
def _setup_arguments(self) -> None:
|
|
44
|
-
|
|
44
|
+
...
|
|
45
45
|
|
|
46
46
|
def _main(self, *params, **kwargs) -> ExitStatus:
|
|
47
|
-
|
|
47
|
+
...
|
|
48
48
|
|
|
49
49
|
def _cleanup(self) -> None:
|
|
50
50
|
if screen.alternate and self._exit_code == ExitStatus.SUCCESS:
|
clitt/core/tui/tui_component.py
CHANGED
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
|
|
13
13
|
Copyright·(c)·2024,·HSPyLib
|
|
14
14
|
"""
|
|
15
|
-
|
|
15
|
+
import os
|
|
16
|
+
from abc import ABC
|
|
17
|
+
from typing import Any, Optional, TypeVar
|
|
18
|
+
|
|
16
19
|
from clitt.core.icons.font_awesome.awesome import Awesome
|
|
17
20
|
from clitt.core.term.commons import Direction
|
|
18
21
|
from clitt.core.term.cursor import Cursor
|
|
@@ -21,7 +24,6 @@ from clitt.core.term.terminal import Terminal
|
|
|
21
24
|
from clitt.core.tui.tui_preferences import TUIPreferences
|
|
22
25
|
from hspylib.core.tools.text_tools import elide_text
|
|
23
26
|
from hspylib.modules.cli.keyboard import Keyboard
|
|
24
|
-
from typing import Any, List, Optional, TypeVar
|
|
25
27
|
|
|
26
28
|
T = TypeVar("T", bound=Any)
|
|
27
29
|
|
|
@@ -63,15 +65,21 @@ class TUIComponent(ABC):
|
|
|
63
65
|
def columns(self) -> int:
|
|
64
66
|
return self.screen.columns
|
|
65
67
|
|
|
66
|
-
def _prepare_render(
|
|
68
|
+
def _prepare_render(
|
|
69
|
+
self,
|
|
70
|
+
auto_wrap: bool = False,
|
|
71
|
+
show_cursor: bool = False,
|
|
72
|
+
clear_screen: bool = True
|
|
73
|
+
) -> None:
|
|
67
74
|
"""Prepare the screen for renderization."""
|
|
68
75
|
self.screen.add_watcher(self.invalidate)
|
|
69
76
|
Terminal.set_auto_wrap(auto_wrap)
|
|
70
77
|
Terminal.set_show_cursor(show_cursor)
|
|
71
|
-
|
|
78
|
+
if clear_screen:
|
|
79
|
+
self.screen.clear()
|
|
72
80
|
self.cursor.save()
|
|
73
81
|
|
|
74
|
-
def _loop(self, break_keys:
|
|
82
|
+
def _loop(self, break_keys: list[Keyboard] = None, cleanup: bool = True) -> Keyboard:
|
|
75
83
|
"""Loop and wait for a keypress. Render the component if required."""
|
|
76
84
|
|
|
77
85
|
break_keys = break_keys or Keyboard.break_keys()
|
|
@@ -86,10 +94,11 @@ class TUIComponent(ABC):
|
|
|
86
94
|
# Navigation input
|
|
87
95
|
keypress = self.handle_keypress()
|
|
88
96
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
97
|
+
if cleanup:
|
|
98
|
+
self.cursor.end()
|
|
99
|
+
self.cursor.erase(Direction.DOWN)
|
|
100
|
+
self.cursor.reset_mode()
|
|
101
|
+
self.cursor.writeln(os.linesep)
|
|
93
102
|
|
|
94
103
|
return keypress
|
|
95
104
|
|
|
@@ -123,32 +132,33 @@ class TUIComponent(ABC):
|
|
|
123
132
|
|
|
124
133
|
return selector
|
|
125
134
|
|
|
126
|
-
def write(self, obj: Any) -> None:
|
|
135
|
+
def write(self, obj: Any = "", end: str = "", markdown: bool = False) -> None:
|
|
127
136
|
"""Write the string representation of the object to the screen."""
|
|
128
|
-
self.terminal.echo(obj, end=
|
|
137
|
+
self.terminal.echo(obj, end=end, markdown=markdown)
|
|
129
138
|
|
|
130
|
-
def writeln(self, obj: Any) -> None:
|
|
139
|
+
def writeln(self, obj: Any = "", markdown: bool = False) -> None:
|
|
131
140
|
"""Write the string representation of the object to the screen, appending a new line."""
|
|
132
|
-
self.terminal.echo(obj)
|
|
141
|
+
self.terminal.echo(obj, markdown=markdown)
|
|
133
142
|
|
|
134
143
|
def invalidate(self) -> None:
|
|
135
144
|
"""Invalidate current TUI renderization."""
|
|
136
145
|
self.screen.clear()
|
|
137
146
|
self.cursor.save()
|
|
147
|
+
self.cursor.track()
|
|
138
148
|
self.render()
|
|
139
149
|
|
|
140
|
-
|
|
141
|
-
def execute(self) -> Optional[T | List[T]]:
|
|
150
|
+
def execute(self) -> Optional[T | list[T]]:
|
|
142
151
|
"""Execute the main TUI component flow."""
|
|
152
|
+
...
|
|
143
153
|
|
|
144
|
-
@abstractmethod
|
|
145
154
|
def render(self) -> None:
|
|
146
155
|
"""Renders the TUI component."""
|
|
156
|
+
...
|
|
147
157
|
|
|
148
|
-
@abstractmethod
|
|
149
158
|
def navbar(self, **kwargs) -> str:
|
|
150
159
|
"""Get the TUI component's navigation bar (optional)."""
|
|
160
|
+
...
|
|
151
161
|
|
|
152
|
-
@abstractmethod
|
|
153
162
|
def handle_keypress(self) -> Keyboard:
|
|
154
163
|
"""Handle a keyboard press."""
|
|
164
|
+
...
|
clitt/utils/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: hspylib-clitt
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.128
|
|
4
4
|
Summary: HsPyLib - CLI Terminal Tools
|
|
5
5
|
Home-page: https://github.com/yorevs/hspylib
|
|
6
6
|
Author: Hugo Saporetti Junior
|
|
@@ -40,7 +40,7 @@ Requires-Dist: emoji >=2.12.1
|
|
|
40
40
|
[](https://gitter.im/hspylib/community)
|
|
41
41
|
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=J5CDEFLF6M3H4)
|
|
42
42
|
[](LICENSE.md)
|
|
43
|
-
[](docs/CHANGELOG.md#unreleased)
|
|
44
44
|
[](https://github.com/yorevs/hspylib/actions/workflows/build-and-test.yml)
|
|
45
45
|
|
|
46
46
|
HsPyLib is not just a Python library; it's a gateway to elevating your programming experience to new heights. Built on
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
clitt/.version,sha256=
|
|
1
|
+
clitt/.version,sha256=zS8RbFHozJYPH22KqahZnGWGMPwyqvBv2UkxCUZ1WD8,8
|
|
2
2
|
clitt/__classpath__.py,sha256=S94uRWOt4GdJlnpFoBBDlaA6imnDOglyIBgWY6e9cTU,881
|
|
3
|
-
clitt/__init__.py,sha256=
|
|
3
|
+
clitt/__init__.py,sha256=9OJRINQIopriCmGP-_q2ZMvPpfe7ayiY6mLSdsVJJLk,184
|
|
4
4
|
clitt/__main__.py,sha256=rmAQE7_25DwTCXEGIwaQ1fFEfaPSLmuWQAH4UTFh92U,5320
|
|
5
5
|
clitt/welcome.txt,sha256=z72ySJw-1VQHvWmd8pZ95P6t4zEkIWGbqTRT83P2hJw,169
|
|
6
|
-
clitt/addons/__init__.py,sha256=
|
|
7
|
-
clitt/addons/appman/__init__.py,sha256=
|
|
6
|
+
clitt/addons/__init__.py,sha256=ilZoLmfA3Fyb_5hv5P-D9M12aIp8IAt3UglRDwtsk28,179
|
|
7
|
+
clitt/addons/appman/__init__.py,sha256=wXlayccAe1t42Um0b9AgemC_dYdcbeAV_S3dXoJHKLM,210
|
|
8
8
|
clitt/addons/appman/appman.py,sha256=c4-VqUullq0ZyJtQJ3etZsC-2Pa9gVc_RExA5HfhZMs,13153
|
|
9
9
|
clitt/addons/appman/appman_enums.py,sha256=p3ERhgc5iaJ_QmtRCwHHk9mzXQ_Ds1-s__vwYrwRVZY,871
|
|
10
|
-
clitt/addons/appman/templates/__init__.py,sha256=
|
|
10
|
+
clitt/addons/appman/templates/__init__.py,sha256=Ac-XdBiq7FCzRD3S1Wu52SV1gRZWidP2eptWYl7BTcc,173
|
|
11
11
|
clitt/addons/appman/templates/build.gradle.tpl,sha256=VQKs4r41xPr7P14PtQPt3alYCmNuXaGraaXbKB_FKkM,1817
|
|
12
12
|
clitt/addons/appman/templates/classpath.py.tpl,sha256=R60uLvVxeJ7nJCXCvav_9LAnDe5VOfJqWO-T1QAlwAc,397
|
|
13
13
|
clitt/addons/appman/templates/dependencies.hspd.tpl,sha256=bbVNU6XBm5QT28lvH7Bp_4nlXvoD-LwX5kGQ-CPhOEA,764
|
|
@@ -20,24 +20,24 @@ clitt/addons/appman/templates/run.sh.tpl,sha256=2xpuHjZP9-7j14dAA2CqPm4G2xtnuenf
|
|
|
20
20
|
clitt/addons/appman/templates/test_main.py.tpl,sha256=y5Bo0ku6FP67WjHfYUF4Kt9tdQ67MSlN6LgoF_NUm-U,1241
|
|
21
21
|
clitt/addons/appman/templates/usage.txt.tpl,sha256=R0e48HCeD7PDbWnX6HGIjz6gr_hBdp-zK6V42U1Aexw,217
|
|
22
22
|
clitt/addons/appman/templates/widget.py.tpl,sha256=-4q8hYP1Xdx8ttexeHuFnjMH_DoBANEoN9f59jzHDR4,1670
|
|
23
|
-
clitt/addons/widman/__init__.py,sha256=
|
|
23
|
+
clitt/addons/widman/__init__.py,sha256=byfMGgH7aR6vnj0i_B0etH7944OjJkGN2MhGnvPqYOs,223
|
|
24
24
|
clitt/addons/widman/widget.py,sha256=nQZCbUy-G0lpO4PMepSeTmJTECJgNY4bp2prQ5zzYlY,1919
|
|
25
25
|
clitt/addons/widman/widget_entry.py,sha256=KHYX_pL7ZNg3rtlG_GvypqPIPBqVzDljO5PhpcQw1JU,1357
|
|
26
26
|
clitt/addons/widman/widman.py,sha256=gxynZZiq9T2UPFp4x0V0i3Yk-XDDGQ3R-BbM02Z9O3E,5273
|
|
27
|
-
clitt/addons/widman/widgets/__init__.py,sha256=
|
|
27
|
+
clitt/addons/widman/widgets/__init__.py,sha256=b-Ysp0qUu6XpGm_F3_BgNKQAc5CqebmNKs2n1piW-fo,254
|
|
28
28
|
clitt/addons/widman/widgets/widget_free.py,sha256=s43aIRc_mlIvz4M2pGJOHE2qt3MDD_KXKGJht-7WMPY,3994
|
|
29
29
|
clitt/addons/widman/widgets/widget_punch.py,sha256=GQRJadedh_zxyhacH65FmKeIOQV2nMEBmahdEzhfB7c,10606
|
|
30
30
|
clitt/addons/widman/widgets/widget_send_msg.py,sha256=RqqD6ss7wJqw6vJzS5C9uqs3OhyOCXYb8d329_8O8hc,11057
|
|
31
31
|
clitt/addons/widman/widgets/widget_time_calc.py,sha256=fusZRgPqgSDhxNeiPK1vhul9Fz8PzIaj2cuxP-aFb5k,5036
|
|
32
|
-
clitt/core/__init__.py,sha256=
|
|
32
|
+
clitt/core/__init__.py,sha256=Tdbes9UmZhUGtIQh0gnUa0KwvTtRocM-wUQR2TJ302s,224
|
|
33
33
|
clitt/core/preferences.py,sha256=cbWjL2yfE59-T1vzTsXCrrRRsBJ4LHLqqESTI-ujsDc,3141
|
|
34
|
-
clitt/core/exception/__init__.py,sha256=
|
|
34
|
+
clitt/core/exception/__init__.py,sha256=B0VJVotxCIyab-tLuQsfIrvrh5PdF4NBL7KPBh181Rw,176
|
|
35
35
|
clitt/core/exception/exceptions.py,sha256=vfKRGmGX32qQksrcrej4ncPCqCt9smmtJa0vc8FLkn4,477
|
|
36
|
-
clitt/core/icons/__init__.py,sha256=
|
|
37
|
-
clitt/core/icons/emojis/__init__.py,sha256=
|
|
36
|
+
clitt/core/icons/__init__.py,sha256=zCerLw7qp4FGURlnwIoWZt3xBqfzGpt1pm3JWVT9R1Y,189
|
|
37
|
+
clitt/core/icons/emojis/__init__.py,sha256=NrAaWHK-rzxLwn9eHEke9FWA3_g934busx32l2esk0w,196
|
|
38
38
|
clitt/core/icons/emojis/emojis.py,sha256=fBxVIPfGRwzbmx6yGsX7oIpngiVwuQkxrmd-oAkK64Y,1110
|
|
39
39
|
clitt/core/icons/emojis/face_smiling.py,sha256=2NvJoMQ2q2VFBv2J2JrVw5UjWz7b6Eqh8VgORhbAfcM,1270
|
|
40
|
-
clitt/core/icons/font_awesome/__init__.py,sha256=
|
|
40
|
+
clitt/core/icons/font_awesome/__init__.py,sha256=UyhktRd48eIgpyUyCo3EeC-dbB4liDjPhxr8b7P9QjQ,325
|
|
41
41
|
clitt/core/icons/font_awesome/app_icons.py,sha256=zlD_AnwmrD0LKkd2Ej9jGmQPEa2TYGguvPbgfBUxuzM,1701
|
|
42
42
|
clitt/core/icons/font_awesome/awesome.py,sha256=JyyobxTZ9VVa8y_S07iLvJZWbWA671esav1-p5PKZ9Y,2242
|
|
43
43
|
clitt/core/icons/font_awesome/dashboard_icons.py,sha256=hdUQD55819mrV7z0Y_rJI4WiqgrWExjl3ULFabIf8Kc,3121
|
|
@@ -46,34 +46,34 @@ clitt/core/icons/font_awesome/game_icons.py,sha256=IMb1kxsbZKGIVmw0-XR904kDHaqPJ
|
|
|
46
46
|
clitt/core/icons/font_awesome/nav_icons.py,sha256=egiNnVot_diKYL5VFUI3sPTrBSt41F5iO-mpfPZKe20,1182
|
|
47
47
|
clitt/core/icons/font_awesome/trickplay_icons.py,sha256=mb_wXF3j3OhG_6CZyFbOltwwg-l_dyzmNg8OqAkOub8,1080
|
|
48
48
|
clitt/core/icons/font_awesome/widget_icons.py,sha256=y160guCrnRLHxUfKlMq6FS0zsTsJ-gcW1Vs-wnjIjKk,1025
|
|
49
|
-
clitt/core/term/__init__.py,sha256=
|
|
49
|
+
clitt/core/term/__init__.py,sha256=tRAaRvRDHhoYJ6_qvjf534pf9oWo2f3SOmGnWuxb_X0,215
|
|
50
50
|
clitt/core/term/commons.py,sha256=1qRiSDRmaIuT6ivVFUiXd4CU35QJbrVzJvBI-FLwAbo,3122
|
|
51
|
-
clitt/core/term/cursor.py,sha256=
|
|
51
|
+
clitt/core/term/cursor.py,sha256=99NbsU4qWSe29hc_QPLzxGE9JzfTyiDnVUm0GdzfQwk,6780
|
|
52
52
|
clitt/core/term/screen.py,sha256=V24gFKKgTj-aywpkeD1c5zc8cNb5EA4crvfW_bQAIlI,3328
|
|
53
|
-
clitt/core/term/terminal.py,sha256=
|
|
54
|
-
clitt/core/tui/__init__.py,sha256=
|
|
55
|
-
clitt/core/tui/tui_application.py,sha256=
|
|
56
|
-
clitt/core/tui/tui_component.py,sha256=
|
|
53
|
+
clitt/core/term/terminal.py,sha256=mZwkXNzjqHSMXHVx2R5V-56EPE4U0W7YZwMLHLr-mjw,7962
|
|
54
|
+
clitt/core/tui/__init__.py,sha256=ljsXx4BW1CM3TSiBo6SMr2_u4SbbhOH9pi3hBMQVugg,333
|
|
55
|
+
clitt/core/tui/tui_application.py,sha256=V2HvUYzSRSDquoPnj21uIIcXMiz58sWiYA_s7XL2OXk,1650
|
|
56
|
+
clitt/core/tui/tui_component.py,sha256=f4G4Pya9Foc1mlE8sUYHKZ5caqL-R7hyGXu8SHAY8SE,5134
|
|
57
57
|
clitt/core/tui/tui_preferences.py,sha256=QnPLgSg51tQZVKN4p7EpYvzXA3DadOfTmhEKZ6-iWUA,3109
|
|
58
|
-
clitt/core/tui/line_input/__init__.py,sha256=
|
|
59
|
-
clitt/core/tui/line_input/keyboard_input.py,sha256=
|
|
58
|
+
clitt/core/tui/line_input/__init__.py,sha256=g8Nx76IvhLqu3MRoCKCDPbZBGDuznav3ILI2yUnNABY,204
|
|
59
|
+
clitt/core/tui/line_input/keyboard_input.py,sha256=P5OHmhU-HReIDYllhHhlNGfkJEO0gXh16WPMtBMs4d8,11686
|
|
60
60
|
clitt/core/tui/line_input/line_input.py,sha256=eFGWTabP27WRakOmpdqrDhJ3DrX9n05EHKWyhtzp37g,1242
|
|
61
|
-
clitt/core/tui/mchoose/__init__.py,sha256=
|
|
61
|
+
clitt/core/tui/mchoose/__init__.py,sha256=Xb1kxQqLTo_sOMy_RNibr3cDmMhg_raDMX-9T_icRF0,195
|
|
62
62
|
clitt/core/tui/mchoose/mchoose.py,sha256=oyl6esUPgC3j0DrM31Pceb3TDcvprt-D2v8ncd02Asc,1283
|
|
63
63
|
clitt/core/tui/mchoose/menu_choose.py,sha256=IJJQKcfvHRSRI59txSDILHDHLgj3IPo18EJ1_LikAg4,7135
|
|
64
|
-
clitt/core/tui/mdashboard/__init__.py,sha256=
|
|
64
|
+
clitt/core/tui/mdashboard/__init__.py,sha256=MjNyFIXhSaZ2M7-hOsENWEBcEQDWgXF0RawdjSWTZkw,253
|
|
65
65
|
clitt/core/tui/mdashboard/dashboard_builder.py,sha256=IU2GtrKUbtqkEZSfvCnxdRyodcEmTu5M02LFYOEv0sc,1659
|
|
66
66
|
clitt/core/tui/mdashboard/dashboard_item.py,sha256=KgVxz1oU2iBF5Fi-_ST4ySjBO42fj-DHZ0gO2CA7L8k,887
|
|
67
67
|
clitt/core/tui/mdashboard/mdashboard.py,sha256=UjPPXqTIuO245POzAKprhGo90T5YpvlAJ_lKkAFjWnc,891
|
|
68
68
|
clitt/core/tui/mdashboard/menu_dashboard.py,sha256=Npf-bXOQa_tTQ33RlfZ6TBse0gLfEzT2Yo8zKZ9YcQo,5611
|
|
69
|
-
clitt/core/tui/menu/__init__.py,sha256=
|
|
69
|
+
clitt/core/tui/menu/__init__.py,sha256=78nKek_1_B1mfN-2JoVCAUlEoQ5wgHazgbwhNGPAiPw,286
|
|
70
70
|
clitt/core/tui/menu/tui_menu.py,sha256=I7uqGD3-028xnNq-rigA3SmS9TDynbF9BQf7qL_r_xk,3573
|
|
71
71
|
clitt/core/tui/menu/tui_menu_action.py,sha256=LC7ljC-d2g7LN6GeHEdZrGyuQUj8FApkeEW3JoRfxEk,1536
|
|
72
72
|
clitt/core/tui/menu/tui_menu_factory.py,sha256=b26JkaBnAAUN_3xQ6GjgRVvljnDBLNouhk9zwyAXpEY,4589
|
|
73
73
|
clitt/core/tui/menu/tui_menu_item.py,sha256=fNU7XC8-fPD7ggOncs5kMnHThiiK9nN_M_1FuvXoKq0,7441
|
|
74
74
|
clitt/core/tui/menu/tui_menu_ui.py,sha256=jND2IWumKooCDuRPzz37YcVOeU9ViL9ZlHoWRptTv4Y,3254
|
|
75
75
|
clitt/core/tui/menu/tui_menu_view.py,sha256=jX1p50dgKLU7JvJL5FJPzI_bLxWzZxjPXem3m9wf2MU,1921
|
|
76
|
-
clitt/core/tui/minput/__init__.py,sha256=
|
|
76
|
+
clitt/core/tui/minput/__init__.py,sha256=gJK23gKlhDTkIzEXUafAD-Sco8KGcrUl4vJL4ioZ6yE,338
|
|
77
77
|
clitt/core/tui/minput/access_type.py,sha256=91d_Wxj41pLrv2xs6LDGrSvtYoVHPx5MreXGthN2BFo,637
|
|
78
78
|
clitt/core/tui/minput/field_builder.py,sha256=Zn-JzTHasHtftF_s6N-ljdhxlyLJwqSSeTtj0KPqLRU,4372
|
|
79
79
|
clitt/core/tui/minput/form_builder.py,sha256=xNU62G_g29CpOU5naghvfqaPfb6MlalPxTzJwGD6bXw,2866
|
|
@@ -83,15 +83,15 @@ clitt/core/tui/minput/input_validator.py,sha256=7Cof7ZDIjcl8ixrFALZIy6SCe3MZH4Sd
|
|
|
83
83
|
clitt/core/tui/minput/menu_input.py,sha256=IujdjQaM0QGFziXU5U63bnaZL8JXJw9atckaG3a9wfw,12724
|
|
84
84
|
clitt/core/tui/minput/minput.py,sha256=y_QdSrx0yGH34Iowx_qlqprbWydGmEuh6qDyGIDnqzY,1608
|
|
85
85
|
clitt/core/tui/minput/minput_utils.py,sha256=DgcJyo_NDBp3J5fuWfNzX8JOdSFaekBL-zZqCCPldWA,5266
|
|
86
|
-
clitt/core/tui/mselect/__init__.py,sha256=
|
|
86
|
+
clitt/core/tui/mselect/__init__.py,sha256=fDiPllenssuSQ3yNu21QZX2PhihNhSDVw53HP70atNY,195
|
|
87
87
|
clitt/core/tui/mselect/menu_select.py,sha256=ltoyB3pEOBPRXrNKMxW6KbaAgcQNIb9y1ZnqyTNMeAc,6176
|
|
88
88
|
clitt/core/tui/mselect/mselect.py,sha256=_UagPoWdDxde5MZvcxoCwi4twpK_nMFxtwmLVG20Yxo,1115
|
|
89
|
-
clitt/core/tui/table/__init__.py,sha256=
|
|
89
|
+
clitt/core/tui/table/__init__.py,sha256=djzG7Kpr4wPuKk0u5ZPv6HfZbOc1GNSu28s5Hdsn2HQ,200
|
|
90
90
|
clitt/core/tui/table/table_enums.py,sha256=9SoecnDrd_X9UmG9wA8mJsfyxtVdZm8LgmTZ51j2yY4,1281
|
|
91
91
|
clitt/core/tui/table/table_renderer.py,sha256=PR8HXYCHQdFs7JDQ-AInblV7HjwIEkRIGl28pdy8yeY,12799
|
|
92
|
-
clitt/utils/__init__.py,sha256=
|
|
92
|
+
clitt/utils/__init__.py,sha256=Ma0-N9Y64WPHfbLA4PrZy_YgJXSZdrJQfr0yaEOVPhE,166
|
|
93
93
|
clitt/utils/git_utils.py,sha256=B-QZtRpxAXa3Cw3im5qhJTla0LrlWQouMq_-GR8SOHU,2392
|
|
94
|
-
hspylib_clitt-0.9.
|
|
95
|
-
hspylib_clitt-0.9.
|
|
96
|
-
hspylib_clitt-0.9.
|
|
97
|
-
hspylib_clitt-0.9.
|
|
94
|
+
hspylib_clitt-0.9.128.dist-info/METADATA,sha256=KU9DLFaEhDsZET4YunWDcqiGXPi_dMxPuVovQ4fBz74,13061
|
|
95
|
+
hspylib_clitt-0.9.128.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
|
|
96
|
+
hspylib_clitt-0.9.128.dist-info/top_level.txt,sha256=4aPEfxPvYp14dwV0l6cjCd90nbDutt1Yr27ZqCunZLI,11
|
|
97
|
+
hspylib_clitt-0.9.128.dist-info/RECORD,,
|
|
File without changes
|