hspylib-clitt 0.9.120__tar.gz → 0.9.122__tar.gz

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.

Files changed (104) hide show
  1. {hspylib-clitt-0.9.120/hspylib_clitt.egg-info → hspylib_clitt-0.9.122}/PKG-INFO +2 -2
  2. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/README.md +1 -1
  3. hspylib_clitt-0.9.122/clitt/.version +1 -0
  4. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/__init__.py +2 -2
  5. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/__init__.py +2 -2
  6. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/__init__.py +2 -2
  7. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/__init__.py +2 -2
  8. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/widman/__init__.py +2 -2
  9. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/widman/widgets/__init__.py +2 -2
  10. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/__init__.py +2 -2
  11. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/exception/__init__.py +2 -2
  12. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/__init__.py +2 -2
  13. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/emojis/__init__.py +2 -2
  14. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/font_awesome/__init__.py +2 -2
  15. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/term/__init__.py +2 -2
  16. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/__init__.py +2 -2
  17. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/line_input/__init__.py +2 -2
  18. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/line_input/keyboard_input.py +104 -61
  19. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/mchoose/__init__.py +2 -2
  20. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/mdashboard/__init__.py +2 -2
  21. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/menu/__init__.py +2 -2
  22. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/minput/__init__.py +2 -2
  23. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/minput/menu_input.py +7 -15
  24. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/mselect/__init__.py +2 -2
  25. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/table/__init__.py +2 -2
  26. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/utils/__init__.py +2 -2
  27. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122/hspylib_clitt.egg-info}/PKG-INFO +2 -2
  28. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/hspylib_clitt.egg-info/top_level.txt +0 -1
  29. hspylib-clitt-0.9.120/clitt/.version +0 -1
  30. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/MANIFEST.in +0 -0
  31. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/__classpath__.py +0 -0
  32. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/__main__.py +0 -0
  33. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/appman.py +0 -0
  34. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/appman_enums.py +0 -0
  35. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/build.gradle.tpl +0 -0
  36. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/classpath.py.tpl +0 -0
  37. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/dependencies.hspd.tpl +0 -0
  38. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/gitignore.tpl +0 -0
  39. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/main.py.tpl +0 -0
  40. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/main_qt.py.tpl +0 -0
  41. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/main_qt_view.py.tpl +0 -0
  42. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/main_qt_view.ui.tpl +0 -0
  43. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/run.sh.tpl +0 -0
  44. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/test_main.py.tpl +0 -0
  45. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/usage.txt.tpl +0 -0
  46. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/appman/templates/widget.py.tpl +0 -0
  47. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/widman/widget.py +0 -0
  48. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/widman/widget_entry.py +0 -0
  49. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/widman/widgets/widget_free.py +0 -0
  50. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/widman/widgets/widget_punch.py +0 -0
  51. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/widman/widgets/widget_send_msg.py +0 -0
  52. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/widman/widgets/widget_time_calc.py +0 -0
  53. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/addons/widman/widman.py +0 -0
  54. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/exception/exceptions.py +0 -0
  55. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/emojis/emojis.py +0 -0
  56. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/emojis/face_smiling.py +0 -0
  57. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/font_awesome/app_icons.py +0 -0
  58. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/font_awesome/awesome.py +0 -0
  59. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/font_awesome/dashboard_icons.py +0 -0
  60. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/font_awesome/form_icons.py +0 -0
  61. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/font_awesome/game_icons.py +0 -0
  62. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/font_awesome/nav_icons.py +0 -0
  63. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/font_awesome/trickplay_icons.py +0 -0
  64. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/icons/font_awesome/widget_icons.py +0 -0
  65. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/preferences.py +0 -0
  66. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/term/commons.py +0 -0
  67. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/term/cursor.py +0 -0
  68. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/term/screen.py +0 -0
  69. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/term/terminal.py +0 -0
  70. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/line_input/line_input.py +0 -0
  71. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/mchoose/mchoose.py +0 -0
  72. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/mchoose/menu_choose.py +0 -0
  73. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/mdashboard/dashboard_builder.py +0 -0
  74. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/mdashboard/dashboard_item.py +0 -0
  75. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/mdashboard/mdashboard.py +0 -0
  76. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/mdashboard/menu_dashboard.py +0 -0
  77. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/menu/tui_menu.py +0 -0
  78. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/menu/tui_menu_action.py +0 -0
  79. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/menu/tui_menu_factory.py +0 -0
  80. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/menu/tui_menu_item.py +0 -0
  81. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/menu/tui_menu_ui.py +0 -0
  82. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/menu/tui_menu_view.py +0 -0
  83. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/minput/access_type.py +0 -0
  84. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/minput/field_builder.py +0 -0
  85. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/minput/form_builder.py +0 -0
  86. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/minput/form_field.py +0 -0
  87. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/minput/input_type.py +0 -0
  88. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/minput/input_validator.py +0 -0
  89. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/minput/minput.py +0 -0
  90. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/minput/minput_utils.py +0 -0
  91. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/mselect/menu_select.py +0 -0
  92. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/mselect/mselect.py +0 -0
  93. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/table/table_enums.py +0 -0
  94. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/table/table_renderer.py +0 -0
  95. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/tui_application.py +0 -0
  96. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/tui_component.py +0 -0
  97. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/core/tui/tui_preferences.py +0 -0
  98. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/utils/git_utils.py +0 -0
  99. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/clitt/welcome.txt +0 -0
  100. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/hspylib_clitt.egg-info/SOURCES.txt +0 -0
  101. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/hspylib_clitt.egg-info/dependency_links.txt +0 -0
  102. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/hspylib_clitt.egg-info/requires.txt +0 -0
  103. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/setup.cfg +0 -0
  104. {hspylib-clitt-0.9.120 → hspylib_clitt-0.9.122}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hspylib-clitt
