mMenu.sh 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #!/bin/bash
  2. trap 'echo -en "\ec"; stty sane; exit' SIGINT
  3. aa=0
  4. A(){ for b in $(seq 0 29);do E${b};done; }
  5. B()
  6. {
  7. local c
  8. IFS= read -s -n1 c 2>/dev/null >&2
  9. if [[ $c = $(echo -en "\e") ]]; then
  10. read -s -n1 c 2>/dev/null >&2
  11. if [[ $c = \[ ]]; then
  12. read -s -n1 c 2>/dev/null >&2
  13. case $c in
  14. A) echo d ;;
  15. B) echo e ;;
  16. C) echo f ;;
  17. D) echo g ;;
  18. esac
  19. fi
  20. elif [[ "$c" == "$(echo -en \\x0A)" ]]; then
  21. echo enter
  22. fi
  23. }
  24. C()
  25. {
  26. if [[ $i == d ]];then ((aa--));fi
  27. if [[ $i == e ]];then ((aa++));fi
  28. if [[ $aa -lt 0 ]];then aa=29;fi
  29. if [[ $aa -gt 29 ]];then aa=0;fi;
  30. }
  31. D()
  32. {
  33. j1=$((aa+1)); k1=$((aa-1))
  34. if [[ $k1 -lt 0 ]];then k1=28;fi
  35. if [[ $j1 -gt 29 ]];then j1=0;fi
  36. if [[ $aa -lt $aa ]];then echo -en "\e[0m";E$k1;else echo -en "\e[0m";E$j1;fi
  37. if [[ $j1 -eq 0 ]] || [ $k1 -eq 29 ];then
  38. echo -en "\e[0m" ; E$k1; E$j1;fi;echo -en "\e[0m";E$k1;E$j1;
  39. }
  40. TXa()
  41. {
  42. for (( a=2; a<=38; a++ ))
  43. do
  44. echo -e "\e[${a};1H\e[47;30m│\e[0m \e[47;30m│\e[0m"
  45. done
  46. echo -en "\e[1;1H\033[0m\033[47;30m┌────────────────────────────────────────────────────────────────────────────────┐\033[0m";
  47. echo -en "\e[3;3H\e[1m *** ***\e[0m";
  48. echo -en "\e[4;1H\e[47;30m├\e[0m────────────────────────────────────────────────────────────────────────────────\e[0m\e[47;30m┤\e[0m";
  49. echo -en "\e[5;3H\e[2m коментарий\e[0m";
  50. echo -en "\e[6;1H\e[47;30m├\e[0m────────────────────────────────────────────────────────────────────────────────\e[0m\e[47;30m┤\e[0m";
  51. echo -en "\e[36;1H\e[47;30m├\e[0m─ \xE2\x86\x91 Up ───── \xE2\x86\x93 Down ──── \xe2\x86\xb2 Select Enter ────────────────────────────────────────\e[0m\e[47;30m┤\e[0m";
  52. echo -en "\e[39;1H\033[0m\033[47;30m└────────────────────────────────────────────────────────────────────────────────┘\033[0m";
  53. }
  54. E0(){ echo -en "\e[7;3H Установка \e[32m INSTALL \e[0m";}
  55. E1(){ echo -en "\e[8;3H Kраткий обзор \e[32m SYNOPSIS \e[0m";}
  56. E2(){ echo -en "\e[9;3H Описание \e[32m DESCRIPTION \e[0m";}
  57. E3(){ echo -en "\e[10;3H Смотрите также \e[32m AUTHOR \e[0m";}
  58. E4(){ echo -en "\e[11;3H \e[32m \e[0m";}
  59. E5(){ echo -en "\e[12;3H \e[32m \e[0m";}
  60. E6(){ echo -en "\e[13;3H \e[32m \e[0m";}
  61. E7(){ echo -en "\e[14;3H \e[32m \e[0m";}
  62. E8(){ echo -en "\e[15;3H \e[32m \e[0m";}
  63. E9(){ echo -en "\e[16;3H \e[32m \e[0m";}
  64. E10(){ echo -en "\e[17;3H \e[32m \e[0m";}
  65. E11(){ echo -en "\e[18;3H \e[32m \e[0m";}
  66. E12(){ echo -en "\e[19;3H \e[32m \e[0m";}
  67. E13(){ echo -en "\e[20;3H \e[32m \e[0m";}
  68. E14(){ echo -en "\e[21;3H \e[32m \e[0m";}
  69. E15(){ echo -en "\e[22;3H \e[32m \e[0m";}
  70. E16(){ echo -en "\e[23;3H \e[32m \e[0m";}
  71. E17(){ echo -en "\e[24;3H \e[32m \e[0m";}
  72. E18(){ echo -en "\e[25;3H \e[32m \e[0m";}
  73. E19(){ echo -en "\e[26;3H \e[32m \e[0m";}
  74. E20(){ echo -en "\e[27;3H \e[32m \e[0m";}
  75. E21(){ echo -en "\e[28;3H \e[32m \e[0m";}
  76. E22(){ echo -en "\e[29;3H \e[32m \e[0m";}
  77. E23(){ echo -en "\e[30;3H \e[32m \e[0m";}
  78. E24(){ echo -en "\e[31;3H \e[32m \e[0m";}
  79. E25(){ echo -en "\e[32;3H \e[32m \e[0m";}
  80. E26(){ echo -en "\e[33;3H \e[32m \e[0m";}
  81. E27(){ echo -en "\e[34;3H \e[32m \e[0m";}
  82. E28(){ echo -en "\e[35;3H \e[34m \e[0m";}
  83. E29(){ echo -en "\e[37;3H \e[34m Exit \e[0m";}
  84. INI(){ echo -en "\ec" ;stty sane;TXa;A; };INI
  85. while [[ "$l1" != " " ]]; do case $aa in
  86. 0)D;echo -en "\e[47;30m"; (E0);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e " 0";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  87. 1)D;echo -en "\e[47;30m"; (E1);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e " 1";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  88. 2)D;echo -en "\e[47;30m"; (E2);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e " 2";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  89. 3)D;echo -en "\e[47;30m"; (E3);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e " 3";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  90. 4)D;echo -en "\e[47;30m"; (E4);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e " 4";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  91. 5)D;echo -en "\e[47;30m"; (E5);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e " 5";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  92. 6)D;echo -en "\e[47;30m"; (E6);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e " 6";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  93. 7)D;echo -en "\e[47;30m"; (E7);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e " 7";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  94. 8)D;echo -en "\e[47;30m"; (E8);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e " 9";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  95. 9)D;echo -en "\e[47;30m"; (E9);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e " 9";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  96. 10)D;echo -en "\e[47;30m";(E10);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "10";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  97. 11)D;echo -en "\e[47;30m";(E11);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "11";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  98. 12)D;echo -en "\e[47;30m";(E12);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "12";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  99. 13)D;echo -en "\e[47;30m";(E13);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "13";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  100. 14)D;echo -en "\e[47;30m";(E14);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "14";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  101. 15)D;echo -en "\e[47;30m";(E15);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "15";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  102. 16)D;echo -en "\e[47;30m";(E16);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "16";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  103. 17)D;echo -en "\e[47;30m";(E17);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "17";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  104. 18)D;echo -en "\e[47;30m";(E18);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "18";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  105. 19)D;echo -en "\e[47;30m";(E19);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "19";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  106. 20)D;echo -en "\e[47;30m";(E20);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "20";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  107. 21)D;echo -en "\e[47;30m";(E21);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "21";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  108. 22)D;echo -en "\e[47;30m";(E22);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "22";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  109. 23)D;echo -en "\e[47;30m";(E23);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "23";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  110. 24)D;echo -en "\e[47;30m";(E24);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "24";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  111. 25)D;echo -en "\e[47;30m";(E25);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "25";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  112. 26)D;echo -en "\e[47;30m";(E26);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "26";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  113. 27)D;echo -en "\e[47;30m";(E27);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "27";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  114. 28)D;echo -en "\e[47;30m";(E28);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;echo -e "28";echo -en "\e[47;30m ENTER = main menu ";read;INI;fi;;
  115. 29)D;echo -en "\e[47;30m";(E29);i=`B`;if [[ $i == enter ]];then echo -en "\ec";stty sane;exit 0;fi;;
  116. esac;C;done
  117. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  118. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *** Commentary *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  119. # - trap установка обработчика сигнала SIGINT для комбинации клавиш Ctrl+C
  120. # ----------------------- Глобальные переменные --------------------------
  121. # aa отслеживает, какой из шагов в первом меню в данный момент является активным, позволяя скрипту реагировать на ввод для изменения текущего активного шага.
  122. # ab отслеживает, какой из шагов во вторм меню в данный момент является активным, позволяя скрипту реагировать на ввод для изменения текущего активного шага.
  123. # ----------------------- Локальные переменные --------------------------
  124. # a переменная цикла рамки текста
  125. # b это переменная, которая используются в циклах для итерации.
  126. # c переменная используется для хранения символов, считанных с клавиатуры.
  127. # d стрелка вверх.
  128. # e стрелка вниз.
  129. # f стрелка вправо
  130. # g стрелка влево
  131. # i обработчик курсора
  132. # ----------------------- Локальные ветвящиеся переменные ----------------
  133. # j1 j2 ... переменная служит для хранения индекса следующего шага относительно текущего активного шага.
  134. # k1 k2 ... переменная служит для хранения индекса предыдущего шага относительно текущего активного шага.
  135. # l1 l2 проверяет условие, что значение переменной la не равно пробелу. Этот цикл будет выполняться, пока la не станет равным пробелу.
  136. # ---------------------- Функции -----------------------------------------
  137. # A() функция отвечает за последовательный вызов функций E0, E1, ..., E + 28 Количество вызовов функций зависит от значения 28
  138. # B() функция предназначена для обработки ввода с клавиатуры, особенно при использовании ANSI escape-последовательностей, она может вернуть значения ca da enter
  139. # C() функция в скрипте служит для обработки ввода пользователя и изменения текущего активного шага в меню.
  140. # D() функция осуществляет действия, связанные с обработкой aa j1 k1 и выводом ANSI escape-последовательностей для управления отображением в терминале.
  141. # TXa() функция создает варианнт текстового оформления a
  142. # E0() - ... начиная с E группа функций использует ANSI escape-последовательности для управления позицией курсора и установки цвета текста.
  143. # E0() - E28() основная группа функций использует ANSI escape-последовательности для управления позицией курсора и установки цвета текста.
  144. # F0() - F9() дополнительная группа функций использует ANSI escape-последовательности для управления позицией курсора и установки цвета текста.
  145. # INI Эта функция INI() выполняет инициализацию интерфейса. Ниже нельза переносить.
  146. # WILa() функция первого основного цикла
  147. # WILb() функция второго дополнительного цикла
  148. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~