grmenu 0.1.4 → 0.1.6
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.
- checksums.yaml +4 -4
- data/GRmenu.rb +581 -104
- data/README.md +223 -125
- data/data/borders.json +85 -0
- data/data/colors.json +16 -0
- data/data/fonts.json +3005 -0
- metadata +9 -6
data/README.md
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
# GRmenu
|
|
3
|
+
# GRmenu (Ruby)
|
|
4
4
|
|
|
5
|
-
**Menús
|
|
5
|
+
**Menús interactivos por teclado para terminal en modo TTY crudo, con soporte para Banners ASCII 3D, estilos y colores personalizados**
|
|
6
6
|
|
|
7
7
|
Flechas arriba/abajo para moverte · `Enter` para elegir · `q` para salir
|
|
8
8
|
|
|
9
9
|
[](https://badge.fury.io/rb/grmenu)
|
|
10
|
-
[](https://pypi.org/project/grmenu/)
|
|
11
|
-
[](https://www.ruby-lang.org)
|
|
12
|
-
[](https://pypi.org/project/grmenu/)
|
|
13
10
|
[](LICENSE)
|
|
14
|
-
[](https://github.com/JoseEduardoGR/GRmenu/stargazers)
|
|
11
|
+
[](https://github.com/JoseEduardoGR/GRmenu)
|
|
16
12
|
|
|
17
13
|
</div>
|
|
18
14
|
|
|
@@ -20,84 +16,189 @@ Flechas arriba/abajo para moverte · `Enter` para elegir · `q` para salir
|
|
|
20
16
|
|
|
21
17
|
## ✨ Características
|
|
22
18
|
|
|
23
|
-
- 🎮 **Navegación con flechas** — arriba/abajo para moverte, `Enter` para ejecutar, `q` para salir
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
19
|
+
- 🎮 **Navegación con flechas** — arriba/abajo para moverte, `Enter` para ejecutar, `q` para salir.
|
|
20
|
+
- 🔤 **10 Fuentes ASCII 3D para Banners** — fuentes tridimensionales (ANSI Shadow, Slant, Doom, Graffiti, Modular, Wire, Block, Stars, etc.).
|
|
21
|
+
- 🎨 **20 estilos de borde** — desde ASCII clásico hasta caracteres Unicode dobles, curvas redondeadas y bloques.
|
|
22
|
+
- 🌈 **Paleta de colores completa** — personalización individual de marco, título, banner, subtítulo, divisores, opciones y foco activo con 2 niveles de brillo.
|
|
23
|
+
- 📐 **Centrado simétrico automático** — alinea y centra automáticamente subtítulos y menús de opciones respecto al ancho de banners grandes.
|
|
24
|
+
- 🛠️ **Helpers nativos en modo crudo** — `clear_screen`, `continue`, `banner`, `div` y `help` sin subprocesos lentos del sistema.
|
|
25
|
+
- 💻 **100% Multiplataforma** — compatible con Linux, macOS y Windows (PowerShell, CMD, Windows Terminal, VS Code).
|
|
26
|
+
- 📦 **Cero dependencias externas** — utiliza únicamente la librería estándar `io/console`.
|
|
31
27
|
|
|
32
28
|
---
|
|
33
29
|
|
|
34
30
|
## 📦 Instalación
|
|
35
31
|
|
|
36
|
-
### Ruby (RubyGems)
|
|
37
|
-
|
|
38
32
|
```bash
|
|
39
33
|
gem install grmenu
|
|
40
34
|
```
|
|
41
35
|
|
|
42
|
-
O en tu
|
|
36
|
+
O si trabajás con el archivo directamente en tu proyecto:
|
|
43
37
|
|
|
44
38
|
```ruby
|
|
45
|
-
|
|
39
|
+
require_relative "GRmenu"
|
|
46
40
|
```
|
|
47
41
|
|
|
48
|
-
|
|
42
|
+
<sub>Requiere Ruby ≥ 2.6.</sub>
|
|
49
43
|
|
|
50
|
-
|
|
51
|
-
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 💡 Cómo se pasan las opciones y todos los parámetros
|
|
47
|
+
|
|
48
|
+
`GRmenu` permite pasar métodos directos, símbolos, arreglos con nombres personalizados, bloques lambda/procs y helpers. Además, acepta todos los parámetros de configuración visual en la instanciación:
|
|
49
|
+
|
|
50
|
+
```ruby
|
|
51
|
+
menu = GRmenu.new(
|
|
52
|
+
[
|
|
53
|
+
method(:iniciar_servidor), # 1. Method (auto-capitaliza: "Iniciar Servidor")
|
|
54
|
+
:crear_respaldo, # 2. Symbol (auto-capitaliza: "Crear Respaldo")
|
|
55
|
+
["Métricas del Sistema", method(:ver_metricas)], # 3. Array ["Nombre Personalizado", acción]
|
|
56
|
+
["Ejecutar Lambda", -> { puts Color.pink("Lambda!"); GRmenu.continue }], # 4. Lambda/Proc
|
|
57
|
+
["Probar Banner Helper", method(:prueba_banner_rapido)], # 5. Helper GRmenu.banner
|
|
58
|
+
["Ver Ayuda y Referencia", method(:ver_ayuda_completa)], # 6. Helper GRmenu.help
|
|
59
|
+
method(:salir) # 7. Salir
|
|
60
|
+
],
|
|
61
|
+
banner: "DEV OPS", # Texto gigante en arte ASCII 3D
|
|
62
|
+
title: "Panel de Control", # Título en el marco de opciones
|
|
63
|
+
subtitle: "Consola de Administración\nUsa las flechas y Enter", # Subtítulo (soporta saltos de línea \n)
|
|
64
|
+
font: 1, # Fuente del banner (1 al 10, por defecto 1: ANSI Shadow 3D)
|
|
65
|
+
style: 7, # Estilo de marco de opciones (1 al 20, ej: 7=redondeado, 3=doble)
|
|
66
|
+
banner_style: 3, # Estilo de marco del banner (1 al 20, ej: 3=doble línea)
|
|
67
|
+
divider: true, # Líneas divisorias a la par del banner (true, false o número)
|
|
68
|
+
center: true # Centrado automático del menú y subtítulo respecto al banner
|
|
69
|
+
)
|
|
52
70
|
```
|
|
53
71
|
|
|
54
72
|
---
|
|
55
73
|
|
|
56
|
-
##
|
|
74
|
+
## 🌟 Ejemplo Completo de Uso (`e.rb`)
|
|
75
|
+
|
|
76
|
+
A continuación se muestra el archivo de ejemplo completo [`e.rb`](e.rb) con acciones, helpers, configuración de estilos, fuentes y colores:
|
|
57
77
|
|
|
58
78
|
```ruby
|
|
59
|
-
|
|
79
|
+
# frozen_string_literal: true
|
|
80
|
+
|
|
81
|
+
require_relative "GRmenu"
|
|
82
|
+
|
|
83
|
+
# 1. Definición de acciones/métodos
|
|
84
|
+
def iniciar_servidor
|
|
85
|
+
GRmenu.clear_screen
|
|
86
|
+
puts Color.bright_green("-> Servidor iniciado correctamente en el puerto 3000.")
|
|
87
|
+
GRmenu.continue
|
|
88
|
+
end
|
|
60
89
|
|
|
61
|
-
def
|
|
62
|
-
|
|
90
|
+
def crear_respaldo
|
|
91
|
+
GRmenu.clear_screen
|
|
92
|
+
puts Color.bright_cyan("-> Creando respaldo de la base de datos...")
|
|
93
|
+
GRmenu.continue
|
|
63
94
|
end
|
|
64
95
|
|
|
65
|
-
def
|
|
66
|
-
|
|
96
|
+
def ver_metricas
|
|
97
|
+
GRmenu.clear_screen
|
|
98
|
+
puts Color.bright_magenta("-> CPU: 12% | RAM: 4.2 GB | Estado: Operativo")
|
|
99
|
+
GRmenu.continue
|
|
67
100
|
end
|
|
68
101
|
|
|
102
|
+
def prueba_banner_rapido
|
|
103
|
+
GRmenu.clear_screen
|
|
104
|
+
# Helper para mostrar un banner estático o animado en cualquier momento
|
|
105
|
+
GRmenu.banner("OK", 0, color: "green", level: 2, style: 3, font: 1)
|
|
106
|
+
GRmenu.div(40, "green", 1, "═")
|
|
107
|
+
puts Color.green(" Prueba completada con éxito.")
|
|
108
|
+
GRmenu.div(40, "green", 1, "═")
|
|
109
|
+
GRmenu.continue
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def ver_ayuda_completa
|
|
113
|
+
GRmenu.clear_screen
|
|
114
|
+
# Helper interactivo que imprime toda la guía y referencia de GRmenu
|
|
115
|
+
GRmenu.help
|
|
116
|
+
GRmenu.continue
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def salir
|
|
120
|
+
GRmenu.clear_screen
|
|
121
|
+
puts Color.bright_yellow("¡Sesión finalizada con éxito!")
|
|
122
|
+
exit(0)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# 2. Instanciación del menú con TODOS los parámetros disponibles
|
|
69
126
|
menu = GRmenu.new(
|
|
70
|
-
[
|
|
71
|
-
|
|
72
|
-
|
|
127
|
+
[
|
|
128
|
+
method(:iniciar_servidor), # 1. Method (auto-capitaliza: "Iniciar Servidor")
|
|
129
|
+
:crear_respaldo, # 2. Symbol (auto-capitaliza: "Crear Respaldo")
|
|
130
|
+
["Métricas del Sistema", method(:ver_metricas)], # 3. Array ["Nombre Personalizado", acción]
|
|
131
|
+
["Ejecutar Lambda", -> { puts Color.pink("Lambda!"); GRmenu.continue }], # 4. Lambda/Proc
|
|
132
|
+
["Probar Banner Helper", method(:prueba_banner_rapido)], # 5. Helper GRmenu.banner
|
|
133
|
+
["Ver Ayuda y Referencia", method(:ver_ayuda_completa)], # 6. Helper GRmenu.help
|
|
134
|
+
method(:salir) # 7. Salir
|
|
135
|
+
],
|
|
136
|
+
banner: "DEV OPS", # Texto gigante en arte ASCII 3D
|
|
137
|
+
title: "Panel de Control", # Título en el marco de opciones
|
|
138
|
+
subtitle: "Consola de Administración\nUsa las flechas y Enter", # Subtítulo (soporta saltos de línea \n)
|
|
139
|
+
font: 1, # Fuente del banner (1 al 10, por defecto 1: ANSI Shadow 3D)
|
|
140
|
+
style: 7, # Estilo de marco de opciones (1 al 20, ej: 7=redondeado, 3=doble)
|
|
141
|
+
banner_style: 3, # Estilo de marco del banner (1 al 20, ej: 3=doble línea)
|
|
142
|
+
divider: true, # Líneas divisorias a la par del banner (true, false o número)
|
|
143
|
+
center: true # Centrado automático del menú y subtítulo respecto al banner
|
|
73
144
|
)
|
|
74
145
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
146
|
+
# 3. Configuración completa de colores y estilos (set_style / style_config)
|
|
147
|
+
# Colores disponibles: "black", "gray", "red", "green", "yellow", "blue",
|
|
148
|
+
# "magenta", "purple", "pink", "cyan", "aqua", "orange", "white"
|
|
149
|
+
# Niveles de brillo: 1 = normal, 2 = brillante
|
|
150
|
+
|
|
151
|
+
menu.set_style.font(1) # 1 = ANSI Shadow 3D, 2 = Slant 3D, 3 = Doom, etc.
|
|
152
|
+
menu.set_style.banner("cyan", 2) # Color del banner ASCII
|
|
153
|
+
menu.set_style.title("yellow", 2) # Color del título del recuadro
|
|
154
|
+
menu.set_style.subtitle("white", 1)# Color del subtítulo/descripción
|
|
155
|
+
menu.set_style.divider("blue", 1) # Color de las líneas divisorias
|
|
156
|
+
menu.set_style.border("yellow", 1) # Color del borde del marco de opciones
|
|
157
|
+
menu.set_style.options("white", 1) # Color de opciones no seleccionadas
|
|
158
|
+
menu.set_style.focus("green", 2) # Color y brillo de la opción resaltada
|
|
159
|
+
|
|
160
|
+
# 4. Dibujar y lanzar el menú interactivo
|
|
161
|
+
# size_max / min_width define el ancho mínimo sugerido para el marco de opciones
|
|
162
|
+
menu.draw(size_max: 38)
|
|
78
163
|
```
|
|
79
164
|
|
|
80
|
-
|
|
165
|
+
---
|
|
81
166
|
|
|
82
|
-
|
|
83
|
-
<summary>🐍 <b>Ver ejemplo en Python</b></summary>
|
|
167
|
+
## 📖 Guía y Referencia Rápida en Consola (`GRmenu.help`)
|
|
84
168
|
|
|
85
|
-
|
|
86
|
-
from GRmenu import GRmenu
|
|
169
|
+
Para consultar en cualquier momento la lista de helpers, colores, fuentes, marcos y sintaxis directamente desde la terminal, podés ejecutar:
|
|
87
170
|
|
|
88
|
-
|
|
89
|
-
|
|
171
|
+
```ruby
|
|
172
|
+
GRmenu.help
|
|
173
|
+
```
|
|
90
174
|
|
|
91
|
-
|
|
92
|
-
print("elegiste dos")
|
|
175
|
+
O desde una instancia:
|
|
93
176
|
|
|
94
|
-
|
|
95
|
-
menu.
|
|
96
|
-
menu.SetStyle.Options("green")
|
|
97
|
-
menu.draw()
|
|
177
|
+
```ruby
|
|
178
|
+
menu.help
|
|
98
179
|
```
|
|
99
180
|
|
|
100
|
-
|
|
181
|
+
Salida limpia y estructurada en consola:
|
|
182
|
+
|
|
183
|
+
```text
|
|
184
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
185
|
+
║ GRmenu - Guia y Referencia Rapida ║
|
|
186
|
+
║ Navegacion interactiva en terminal TTY ║
|
|
187
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
188
|
+
|
|
189
|
+
[1] HELPERS NATIVOS EN MODO CRUDO
|
|
190
|
+
────────────────────────────────────────────────────────────────
|
|
191
|
+
GRmenu.clear_screen (o GRmenu.clr)
|
|
192
|
+
* Limpia la terminal al instante con secuencias ANSI.
|
|
193
|
+
GRmenu.continue(mensaje)
|
|
194
|
+
* Pausa interactiva: espera una sola tecla en modo TTY crudo.
|
|
195
|
+
GRmenu.banner(texto, delay, color:, level:, style:, font:)
|
|
196
|
+
* Renderiza banner ASCII 3D con marco y animacion opcional.
|
|
197
|
+
GRmenu.div(longitud, color, level, char)
|
|
198
|
+
* Dibuja linea divisoria horizontal adaptable a la consola.
|
|
199
|
+
GRmenu.help
|
|
200
|
+
* Imprime esta guia visual interactiva en consola.
|
|
201
|
+
```
|
|
101
202
|
|
|
102
203
|
---
|
|
103
204
|
|
|
@@ -112,111 +213,110 @@ menu.draw()
|
|
|
112
213
|
|
|
113
214
|
---
|
|
114
215
|
|
|
115
|
-
##
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
216
|
+
## 🔤 Fuentes ASCII 3D para Banners (`font: 1` al `10`)
|
|
217
|
+
|
|
218
|
+
| ID | Estilo | Muestra (`RUBY`) |
|
|
219
|
+
|:--:|--------------------------|------------------|
|
|
220
|
+
| **`1`** | **ANSI Shadow 3D (Default)** | `██████╗ ██╗ ██╗ ██████╗ ██╗ ██╗` |
|
|
221
|
+
| **`2`** | **Slant 3D (FIGlet)** | ` ____ __ __ ____ __ __` |
|
|
222
|
+
| **`3`** | **Doom / Standard 3D** | ` ____ _ _ ____ __ __` |
|
|
223
|
+
| **`4`** | **Graffiti Shadow 3D** | ` ,---. ,--. ,--. ,---. ,--. ,--.` |
|
|
224
|
+
| **`5`** | **Small Slant / Mini 3D**| ` ___ _ _ ___ _ _` |
|
|
225
|
+
| **`6`** | **Modular Pipe 3D** | ` _____ _____ _____ _____` |
|
|
226
|
+
| **`7`** | **Bubble / Round Gothic**| ` ____ _ _ ____ _ _` |
|
|
227
|
+
| **`8`** | **Double-Line Wire 3D** | ` ╔═════╗ ║ ║ ╔════╗ ║ ║` |
|
|
228
|
+
| **`9`** | **Solid Fat 3D Block** | ` ██████▄ ██ ██ ██████▄ ██ ██` |
|
|
229
|
+
| **`10`**| **Arcade Stars Matrix** | ` ★★★★ ★ ★ ★★★★ ★ ★` |
|
|
127
230
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
### Estilos de borde (`style`)
|
|
231
|
+
---
|
|
131
232
|
|
|
132
|
-
|
|
233
|
+
## 🖼️ Estilos de Marco (`style` / `banner_style: 1` al `20`)
|
|
133
234
|
|
|
134
235
|
| `style` | Vista previa | `style` | Vista previa |
|
|
135
236
|
|:---:|:---|:---:|:---|
|
|
136
237
|
| 1 | `#===#` | 11 | `░░░░░` |
|
|
137
|
-
| 2 | `┌───┐` | 12 | `█████` |
|
|
138
|
-
| 3 | `╔═══╗` | 13 | `*****` |
|
|
139
|
-
| 4 | `┏━━━┓` | 14 | `+++++` |
|
|
238
|
+
| 2 | `┌───┐` *(Línea simple)* | 12 | `█████` |
|
|
239
|
+
| 3 | `╔═══╗` *(Doble línea - Default banner)* | 13 | `*****` |
|
|
240
|
+
| 4 | `┏━━━┓` *(Línea gruesa)* | 14 | `+++++` |
|
|
140
241
|
| 5 | `╒═══╕` | 15 | `=====` |
|
|
141
242
|
| 6 | `╓───╖` | 16 | `~~~~~` |
|
|
142
|
-
| 7 | `╭───╮` | 17 | `-----` |
|
|
143
|
-
| 8 | `▛▀▀▀▜` | 18 | `◆◆◆◆◆` |
|
|
144
|
-
| 9 | `▓▓▓▓▓` | 19 |
|
|
145
|
-
| 10 | `▒▒▒▒▒` | 20 |
|
|
243
|
+
| 7 | `╭───╮` *(Curvas redondeadas)* | 17 | `-----` |
|
|
244
|
+
| 8 | `▛▀▀▀▜` *(Bloques outline)* | 18 | `◆◆◆◆◆` |
|
|
245
|
+
| 9 | `▓▓▓▓▓` | 19 | `●○○○●` *(Círculos - Default opciones)* |
|
|
246
|
+
| 10 | `▒▒▒▒▒` | 20 | `★☆☆☆★` *(Estrellas)* |
|
|
146
247
|
|
|
147
|
-
|
|
148
|
-
menu = GRmenu.new([method(:opcion_uno), method(:opcion_dos)], title: "Mi menu", style: 7) # bordes redondeados
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### Ancho del menú
|
|
248
|
+
---
|
|
152
249
|
|
|
153
|
-
|
|
250
|
+
## 🎨 Paleta de Colores y Módulo `Color`
|
|
154
251
|
|
|
155
252
|
```ruby
|
|
156
|
-
|
|
253
|
+
puts Color.green("Texto en verde")
|
|
254
|
+
puts Color.bright_cyan("Cian brillante")
|
|
255
|
+
puts Color.yellow("Texto en amarillo")
|
|
256
|
+
puts Color.bright_magenta("Magenta brillante")
|
|
257
|
+
puts Color.purple("Texto en morado")
|
|
258
|
+
puts Color.orange("Texto en naranja")
|
|
259
|
+
puts Color.pink("Texto en rosa")
|
|
260
|
+
puts Color.gray("Texto en gris")
|
|
157
261
|
```
|
|
158
262
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
## 📖 Referencia de la API (Ruby)
|
|
263
|
+
Colores soportados: `black`, `gray`, `red`, `green`, `yellow`, `blue`, `magenta`, `purple`, `pink`, `cyan`, `aqua`, `orange`, `white`.
|
|
162
264
|
|
|
163
|
-
|
|
265
|
+
---
|
|
164
266
|
|
|
165
|
-
|
|
166
|
-
|-------------|---------------------------------------|---------------------------------------------------|
|
|
167
|
-
| `functions` | `Array<Method, Proc, Symbol, Array>` | Métodos, procs o lambdas a mostrar como opciones. |
|
|
168
|
-
| `title` | `String` (opcional) | Título mostrado en la cabecera del menú. |
|
|
169
|
-
| `style` | `Integer` (opcional) | Número de estilo de borde (ver tabla arriba). |
|
|
267
|
+
## 🛠️ Helpers Nativos en Modo Crudo
|
|
170
268
|
|
|
171
|
-
|
|
269
|
+
```ruby
|
|
270
|
+
# 1. Limpia la pantalla al instante con secuencias ANSI
|
|
271
|
+
GRmenu.clear_screen # o GRmenu.clr
|
|
172
272
|
|
|
173
|
-
|
|
273
|
+
# 2. Imprime un banner o logo gigante responsivo
|
|
274
|
+
GRmenu.banner("SECURE", 0, color: "magenta", style: 3, font: 1)
|
|
174
275
|
|
|
175
|
-
|
|
276
|
+
# 3. Línea divisoria horizontal adaptable
|
|
277
|
+
GRmenu.div(60, "blue")
|
|
176
278
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
| `set_style.border(color, level=1)` | Color del marco del menú. |
|
|
180
|
-
| `set_style.options(color, level=1)` | Color de las opciones sin seleccionar. |
|
|
181
|
-
| `set_style.focus(color, level=2)` | Color de la opción resaltada. |
|
|
279
|
+
# 4. Pausa de consola que espera una sola tecla en modo TTY crudo
|
|
280
|
+
GRmenu.continue("Presiona cualquier tecla para continuar...")
|
|
182
281
|
|
|
183
|
-
|
|
282
|
+
# 5. Guía interactiva en consola
|
|
283
|
+
GRmenu.help
|
|
284
|
+
```
|
|
184
285
|
|
|
185
286
|
---
|
|
186
287
|
|
|
187
|
-
##
|
|
288
|
+
## 📖 Referencia de la API
|
|
188
289
|
|
|
189
|
-
|
|
190
|
-
require 'GRmenu'
|
|
290
|
+
### `GRmenu.new(functions, ...)`
|
|
191
291
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
292
|
+
| Parámetro | Tipo | Descripción |
|
|
293
|
+
|------------------|------------|-------------|
|
|
294
|
+
| `functions` | `Array` | Opciones a mostrar (`Method`, `Symbol`, `Array ["Nombre", acción]`, `Proc`/`lambda`). |
|
|
295
|
+
| `banner:` | `String` | Texto gigante a renderizar en arte ASCII 3D arriba del menú. |
|
|
296
|
+
| `title:` | `String` | Título en la cabecera del marco de opciones. |
|
|
297
|
+
| `subtitle:` | `String` | Subtítulo o descripción (soporta múltiples líneas con `\n`). |
|
|
298
|
+
| `font:` | `Integer` | Fuente ASCII 3D del banner (1 al 10, default 1). |
|
|
299
|
+
| `style:` | `Integer` | Estilo de marco para las opciones (1 al 20, default 19). |
|
|
300
|
+
| `banner_style:` | `Integer` | Estilo de marco para el banner (1 al 20, default 3). |
|
|
301
|
+
| `divider:` | `Boolean` | Dibuja líneas divisorias a la par del ancho del banner. |
|
|
302
|
+
| `center:` | `Boolean` | Centra simétricamente el subtítulo y menú de opciones (default `true`). |
|
|
195
303
|
|
|
196
|
-
|
|
197
|
-
puts "Hasta luego 👋"
|
|
198
|
-
end
|
|
304
|
+
### `menu.set_style`
|
|
199
305
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
306
|
+
| Método | Descripción |
|
|
307
|
+
|-------------------------------------|-------------------------------------------|
|
|
308
|
+
| `set_style.font(id)` | Cambia el tipo de fuente ASCII 3D (1..10). |
|
|
309
|
+
| `set_style.banner(color, level=2)` | Color y brillo del banner ASCII 3D. |
|
|
310
|
+
| `set_style.title(color, level=2)` | Color y brillo del título del marco. |
|
|
311
|
+
| `set_style.subtitle(color, level=1)`| Color y brillo del subtítulo. |
|
|
312
|
+
| `set_style.divider(color, level=1)` | Color y brillo de las líneas divisorias. |
|
|
313
|
+
| `set_style.border(color, level=1)` | Color y brillo del marco de opciones. |
|
|
314
|
+
| `set_style.options(color, level=1)` | Color y brillo de opciones no activas. |
|
|
315
|
+
| `set_style.focus(color, level=2)` | Color y brillo de la opción resaltada. |
|
|
203
316
|
|
|
204
|
-
menu
|
|
205
|
-
[
|
|
206
|
-
method(:saludar),
|
|
207
|
-
method(:acerca_de),
|
|
208
|
-
["Personalizado", -> { puts "Opción con bloque lambda" }],
|
|
209
|
-
method(:salir_app)
|
|
210
|
-
],
|
|
211
|
-
title: "GRmenu Demo",
|
|
212
|
-
style: 7
|
|
213
|
-
)
|
|
317
|
+
### `menu.draw(size_max: 20)`
|
|
214
318
|
|
|
215
|
-
|
|
216
|
-
menu.set_style.options("white")
|
|
217
|
-
menu.set_style.focus("cyan", 2)
|
|
218
|
-
menu.draw(size_max: 28)
|
|
219
|
-
```
|
|
319
|
+
Inicia el menú interactivo con navegación por teclado y bloquea el hilo hasta que el usuario elige una opción (`Enter`) o sale (`q`).
|
|
220
320
|
|
|
221
321
|
---
|
|
222
322
|
|
|
@@ -230,8 +330,6 @@ Las contribuciones son bienvenidas. Podés abrir un [issue](https://github.com/J
|
|
|
230
330
|
|
|
231
331
|
Distribuido bajo licencia [MIT](LICENSE).
|
|
232
332
|
|
|
233
|
-
---
|
|
234
|
-
|
|
235
333
|
<div align="center">
|
|
236
334
|
|
|
237
335
|
Hecho por [grcode](https://github.com/JoseEduardoGR)
|
data/data/borders.json
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"1": {
|
|
3
|
+
"h": "=-",
|
|
4
|
+
"v": "|",
|
|
5
|
+
"tl": "#",
|
|
6
|
+
"tr": "#",
|
|
7
|
+
"bl": "#",
|
|
8
|
+
"br": "#"
|
|
9
|
+
},
|
|
10
|
+
"2": {
|
|
11
|
+
"h": "\u2500",
|
|
12
|
+
"v": "\u2502",
|
|
13
|
+
"tl": "\u250c",
|
|
14
|
+
"tr": "\u2510",
|
|
15
|
+
"bl": "\u2514",
|
|
16
|
+
"br": "\u2518"
|
|
17
|
+
},
|
|
18
|
+
"3": {
|
|
19
|
+
"h": "\u2550",
|
|
20
|
+
"v": "\u2551",
|
|
21
|
+
"tl": "\u2554",
|
|
22
|
+
"tr": "\u2557",
|
|
23
|
+
"bl": "\u255a",
|
|
24
|
+
"br": "\u255d"
|
|
25
|
+
},
|
|
26
|
+
"4": {
|
|
27
|
+
"h": "\u2501",
|
|
28
|
+
"v": "\u2503",
|
|
29
|
+
"tl": "\u250f",
|
|
30
|
+
"tr": "\u2513",
|
|
31
|
+
"bl": "\u2517",
|
|
32
|
+
"br": "\u251b"
|
|
33
|
+
},
|
|
34
|
+
"5": {
|
|
35
|
+
"h": "\u2550",
|
|
36
|
+
"v": "\u2502",
|
|
37
|
+
"tl": "\u2552",
|
|
38
|
+
"tr": "\u2555",
|
|
39
|
+
"bl": "\u2558",
|
|
40
|
+
"br": "\u255b"
|
|
41
|
+
},
|
|
42
|
+
"6": {
|
|
43
|
+
"h": "\u2500",
|
|
44
|
+
"v": "\u2551",
|
|
45
|
+
"tl": "\u2553",
|
|
46
|
+
"tr": "\u2556",
|
|
47
|
+
"bl": "\u2559",
|
|
48
|
+
"br": "\u255c"
|
|
49
|
+
},
|
|
50
|
+
"7": {
|
|
51
|
+
"h": "\u2500",
|
|
52
|
+
"v": "\u2502",
|
|
53
|
+
"tl": "\u256d",
|
|
54
|
+
"tr": "\u256e",
|
|
55
|
+
"bl": "\u2570",
|
|
56
|
+
"br": "\u256f"
|
|
57
|
+
},
|
|
58
|
+
"8": {
|
|
59
|
+
"h": "\u2580",
|
|
60
|
+
"hb": "\u2584",
|
|
61
|
+
"v": "\u258c",
|
|
62
|
+
"vl": "\u258c",
|
|
63
|
+
"vr": "\u2590",
|
|
64
|
+
"tl": "\u259b",
|
|
65
|
+
"tr": "\u259c",
|
|
66
|
+
"bl": "\u2599",
|
|
67
|
+
"br": "\u259f"
|
|
68
|
+
},
|
|
69
|
+
"19": {
|
|
70
|
+
"h": "\u25cf\u25cb",
|
|
71
|
+
"v": "\u25cf",
|
|
72
|
+
"tl": "\u25cf",
|
|
73
|
+
"tr": "\u25cf",
|
|
74
|
+
"bl": "\u25cf",
|
|
75
|
+
"br": "\u25cf"
|
|
76
|
+
},
|
|
77
|
+
"20": {
|
|
78
|
+
"h": "\u2605\u2606",
|
|
79
|
+
"v": "\u2605",
|
|
80
|
+
"tl": "\u2605",
|
|
81
|
+
"tr": "\u2605",
|
|
82
|
+
"bl": "\u2605",
|
|
83
|
+
"br": "\u2605"
|
|
84
|
+
}
|
|
85
|
+
}
|
data/data/colors.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"black": {"1": "30m", "2": "90m"},
|
|
3
|
+
"red": {"1": "31m", "2": "91m"},
|
|
4
|
+
"green": {"1": "32m", "2": "92m"},
|
|
5
|
+
"yellow": {"1": "33m", "2": "93m"},
|
|
6
|
+
"blue": {"1": "34m", "2": "94m"},
|
|
7
|
+
"magenta":{"1": "35m", "2": "95m"},
|
|
8
|
+
"cyan": {"1": "36m", "2": "96m"},
|
|
9
|
+
"white": {"1": "37m", "2": "97m"},
|
|
10
|
+
"gray": {"1": "90m", "2": "38;5;245m"},
|
|
11
|
+
"purple": {"1": "38;5;129m", "2": "38;5;141m"},
|
|
12
|
+
"pink": {"1": "38;5;205m", "2": "38;5;218m"},
|
|
13
|
+
"aqua": {"1": "38;5;45m", "2": "38;5;51m"},
|
|
14
|
+
"orange": {"1": "38;5;208m", "2": "38;5;214m"},
|
|
15
|
+
"reset": "0m"
|
|
16
|
+
}
|