3
- Version: 0.9.120
3
+ Version: 0.9.122
4
4
  Summary: HsPyLib - CLI Terminal Tools
5
5
  Home-page: https://github.com/yorevs/hspylib
6
6
  Author: Hugo Saporetti Junior
@@ -35,7 +35,7 @@ Requires-Dist: urllib3<2.0.0
35
35
  ## Create professional CLI applications
36
36
 
37
37
  [![License](https://badgen.net/badge/license/MIT/gray)](LICENSE.md)
38
- [![Release](https://badgen.net/badge/release/v0.9.120/gray)](CHANGELOG.md#unreleased)
38
+ [![Release](https://badgen.net/badge/release/v0.9.122/gray)](CHANGELOG.md#unreleased)
39
39
  [![PyPi](https://badgen.net/badge/icon/python?icon=pypi&label)](https://pypi.org/project/hspylib-clitt)
40
40
  [![GitHub](https://badgen.net/badge/icon/github?icon=github&label)](https://github.com/yorevs/hspylib)
41
41
  [![Gitter](https://badgen.net/badge/icon/gitter?icon=gitter&label)](https://gitter.im/hspylib/community)
@@ -3,7 +3,7 @@
3
3
  ## Create professional CLI applications
4
4
 
5
5
  [![License](https://badgen.net/badge/license/MIT/gray)](LICENSE.md)
6
- [![Release](https://badgen.net/badge/release/v0.9.120/gray)](CHANGELOG.md#unreleased)
6
+ [![Release](https://badgen.net/badge/release/v0.9.122/gray)](CHANGELOG.md#unreleased)
7
7
  [![PyPi](https://badgen.net/badge/icon/python?icon=pypi&label)](https://pypi.org/project/hspylib-clitt)
8
8
  [![GitHub](https://badgen.net/badge/icon/github?icon=github&label)](https://github.com/yorevs/hspylib)
9
9
  [![Gitter](https://badgen.net/badge/icon/gitter?icon=gitter&label)](https://gitter.im/hspylib/community)
@@ -0,0 +1 @@
1
+ 0.9.122
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
4
4
  #
5
5
  # Package: main.clitt
6
6
  """Package initialization."""
@@ -10,4 +10,4 @@ __all__ = [
10
10
  'core',
11
11
  'utils'
12
12
  ]
13
- __version__ = '0.9.120'
13
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
12
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
13
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
4
4
  #
5
5
  # Package: main.clitt.addons.appman.templates
6
6
  """Package initialization."""
@@ -8,4 +8,4 @@
8
8
  __all__ = [
9
9
 
10
10
  ]
11
- __version__ = '0.9.120'
11
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
14
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
14
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
15
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
11
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
12
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
12
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
18
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
14
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
20
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
12
+ __version__ = '0.9.122'
@@ -13,15 +13,14 @@
13
13
  Copyright·(c)·2024,·HSPyLib
14
14
  """
15
15
 
16
- from typing import Dict, List, Optional
17
-
18
- import pyperclip
19
- from hspylib.modules.cli.keyboard import Keyboard
20
- from hspylib.modules.cli.vt100.vt_color import VtColor
16
+ from typing import Optional
21
17
 
22
18
  from clitt.core.term.commons import Direction
23
19
  from clitt.core.term.terminal import Terminal
24
20
  from clitt.core.tui.tui_component import TUIComponent
21
+ from hspylib.core.tools.dict_tools import get_or_default
22
+ from hspylib.modules.cli.keyboard import Keyboard
23
+ from hspylib.modules.cli.vt100.vt_color import VtColor
25
24
 
26
25
 
27
26
  class KeyboardInput(TUIComponent):
@@ -31,56 +30,49 @@ class KeyboardInput(TUIComponent):
31
30
  _HIST_INDEX: int = 0
32
31
 
33
32
  # Dict containing all previously accepted inputs.
34
- _HISTORY: Dict[int, str] = {0: ""}
33
+ _HISTORY: list[str] = [""]
35
34
 
36
35
  # Stack containing current input changes.
37
- _UNDO_HISTORY: List[str] = []
36
+ _UNDO_HISTORY: list[str] = []
38
37
 
39
38
  # Stack containing current input reverts.
40
- _REDO_HISTORY: List[str] = []
39
+ _REDO_HISTORY: list[str] = []
41
40
 
42
- @staticmethod
43
- def preload_history(history: List[str]) -> None:
44
- """Preload the input with the provided dictionary."""
41
+ @classmethod
42
+ def preload_history(cls, history: list[str]) -> None:
43
+ """Preload the input with the provided dictionary.
44
+ :param history: The history keyboard inputs.
45
+ """
45
46
  for entry in history:
46
- KeyboardInput._add_history(entry)
47
- KeyboardInput._HIST_INDEX = 0
47
+ cls._add_history(entry)
48
+ cls._HIST_INDEX = max(0, len(cls._HISTORY))
48
49
 
49
- @staticmethod
50
- def forget_history() -> None:
50
+ @classmethod
51
+ def forget_history(cls) -> None:
51
52
  """Forget all input history entries."""
52
- tmp: str = KeyboardInput._HISTORY[0]
53
- KeyboardInput._HISTORY.clear()
54
- KeyboardInput._HISTORY[0] = tmp
53
+ tmp: str = cls._HISTORY[-1]
54
+ cls._HISTORY.clear()
55
+ cls._HISTORY.append(tmp)
55
56
 
56
- @staticmethod
57
- def history() -> List[str]:
57
+ @classmethod
58
+ def history(cls) -> list[str]:
58
59
  """Return the actual input history."""
59
- return list(filter(lambda v: v, KeyboardInput._HISTORY.values()))
60
+ return list(filter(lambda v: v, cls._HISTORY))
60
61
 
61
- @staticmethod
62
- def _add_history(input_text: str) -> None:
62
+ @classmethod
63
+ def _add_history(cls, input_text: str) -> None:
63
64
  """Add the following input to the history set.
64
65
  :param input_text: The input text to add to the history.
65
66
  """
66
- if input_text and input_text not in list(KeyboardInput._HISTORY.values())[1:]:
67
- idx: int = max(1, len(KeyboardInput._HISTORY))
68
- KeyboardInput._HISTORY[idx] = input_text
69
- KeyboardInput._HIST_INDEX = idx
70
-
71
- @classmethod
72
- def _next_in_history(cls) -> Optional[str]:
73
- index = min(len(cls._HISTORY) - 1, cls._HIST_INDEX + 1)
74
- text = cls._HISTORY.get(index, "")
75
- cls._HIST_INDEX = index
76
- return text or cls._HISTORY[0]
77
-
78
- @classmethod
79
- def _prev_in_history(cls) -> Optional[str]:
80
- index = max(0, cls._HIST_INDEX - 1)
81
- text = cls._HISTORY.get(index, "")
82
- cls._HIST_INDEX = index
83
- return text or cls._HISTORY[0]
67
+ if cls._HISTORY[-1] != '':
68
+ cls._HISTORY.append('')
69
+ if input_text:
70
+ idx: int = max(1, len(cls._HISTORY))
71
+ if input_text in cls._HISTORY:
72
+ idx -= 1
73
+ cls._HISTORY.remove(input_text)
74
+ cls._HISTORY.insert(idx - 1, input_text)
75
+ cls._HIST_INDEX = idx
84
76
 
85
77
  @classmethod
86
78
  def _undo(cls) -> Optional[str]:
@@ -104,18 +96,21 @@ class KeyboardInput(TUIComponent):
104
96
  navbar_enable: bool = False,
105
97
  ):
106
98
  super().__init__(prompt)
107
- self._prompt_color = prompt_color
108
- self._text_color = text_color
109
- self._navbar_enable = navbar_enable
110
- self._input_index = 0
99
+ self._prompt_color: VtColor = prompt_color
100
+ self._text_color: VtColor = text_color
101
+ self._navbar_enable: bool = navbar_enable
102
+ self._input_index: int = 0
111
103
  self._input_text: str = ""
112
- self._HISTORY[0] = ""
104
+ self._tab_complete: str = ""
105
+ self._HISTORY[-1] = ""
106
+ self._HIST_INDEX = max(0, len(self._HISTORY) - 1)
113
107
 
114
108
  @property
115
109
  def length(self) -> int:
116
110
  return len(self._input_text) if self._input_text else 0
117
111
 
118
112
  def _prepare_render(self, auto_wrap: bool = True, show_cursor: bool = True) -> None:
113
+ self.screen.add_watcher(self.invalidate)
119
114
  Terminal.set_auto_wrap(auto_wrap)
120
115
  Terminal.set_show_cursor(show_cursor)
121
116
  self.cursor.save()
@@ -135,7 +130,12 @@ class KeyboardInput(TUIComponent):
135
130
 
136
131
  return self._input_text
137
132
 
138
- def _loop(self, break_keys: List[Keyboard] = None) -> Keyboard:
133
+ def reset(self) -> None:
134
+ """Reset the contents of the input."""
135
+ self._input_index = 0
136
+ self._update_input("")
137
+
138
+ def _loop(self, break_keys: list[Keyboard] = None) -> Keyboard:
139
139
  break_keys = break_keys or Keyboard.break_keys()
140
140
  keypress = Keyboard.VK_NONE
141
141
 
@@ -154,7 +154,8 @@ class KeyboardInput(TUIComponent):
154
154
  self.cursor.restore()
155
155
  self.write(f"{self._prompt_color.placeholder}{self.title}{self._text_color.placeholder}")
156
156
  self.write(self._input_text)
157
- self._terminal.cursor.erase(Direction.RIGHT)
157
+ # Write the tab complete option
158
+ self._write_hint()
158
159
  self._re_render = False
159
160
  self._set_cursor_pos()
160
161
  Terminal.set_show_cursor()
@@ -175,31 +176,27 @@ class KeyboardInput(TUIComponent):
175
176
  self._update_input(
176
177
  self._input_text[: self._input_index] + self._input_text[1 + self._input_index :]
177
178
  )
178
- case Keyboard.VK_CTRL_F: # Forget history
179
+ case Keyboard.VK_CTRL_R:
180
+ self.reset()
181
+ case Keyboard.VK_CTRL_F:
179
182
  self.forget_history()
180
- case Keyboard.VK_CTRL_P: # Paste from clipboard
181
- text = (pyperclip.paste() or "").replace("\n", "↵")
182
- self._update_input(
183
- self._input_text[: self._input_index] + text + self._input_text[self._input_index :]
184
- )
185
- self._input_index += len(text)
186
- case Keyboard.VK_CTRL_R: # Reset contents
187
- self._input_index = 0
188
- self._update_input("")
189
183
  case Keyboard.VK_LEFT:
190
184
  self._input_index = max(0, self._input_index - 1)
191
185
  case Keyboard.VK_RIGHT:
192
186
  self._input_index = min(self.length, self._input_index + 1)
193
187
  case Keyboard.VK_UP:
194
- self._input_text = self._next_in_history()
188
+ self._input_text = self._prev_in_history()
195
189
  self._input_index = self.length
196
190
  case Keyboard.VK_DOWN:
197
- self._input_text = self._prev_in_history()
191
+ self._input_text = self._next_in_history()
198
192
  self._input_index = self.length
199
193
  case Keyboard.VK_HOME:
200
194
  self._input_index = 0
201
195
  case Keyboard.VK_END:
202
196
  self._input_index = self.length
197
+ case Keyboard.VK_TAB:
198
+ self._update_input(self._input_text + self._tab_complete)
199
+ self._input_index = self.length
203
200
  case _ as key if key.val.isprintable():
204
201
  self._update_input(
205
202
  self._input_text[: self._input_index] + key.val + self._input_text[self._input_index :]
@@ -224,6 +221,52 @@ class KeyboardInput(TUIComponent):
224
221
  :param text: The text to be set.
225
222
  """
226
223
  self._UNDO_HISTORY.append(self._input_text)
227
- self._HISTORY[0] = text if text not in self._HISTORY else self._input_text
224
+ self._HISTORY[-1] = text if text not in self._HISTORY else self._input_text
228
225
  self._input_text = text
226
+ self._HIST_INDEX = max(0, len(self._HISTORY) - 1)
229
227
  return text
228
+
229
+ def _next_in_history(self) -> str:
230
+ """Return the next input in history."""
231
+ edt_text: str = self._HISTORY[-1]
232
+ filtered: list[str] = list(filter(lambda h: h.lower().startswith(edt_text.lower()), self._HISTORY))
233
+ if edt_text in filtered:
234
+ edt_idx = filtered.index(edt_text)
235
+ index = min(edt_idx, self._HIST_INDEX + 1)
236
+ text = get_or_default(filtered, index, None) or filtered[-1]
237
+ self._HIST_INDEX = filtered.index(text)
238
+ return text
239
+ return edt_text
240
+
241
+ def _prev_in_history(self) -> str:
242
+ """Return the previous input in history."""
243
+ edt_text: str = self._HISTORY[-1]
244
+ filtered: list[str] = list(filter(lambda h: h.lower().startswith(edt_text.lower()), self._HISTORY))
245
+ if edt_text in filtered:
246
+ edt_idx = filtered.index(edt_text) - 1
247
+ index = max(0, min(edt_idx, self._HIST_INDEX - 1))
248
+ text = get_or_default(filtered, index, None) or filtered[-1]
249
+ self._HIST_INDEX = filtered.index(text)
250
+ return text
251
+ return edt_text
252
+
253
+ def _write_hint(self) -> None:
254
+ """TODO """
255
+ edt_text: str = self._input_text
256
+ filtered: list[str] = list(filter(lambda h: h.startswith(edt_text), self._HISTORY))
257
+ hint: str = ''
258
+
259
+ if edt_text and edt_text in filtered:
260
+ edt_idx = filtered.index(edt_text) - 1
261
+ index = max(0, min(edt_idx, self._HIST_INDEX))
262
+ hint: str = get_or_default(filtered, index, '') or filtered[-1]
263
+ if hint and (hint := hint[len(edt_text):]):
264
+ self.write(f"%GRAY%{hint}%NC%")
265
+ self._terminal.cursor.erase(Direction.DOWN)
266
+ self.cursor.move(len(hint), Direction.LEFT)
267
+ else:
268
+ self._terminal.cursor.erase(Direction.DOWN)
269
+ else:
270
+ self._terminal.cursor.erase(Direction.DOWN)
271
+
272
+ self._tab_complete = hint
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
12
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
14
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
16
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
19
+ __version__ = '0.9.122'
@@ -12,6 +12,12 @@
12
12
 
13
13
  Copyright·(c)·2024,·HSPyLib
14
14
  """
15
+ import re
16
+ from functools import reduce
17
+ from operator import add
18
+ from time import sleep
19
+ from typing import List, Optional
20
+
15
21
  from clitt.core.icons.font_awesome.form_icons import FormIcons
16
22
  from clitt.core.icons.font_awesome.nav_icons import NavIcons
17
23
  from clitt.core.term.commons import Direction, get_cursor_position
@@ -22,17 +28,10 @@ from clitt.core.tui.minput.form_field import FormField
22
28
  from clitt.core.tui.minput.input_type import InputType
23
29
  from clitt.core.tui.minput.minput_utils import MASK_SYMBOLS, VALUE_SEPARATORS
24
30
  from clitt.core.tui.tui_component import TUIComponent
25
- from functools import reduce
26
31
  from hspylib.core.exception.exceptions import InvalidInputError, InvalidStateError
27
32
  from hspylib.core.namespace import Namespace
28
33
  from hspylib.core.tools.text_tools import xstr
29
34
  from hspylib.modules.cli.keyboard import Keyboard
30
- from operator import add
31
- from time import sleep
32
- from typing import List, Optional
33
-
34
- import pyperclip
35
- import re
36
35
 
37
36
 
38
37
  class MenuInput(TUIComponent):
@@ -100,7 +99,7 @@ class MenuInput(TUIComponent):
100
99
  f"%EOL%{NavIcons.POINTER} %GREEN%{self.cur_field.tooltip or f'the {self.cur_field.label.lower()}'}%NC%"
101
100
  f"%EOL%{self.prefs.navbar_color.placeholder}%EOL%"
102
101
  f"[Enter] Submit [{self.NAV_ICONS}] "
103
- f"Navigate [{NavIcons.TAB}] Next [Space] Toggle [^P] Paste [Esc] Quit %NC%"
102
+ f"Navigate [{NavIcons.TAB}] Next [Space] Toggle [Esc] Quit %NC%"
104
103
  )
105
104
 
106
105
  def handle_keypress(self) -> Keyboard:
@@ -119,8 +118,6 @@ class MenuInput(TUIComponent):
119
118
  self._display_error("This field is read only !")
120
119
  else:
121
120
  self._handle_backspace()
122
- case Keyboard.VK_CTRL_P:
123
- self._handle_ctrl_p()
124
121
  case Keyboard.VK_ENTER:
125
122
  return self._handle_enter()
126
123
  case _ as key if key.isalnum() or key.ispunct() or key == Keyboard.VK_SPACE:
@@ -201,11 +198,6 @@ class MenuInput(TUIComponent):
201
198
  elif not self.cur_field.can_write():
202
199
  self._display_error("This field is read only !")
203
200
 
204
- def _handle_ctrl_p(self) -> None:
205
- """Handle 'ctrl + p' press. Paste content from clipboard."""
206
- for c in pyperclip.paste():
207
- self._handle_input(Keyboard.of_value(c))
208
-
209
201
  def _set_cursor_pos(self) -> None:
210
202
  """Set the cursor at the right position according to the ATB index."""
211
203
  pos = self.positions[self.tab_index]
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
12
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
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.120'
12
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.120
3
+ # hspylib-clitt v0.9.122
4
4
  #
5
5
  # Package: main.clitt.utils
6
6
  """Package initialization."""
@@ -8,4 +8,4 @@
8
8
  __all__ = [
9
9
  'git_utils'
10
10
  ]
11
- __version__ = '0.9.120'
11
+ __version__ = '0.9.122'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hspylib-clitt
3
- Version: 0.9.120
3
+ Version: 0.9.122
4
4
  Summary: HsPyLib - CLI Terminal Tools
5
5
  Home-page: https://github.com/yorevs/hspylib
6
6
  Author: Hugo Saporetti Junior
@@ -35,7 +35,7 @@ Requires-Dist: urllib3<2.0.0
35
35
  ## Create professional CLI applications
36
36
 
37
37
  [![License](https://badgen.net/badge/license/MIT/gray)](LICENSE.md)
38
- [![Release](https://badgen.net/badge/release/v0.9.120/gray)](CHANGELOG.md#unreleased)
38
+ [![Release](https://badgen.net/badge/release/v0.9.122/gray)](CHANGELOG.md#unreleased)
39
39
  [![PyPi](https://badgen.net/badge/icon/python?icon=pypi&label)](https://pypi.org/project/hspylib-clitt)
40
40
  [![GitHub](https://badgen.net/badge/icon/github?icon=github&label)](https://github.com/yorevs/hspylib)
41
41
  [![Gitter](https://badgen.net/badge/icon/gitter?icon=gitter&label)](https://gitter.im/hspylib/community)
@@ -1 +0,0 @@
1
- 0.9.120