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.
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



ago 7th, 2009 at 23:57
[...] http://www.espaciolinux.com/2009/08/script_bash-adapta-texto-distintos-tamanos-terminal/ [...]