Advertisement
cz3dtc

Rolující seznam bash

Mar 26th, 2013 (edited)
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. #!/bin/bash
  2. #http://pastebin.com/tq2XgnGe
  3. #Autor [email protected] (Licence GNU GPL)
  4. start=1
  5. tput civis
  6. trap "stty $(stty -g)" EXIT
  7. stty -echo -ixon -icanon time 2 || exit $? # Zakaž klávesu PAUSE/BREAK
  8. KEYS="" ; IFS=$'\a'
  9. ttt=("Volba 1" "Volba 2" "Volba 3" "Volba 4" "Volba 5" "Volba 6" "Volba 7" "Volba 8" "Volba 9" "Volba 10" "Volba 11" "Volba 12" "Volba 13" "Volba 14" "Volba 15")
  10. ap=0; let start--
  11. pp=${#ttt[@]}
  12. mp=5
  13. if ((pp < mp)) ; then let mp=pp ; fi
  14. posun_seznamu=0
  15. center=0
  16. acc=5
  17. function zobraz ()
  18. {
  19. let tmpap=ap ; let tmpap++
  20. echo -en "\033[1;1H"
  21. echo "ESC = Konec , ENTER = výběr volby"
  22. let posa=$posun_seznamu ; let posb=($posun_seznamu+$mp)
  23. let posa=($posa + $center) ; let posb=($posb + $center)
  24. echo -e "\033[1m\033[46m \e[0m"
  25. for ((i=$posa; i<($posb); i++ ))
  26. do
  27. if [ $ap = $i ]
  28. then
  29. echo -e "\033[1m\033[46m \e[0m\033[1m\033[44m${ttt[i]}\e[0m\033[1m\033[46m \e[0m"
  30. else
  31. echo -e "\033[1m\033[46m \e[0m\033[30m\033[47m${ttt[i]}\e[0m\033[1m\033[46m \e[0m"
  32. fi
  33. done
  34. echo -e "\033[1m\033[46m \e[0m"
  35. }
  36. for ((l=0; l<($start); l++ ))
  37. do
  38. zobraz
  39. if ((ap < (pp -1 ) )) ; then
  40. let ap++
  41. if (((center + (mp -1)) < ap)) ; then let center++ ; fi
  42. fi
  43. done
  44. trap '' 2 # Při stisku ctrl+c jen obnov obrazovku.
  45. trap '' SIGTSTP # Při stisku ctrl+z jen obnov obrazovku.
  46. zobraz
  47. while [ 1 ]; do
  48. while read -t 0 ; do read -s -r -d "" -N 1 -t 0.2 CHAR && KEYS="$KEYS$CHAR" || break # cyklus čtení klávesnice
  49. done
  50. if [ -z "$KEYS" ]; then sleep 0.05 ; continue ; fi
  51. case "$KEYS" in
  52. $'\x1B\x5B\x42'*)
  53. KEYS="${KEYS##???}" # Klávesa DOWN stlačena
  54. if ((ap < (pp -1 ) )) ; then
  55. let ap++
  56. if (((center + (mp -1)) < ap)) ; then let center++ ; fi
  57. fi
  58. zobraz
  59. ;;
  60. $'\x1B\x5B\x41'*)
  61. KEYS="${KEYS##???}" # Klávesa UP stlačena
  62. if ((ap > 0)); then
  63. let ap--
  64. if ((ap < posa )) ; then let center-- ; fi
  65. fi
  66. zobraz
  67. ;;
  68. $'\n'*|$'\r'*)
  69. KEYS="${KEYS##?}" # Klávesa ENTER stlačena
  70. echo "Vybraná položka : ${ttt[ap]} "
  71. tput cnorm # Zobraz kurzor
  72. stty ixany icanon # Povol PAUSE/BREAK
  73. trap - 2
  74. trap - SIGTSTP
  75. exit 0
  76. ;;
  77. $'\x1B')
  78. KEYS="${KEYS##?}" # Klávesa ESC stlačena
  79. echo "Program ukončen ..."
  80. tput cnorm
  81. stty ixany icanon # Povol PAUSE/BREAK
  82. trap - 2 # Povol ctrl+c
  83. trap - SIGTSTP # Povol ctrl+z
  84. exit 0
  85. ;;
  86. [$'\x01'-$'\x1F'$'\x7F']*)
  87. KEYS="${KEYS##?}"
  88. ;;
  89. *)
  90. KEY="${KEYS:0:1}"
  91. KEYS="${KEYS#?}"
  92. ;;
  93. esac
  94. done
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement