mTermtoSVG.sh 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #!/bin/bash
  2. E='echo -e'; # -e включить поддержку вывода Escape последовательностей
  3. e='echo -en'; # -n не выводить перевод строки
  4. c="+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+"
  5. trap "R;exit" 2 #
  6. ESC=$( $e "\e")
  7. TPUT(){ $e "\e[${1};${2}H" ;}
  8. CLEAR(){ $e "\ec";}
  9. # 25 возможно это
  10. CIVIS(){ $e "\e[?25l";}
  11. # это цвет текста списка перед курсором при значении 0 в переменной UNMARK(){ $e "\e[0m";}
  12. MARK(){ $e "\e[1;45m";}
  13. # 0 это цвет списка
  14. UNMARK(){ $e "\e[0m";}
  15. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Эти строки задают цвет фона ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  16. R(){ CLEAR ;stty sane;CLEAR;}; # в этом варианте фон прозрачный
  17. HEAD(){ for (( a=2; a<=28; a++ ))
  18. do
  19. TPUT $a 1
  20. $E "\033[1;35m\xE2\x94\x82 \xE2\x94\x82\033[0m";
  21. done
  22. TPUT 3 3
  23. $E "\033[1;36m*** termtosvg ***\033[0m";
  24. TPUT 4 3
  25. $E "\033[90mЗапись терминальных сессий как отдельных SVG-анимаций\033[0m";
  26. TPUT 5 1
  27. $E "\033[35m+----------------------------------------------------------------------------------------------------------------------------------+\033[0m";
  28. TPUT 9 1
  29. $E "\033[35m+ Команды ---------------------------------------------------------------------------------- Commands -----------------------------+\033[0m";
  30. TPUT 10 3
  31. $E "\033[90mПо умолчанию termtosvg отображает SVG-анимацию сеанса оболочки.\033[0m";
  32. TPUT 11 3
  33. $E "\033[90mЕсли имя выходного файла не указано, будет выбрано случайное имя временного файла сгенерированного автоматически.\033[0m";
  34. TPUT 15 1
  35. $E "\033[35m+ Опции ------------------------------------------------------------------------------------ Options ------------------------------+\033[0m";
  36. TPUT 26 1
  37. $E "\033[35m+ Up \xE2\x86\x91 \xE2\x86\x93 Down Select Enter --------------------------------------------------------------------------------------------------------+\033[0m";
  38. MARK;TPUT 1 1
  39. $E "$c";UNMARK;}
  40. i=0; CLEAR; CIVIS;NULL=/dev/null
  41. # 32 это расстояние сверху и 48 это расстояние слева
  42. FOOT(){ MARK;TPUT 29 1
  43. $E "$c";UNMARK;}
  44. # это управляет кнопками ввер/хвниз
  45. i=0; CLEAR; CIVIS;NULL=/dev/null
  46. #
  47. ARROW(){ IFS= read -s -n1 key 2>/dev/null >&2
  48. if [[ $key = $ESC ]];then
  49. read -s -n1 key 2>/dev/null >&2;
  50. if [[ $key = \[ ]]; then
  51. read -s -n1 key 2>/dev/null >&2;
  52. if [[ $key = A ]]; then echo up;fi
  53. if [[ $key = B ]];then echo dn;fi
  54. fi
  55. fi
  56. if [[ "$key" == "$($e \\x0A)" ]];then echo enter;fi;}
  57. M0(){ TPUT 6 3; $e " Oбзор \033[32mSynopsis \033[0m";}
  58. M1(){ TPUT 7 3; $e " Окружающая среда \033[32mEnvironment \033[0m";}
  59. M2(){ TPUT 8 3; $e " Автор \033[32mAuthor \033[0m";}
  60. #
  61. M3(){ TPUT 12 3; $e " Запишите терминальную сессию в файл SVG \033[32mtermtosvg \033[0m";}
  62. M4(){ TPUT 13 3; $e " Запись сеанса терминала в формате asciicast v2 \033[32mtermtosvg record \033[0m";}
  63. M5(){ TPUT 14 3; $e " Рендеринг анимированного SVG из записи в формате asciicast v1 или v2 \033[32mtermtosvg render \033[0m";}
  64. #
  65. M6(){ TPUT 16 3; $e " Укажите программу для записи с необязательными аргументами \033[32m-c –command=COMMAND \033[0m";}
  66. M7(){ TPUT 17 3; $e " Продолжительность задержки между двумя последовательными циклами анимации в миллисекундах \033[32m-D –loop-delay=DELAY \033[0m";}
  67. M8(){ TPUT 18 3; $e " Геометрия экрана терминала, используемая для рендеринга анимации \033[32m-g –screen-geometry=GEOMETRY \033[0m";}
  68. M9(){ TPUT 19 3; $e " Распечатать использование и выход \033[32m-h –help \033[0m";}
  69. M10(){ TPUT 20 3; $e " Установите минимальную продолжительность кадра в миллисекундах \033[32m-m –min-frame-duration=MIN_DURATION \033[0m";}
  70. M11(){ TPUT 21 3; $e " Установите максимальную продолжительность кадра на MAX_DURATION миллисекунд \033[32m-M –max-frame-duration=MAX_DURATION \033[0m";}
  71. M12(){ TPUT 22 3; $e " Установите шаблон SVG, используемый для рендеринга анимации SVG \033[32m-t –template=TEMPLATE \033[0m";}
  72. M13(){ TPUT 23 3; $e " Вывод неподвижных кадров в формате SVG вместо анимированного SVG \033[32m-s –still-frames \033[0m";}
  73. M14(){ TPUT 24 3; $e " SVG Шаблоны \033[32mSVG Templates \033[0m";}
  74. M15(){ TPUT 25 3; $e " Визуализация неподвижных кадров вместо анимированного SVG с использованием шаблона \033[32m-s -t \033[0m";}
  75. #
  76. M16(){ TPUT 27 3; $e " \033[32mExit \033[0m";}
  77. LM=16
  78. MENU(){ for each in $(seq 0 $LM);do M${each};done;}
  79. POS(){ if [[ $cur == up ]];then ((i--));fi
  80. if [[ $cur == dn ]];then ((i++));fi
  81. if [[ $i -lt 0 ]];then i=$LM;fi
  82. if [[ $i -gt $LM ]];then i=0;fi;}
  83. REFRESH(){ after=$((i+1)); before=$((i-1))
  84. if [[ $before -lt 0 ]];then before=$LM;fi
  85. if [[ $after -gt $LM ]];then after=0;fi
  86. if [[ $j -lt $i ]];then UNMARK;M$before;else UNMARK;M$after;fi
  87. if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
  88. UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
  89. INIT(){ R;HEAD;FOOT;MENU;}
  90. SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
  91. # Функция возвращения в меню
  92. ES(){ MARK;$e " ENTER = main menu ";$b;read;INIT;};INIT
  93. while [[ "$O" != " " ]]; do case $i in
  94. # Здесь необходимо следить за двумя перепенными 0) и S=M0 Они должны совпадать между собой и переменной списка M0().
  95. 0) S=M0;SC;if [[ $cur == enter ]];then R;echo " termtosvg [output_path] [-c COMMAND] [-D DELAY] [-g GEOMETRY] [-m MIN_DURATION] [-M MAX_DURATION] [-s] [-t TEMPLATE] [–help]
  96. termtosvg record [output_path] [-c COMMAND] [-g GEOMETRY] [-h]
  97. termtosvg render input_file [output_path] [-D DELAY] [-m MIN_DURATION] [-M MAX_DURATION] [-s] [-t TEMPLATE] [-h]";ES;fi;;
  98. 1) S=M1;SC;if [[ $cur == enter ]];then R;echo " Если параметр --command не указан, termtosvg создаст оболочку, указанную в переменной окружения SHELL, или /bin/sh, если переменная не задано.";ES;fi;;
  99. 2) S=M2;SC;if [[ $cur == enter ]];then R;echo " Nicolas Bedos";ES;fi;;
  100. 3) S=M3;SC;if [[ $cur == enter ]];then R;echo -e "
  101. Запишите терминальную сессию и произведите SVG анимацию по имени animation.svg:
  102. \033[32m termtosvg animation.svg\033[0m
  103. ";ES;fi;;
  104. 4) S=M4;SC;if [[ $cur == enter ]];then R;echo "
  105. Запись сеанса терминала в формате asciicast v2. Запись представляет собой текстовый файл, который содержит информацию о времени, а также то, что отображалось на
  106. экране во время сеанса терминала. Его можно отредактировать, чтобы изменить время записи или информацию, отображаемую на экране терминала.
  107. termtosvg record recording.cast
  108. ";ES;fi;;
  109. 5) S=M5;SC;if [[ $cur == enter ]];then R;echo "
  110. Рендеринг анимированного SVG из записи в формате asciicast v1 или v2. Это позволяет отображать в формате SVG любую запись, сделанную с помощью asciinema.
  111. Рендеринг неподвижных кадров также возможно:
  112. termtosvg render recording.cast animation.svg
  113. ";ES;fi;;
  114. 6) S=M6;SC;if [[ $cur == enter ]];then R;echo "
  115. Укажите программу для записи с необязательными аргументами. КОМАНДА должна быть строкой, перечисляющей программу для выполнения вместе со всеми аргументами
  116. доступны для программы. Например, --command='python -h' заставит termtosvg записывать использование интерпретатора Python. Если этот параметр не установлен,
  117. termtosvg запишет программу, указанную в переменной окружения \$SHELL или /bin/sh
  118. termtosvg -c 'ipython --pprint'
  119. ";ES;fi;;
  120. 7) S=M7;SC;if [[ $cur == enter ]];then R;echo "
  121. Продолжительность задержки между двумя последовательными циклами анимации в миллисекундах:
  122. termtosvg -D 2000
  123. ";ES;fi;;
  124. 8) S=M8;SC;if [[ $cur == enter ]];then R;echo -e "
  125. Геометрия экрана терминала, используемая для рендеринга анимации. Геометрия должна быть задана как количество столбцов и количество строк на экране разделены
  126. символом «х». Например, «80x24» для экрана с 82 столбцами и 19 строками:
  127. \033[32m termtosvg -g 80x24 animation.svg\033[0m
  128. ";ES;fi;;
  129. 9) S=M9;SC;if [[ $cur == enter ]];then R;echo " Распечатать использование и выход";ES;fi;;
  130. 10) S=M10;SC;if [[ $cur == enter ]];then R;echo "
  131. Установите минимальную продолжительность кадра в миллисекундах. Кадры продолжительностью менее MIN_DURATION миллисекунд будут объединены с последовательными
  132. кадрами поведение ошибки termtosvg заключается в создании кадра для каждого обновления экрана терминала, но при очень частой записи команд, которые обновляют экран,
  133. Это может привести к увеличению размера файла анимации. Применение минимальной продолжительности кадра помогает уменьшить количество кадров анимации и, таким
  134. образом, помогает контролировать размер анимации. MIN_DURATION по умолчанию составляет 1 миллисекунду:
  135. termtosvg -m 17 -M 2000
  136. ";ES;fi;;
  137. 11) S=M11;SC;if [[ $cur == enter ]];then R;echo "
  138. Установите максимальную продолжительность кадра на MAX_DURATION миллисекунд. Кадры, длящиеся дольше MAX_DURATION миллисекунд, просто увидят, что их
  139. продолжительность сокращено до MAX_DURATION.
  140. ";ES;fi;;
  141. 12) S=M12;SC;if [[ $cur == enter ]];then R;echo "
  142. Установите шаблон SVG, используемый для рендеринга анимации SVG. ШАБЛОН может быть одним из шаблонов по умолчанию (base16_default_dark, dracula, gjm8_play,
  143. gjm8_single_loop, gjm8, powershell, progress_bar, шпатлевка, solarized_dark, solarized_light, terminal_app, ubuntu, window_frame_js, window_frame_powershell,
  144. window_frame, xterm) или путь к допустимому шаблону:
  145. termtosvg -t ~/templates/my_template.svg
  146. ";ES;fi;;
  147. 13) S=M13;SC;if [[ $cur == enter ]];then R;echo "
  148. Вывод неподвижных кадров в формате SVG вместо анимированного SVG. Если указан этот параметр, output_path указывает на каталог назначения для кадров.
  149. ";ES;fi;;
  150. 14) S=M14;SC;if [[ $cur == enter ]];then R;echo "
  151. Шаблоны позволяют настраивать анимацию SVG, создаваемую termtosvg, несколькими способами, включая, помимо прочего:
  152. • Указание цветовой темы и шрифта, используемых для отображения сеанса терминала.
  153. • Добавление пользовательской рамки окна терминала в анимацию, чтобы она выглядела как настоящий терминал.
  154. • Добавлен код JavaScript для приостановки анимации, перехода к определенному кадру и т. д.
  155. См. termtosvg-templates для более подробной информации.
  156. ";ES;fi;;
  157. 15) S=M15;SC;if [[ $cur == enter ]];then R;echo " termtosvg -s -t gjm8_play";ES;fi;;
  158. #
  159. 16) S=M16;SC;if [[ $cur == enter ]];then R;exit 0;fi;;
  160. esac;POS;done