• Suscríbete al Feed Espacio Linux
  • Suscríbete al Feed por Email
  • Sigue a Espacio Linux en Identi.ca
  • Espacio Linux también en Facebook
  • Sigue a Espacio Linux en Twitter
  • Sigue a Espacio Linux en Google +
          Iniciar sesión | Registrarse

script_bash adapta texto a distintos tamaños de terminal

FUNCIÓN_EL

Buenas cumpas. Últimamente he estado enrollado en bash programando un guión con fines pedagógicos que aún no lo termino pero ya casi, se trata de un manual interactivo sobre el manejo de consola (comandos) y como es obvio tiene mucho texto, el asunto es que me tope con un inconveniente, al ejecutarlo en una terminal de distinto tamaño que la mía (70 x 20) el texto se veía feo,muy feo, las lineas se perdían si la terminal era mas pequeña (como sucede con el comando less en directorios grandes) y las palabras se cortaban quedando realmente inútil o al menos incomodo. Y como pienso distribuirlo no podía dejarlo así.

Por ello recurrí al foro de EL para buscar ayuda y como no podía ser de otra manera la recibí de buena forma al final del post di por solucionado el tema y postee un code que es la base de este que posteo ahora. Éste está algo mejorado aunque se puede mejorar más aún.

De fondo el guión, al frente la terminal que uso

De fondo el guión, al frente la terminal que uso

Sobre el code

El code es una función solo cumple el objetivo de mantener una coherencia en el texto impreso en pantalla, de un script_bash.

Son unas 300 lineas aunque en gran medida eso depende del tamaño del texto.

La licencia es GNU osea que ya sabes, has con el lo que quieras menos apropiártelo jeje

Para lograr esta función me base en el comando “tput”, me lié con estructuras condicionales y otras yerbas, en fin aprendí y lo que es peor me gusto jeje

Las fuentes son variadas a decir verdad no hay mucho en español sobre el comando tput yo termine traduciendo con Google traductor el manual del comando, un rollo, pero funciono lo demás en el script mismo hago referencias a como buscar info.

En honor y agradecimiento EL lo nombre Función_EL

Bien el code está muy comentado, va a ser fácil entenderlo, así que los invito a probarlo, encontarles fallos y si les parece mejorarlo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
#!/bin/bash -x

# Autor besa32bits este script es de licencia GNU
# v 3 o posterior  vea http://www.gnu.org/licenses
# Créditos: A los cumpas de Espacio Linux
# http://www.espaciolinux.com
# Nombre: FUNCIÓN_EL v 0.5 beta  Fecha: 7/8/2009

# Este script toma como parámetros el tamaño
# el terminal y ajusta el texto para
# que el re escalado de terminal no corte las
# palabras que se imprimen en pantalla.
# útil para menús o para cualquier guión que imprima
# textos por pantalla, sobretodo si
# son extensos.

# Nota: este script debería funcionar bien con
# tamaños  de terminal donde el
# min de lineas es 12 y el max es 21 y el min de
# columnas es 65 y el max es 120
# aunque la cantidad max de columnas no pude
# probarlas por que mi monitor no llega
# el script funciona pero en este caso es con fines
# pedagógicos

####################################################
#                                                                                                    #
#                        FUNCIÓN_EL                                                     #
#                                                                                                    #
####################################################
# Limpio la pantalla
clear
#############################################

# Comienza el " if lineas"

# En "l1" almaceno la salida del comando
#  "tput lines" Vea "man tput"
l1=`tput lines`

# Defino las constantes para evaluar
#  con l1 mediante if
lno=12
l2=15
l3=18
l4=21
l5=24
# Nota: si alguien tiene un monitor panorámico
# de 22" como yoyofv
#  agregue lineas hasta la 58

# Comienza el if que transformara la evaluación de
# variable y constantes en una nueva constante
# En Google busca "Estructuras condicionales"
#" Comparación de valores numéricos" en bash claro

if [ $l1 -lt $lno ];
then
echo " Debe maximizar la ventana del terminal"
elif [ $l1 -ge $lno ] && [ $l1 -lt $l2 ];
then
linvar=12
elif [ $l1 -ge $l2 ] && [ $l1 -lt $l3 ];
then
linvar=15
elif [ $l1 -ge $l3 ] && [ $l1 -lt $l4 ];
then
linvar=18
elif [ $l1 -ge $l4 ] && [ $l1 -lt $l5 ];
then
linvar=21
fi

################################################
# Comienza el if columnas
################################################

# En c1 almaceno la salida del comando
# "tput cols" Vea "man tput"
c1=`tput cols`

# Defino constantes para evaluar con
# la variable c1 mediante if
cno=65
c2=95
c3=135
c4=170

# Comienza el if que transformara la
# evaluación de variable y
# constantes en una nueva constante
# En Google busca "Estructuras condicionales" ,
#" Comparación de valores numéricos" en bash claro

if [ $c1 -lt $cno ];
then
echo " Debe maximizar la ventana del terminal"
elif [ $c1 -ge $cno ] && [ $c1 -lt $c2 ];
then
colvar=2
elif [ $c1 -ge $c2 ] && [ $c1 -lt $c3 ];
then
colvar=3
elif [ $c1 -ge $c3 ] && [ $c1 -lt $c4 ];
then
colvar=4
fi

# Acá defino las cadenas con el texto que
#  imprimiré en pantalla
# Le doy un color al texto
tput setf 4
a1="Este programa es software"
a2="libre:usted puede redistribuirlo"
a3="y/o modificarlo conforme a"
a4="los términos de la Licencia"
a5="publica General de GNU"
a6="publicada por la Fundación para "
a7="el Software Libre, ya sea la"
a8="versión 3 de esta Licencia o"
a9="cualquier versión posterior."

a10="Este programa se distribuye"
a11="con el deseo de que le resulte"
a12="útil, pero SIN GARANTÍAS DE"
a13="NINGÚN TIPO; ni siquiera con"
a14=" las garantías implícitas de"

a15="COMERCIABILIDAD o APTITUD PARA"
a16="UN PROPÓSITO DETERMINADO."
a17="Para mas información, consulte"
a18="la Licencia Publica General"
a19="de GNU"
a20="http://www.gnu.org/licenses"
a21="usted deberá haber recibido una"
a22=" copia de la licencia junto con"
a23="los binarios y el código fuente "

# Sumo las constantes definidas en los "if lineas"
# e "if columnas" parámetro a la variable "colYlin"
colYlin=`expr $linvar + $colvar`
# Defino nuevas constantes para evaluar con la
# variable "colYlin" mediante if
v122=14
v123=15
v124=16
v152=17
v153=18
v154=19
v182=20
v183=21
v184=22

########################################
# Comienza el if que dara el resultado definitivo

# 12 lineas y 2 columnas
if [ $colYlin = $v122 ];
then
echo $a1 $a2
echo $a3 $a4
echo $a5 $a6
echo $a7 $a8
echo $a9 $a10
echo $a11 $a12
echo $a13 $a14
echo $a15 $a16
echo $a17 $a18
echo $a19 $a20
echo $a21 $a22
echo $a23
# 12 lineas y 3 columnas
elif  [ $colYlin = $v123 ];
then
echo $a1 $a2 $a3
echo $a4 $a5 $a6
echo $a7 $a8 $a9
echo $a10 $a11 $a12
echo $a13 $a14 $a15
echo $a16 $a17 $a18
echo $a19 $a20 $a21
echo $a22 $a23
echo
echo
echo
echo " el texto puede llegar hasta aquí "
# 12 lineas y 4 columnas
elif  [ $colYlin = $v124 ];
then
echo $a1 $a2 $a3 $a4
echo $a5 $a6 $a7 $a8
echo $a9 $a10 $a11 $a12
echo $a13 $a14 $a15 $a16
echo $a17 $a18 $a19 $a20
echo $a21 $a22 $a23
echo
echo
echo
echo
echo
echo " el texto puede llegar hasta aquí  "

# 15 lineas y 2 columnas
elif [ $colYlin = $v152 ];
then
echo $a1 $a2
echo $a3 $a4
echo $a5 $a6
echo $a7 $a8
echo $a9 $a10
echo $a11 $a12
echo $a13 $a14
echo $a15 $a16
echo $a17 $a18
echo $a19 $a20
echo $a21 $a22
echo $a23
echo ""
echo ""
echo " el texto puede llegar hasta aquí  "
# 15 lineas y 3 columnas
elif  [ $colYlin = $v153 ];
then
echo $a1 $a2 $a3
echo $a4 $a5 $a6
echo $a7 $a8 $a9
echo $a10 $a11 $a12
echo $a13 $a14 $a15
echo $a16 $a17 $a18
echo $a19 $a20 $a21
echo $a22 $a23
echo ""
echo ""
echo ""
echo ""
echo ""
echo " el texto puede llegar hasta aquí  "
# 15 lineas y 4 columnas
elif  [ $colYlin = $v124 ];
then
echo $a1 $a2 $a3 $a4
echo $a5 $a6 $a7 $a8
echo $a9 $a10 $a11 $a12
echo $a13 $a14 $a15 $a16
echo $a17 $a18 $a19 $a20
echo $a21 $a22 $a23
echo  ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo " el texto puede llegar hasta aquí "

# 18 lineas y 2 columnas
elif [ $colYlin = $v182 ];
then
echo $a1 $a2
echo $a3 $a4
echo $a5 $a6
echo $a7 $a8
echo $a9 $a10
echo $a11 $a12
echo $a13 $a14
echo $a15 $a16
echo $a17 $a18
echo $a19 $a20
echo $a21 $a22
echo $a23
echo ""
echo ""
echo ""
echo ""
echo ""
echo " Podrían imprimirse hasta 18 lineas"
# 18 lineas y 3 columnas
elif  [ $colYlin = $v183 ];
then
echo $a1 $a2 $a3
echo $a4 $a5 $a6
echo $a7 $a8 $a9
echo $a10 $a11 $a12
echo $a13 $a14 $a15
echo $a16 $a17 $a18
echo $a19 $a20 $a21
echo $a22 $a23
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo " el texto puede llegar hasta aquí "
# 18 lineas y 4 columnas
elif  [ $colYlin = $v184 ];
then
echo $a1 $a2 $a3 $a4
echo $a5 $a6 $a7 $a8
echo $a9 $a10 $a11 $a12
echo $a13 $a14 $a15 $a16
echo $a17 $a18 $a19 $a20
echo $a21 $a22 $a23
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo " el texto puede llegar hasta aquí  "

fi
# Reestablesco la terminal
tput sgr0
########################################
# listo es todo salute besa32bits

PD: En el café postee un tema pidiendo que me contaran que tamaño de terminal usan es importante para mi proyecto

si pueden echenme un laso ta?



Temas:
Documentación, Programación


Etiquetas:
, ,

Feed Espacio LinuxSi este artículo ha sido de tu interés, considera hacer un comentario o suscribirte al feed para que te enteres de nuevos artículos a través de tu lector de noticias o email.

Acerca del autor

Un comentario para “script_bash adapta texto a distintos tamaños de terminal”

Publica un comentario

Puedes usar estas etiquetas XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <em> <strong>