kXtermKeyBindingsE.sh 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. #!/bin/bash
  2. source "sXterm.sh"
  3. # это цвет текста списка перед курсором при значении 0 в переменной UNMARK(){ $e "\e[0m";}
  4. MARK(){ $e "\e[1;30m";}
  5. #
  6. HEAD()
  7. {
  8. for (( a=2; a<=21; a++ ))
  9. do
  10. TPUT $a 1
  11. $E "\e[90m\xE2\x94\x82 \xE2\x94\x82\e[0m";
  12. done
  13. }
  14. FOOT()
  15. {
  16. MARK;
  17. TPUT 1 1;$E "\e[90m┌────────────────────────────────────────────────────────────────────────────────┐\033[0m";
  18. TPUT 2 3;$E "\e[1;36mKey Bindings \e[0m\e[36m Привязки клавиш\e[0m";
  19. TPUT 3 1;$E "\e[90m├────────────────────────────────────────────────────────────────────────────────┤\e[0m";
  20. TPUT 4 3;$E "\e[36mDefault Key Bindings\e[0m Привязки клавиш по умолчанию";
  21. TPUT 5 3;$E "\e[36mПривязки по умолчанию в окне VTxxx используют токен SELECT";
  22. TPUT 6 3;$E "\e[36mкоторый задается ресурсом selectToClipboard.";
  23. TPUT 7 1;$E "\e[90m├────────────────────────────────────────────────────────────────────────────────┤\e[0m";
  24. TPUT 20 1;$E "\e[90m├─ Up \xE2\x86\x91 \xE2\x86\x93 Down Select Enter ─────────────────────────────────────────────────────┤\e[0m";
  25. TPUT 22 1;$E "\e[90m└────────────────────────────────────────────────────────────────────────────────┘\033[0m";
  26. UNMARK;
  27. }
  28. #
  29. M0(){ TPUT 8 3; $e "Это для виджета \e[32m vt100 \e[0m";}
  30. M1(){ TPUT 9 3; $e "Это для виджета \e[32m tek4014 \e[0m";}
  31. M2(){ TPUT 10 3; $e "Пользовательские привязки клавиш \e[32m Custom Key Bindings \e[0m";}
  32. M3(){ TPUT 11 3; $e "В примере используется имя класса \e[32m VT100 \e[0m";}
  33. M4(){ TPUT 12 3; $e "к клавишам Home и End: \e[32m \e[0m";}
  34. M5(){ TPUT 13 3; $e "shift-Home и shift-End будут недоступны для приложений \e[32m \e[0m";}
  35. M6(){ TPUT 14 3; $e "Вы по-прежнему будете использовать левую и правую кнопки мыши \e[32m \e[0m";}
  36. M7(){ TPUT 15 3; $e "Функция раскладки клавиатуры позволяет переключаться меж наборами переводов\e[32m \e[0m";}
  37. M8(){ TPUT 16 3; $e "Привязки полосы прокрутки по умолчанию \e[32m \e[0m";}
  38. M9(){ TPUT 17 3; $e "События, которые виджет полосы прокрутки вообще не распознает \e[32m \e[0m";}
  39. M10(){ TPUT 18 3; $e "Выделить/Вставить \e[32m Ctrl Shift <KeyPress> \e[0m";}
  40. #
  41. M11(){ TPUT 21 3; $e "Выход \e[32m Exit \e[0m";}
  42. LM=11
  43. MENU(){ for each in $(seq 0 $LM);do M${each};done;}
  44. POS(){ if [[ $cur == up ]];then ((i--));fi
  45. if [[ $cur == dn ]];then ((i++));fi
  46. if [[ $i -lt 0 ]];then i=$LM;fi
  47. if [[ $i -gt $LM ]];then i=0;fi;}
  48. REFRESH(){ after=$((i+1)); before=$((i-1))
  49. if [[ $before -lt 0 ]];then before=$LM;fi
  50. if [[ $after -gt $LM ]];then after=0;fi
  51. if [[ $j -lt $i ]];then UNMARK;M$before;else UNMARK;M$after;fi
  52. if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
  53. UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
  54. INIT(){ R;HEAD;FOOT;MENU;}
  55. SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
  56. # Функция возвращения в меню
  57. ES(){ MARK;$e " ENTER = main menu ";$b;read;INIT;};INIT
  58. while [[ "$O" != " " ]]; do case $i in
  59. 0) S=M0;SC; if [[ $cur == enter ]];then R;echo -e "
  60. Shift <KeyPress> Prior:scroll-back(1,halfpage) \n\
  61. Shift <KeyPress> Next:scroll-forw(1,halfpage) \n\
  62. Shift <KeyPress> Select:select-cursor-start() \
  63. select-cursor-end(SELECT, CUT_BUFFER0) \n\
  64. Shift <KeyPress> Insert:insert-selection(SELECT, CUT_BUFFER0) \n\
  65. Alt <Key>Return:fullscreen() \n\
  66. <KeyRelease> Scroll_Lock:scroll-lock() \n\
  67. Shift~Ctrl <KeyPress> KP_Add:larger-vt-font() \n\
  68. Shift Ctrl <KeyPress> KP_Add:smaller-vt-font() \n\
  69. Shift <KeyPress> KP_Subtract:smaller-vt-font() \n\
  70. ~Meta <KeyPress>:insert-seven-bit() \n\
  71. Meta <KeyPress>:insert-eight-bit() \n\
  72. !Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
  73. !Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
  74. !Lock Ctrl @Num_Lock <Btn1Down>:popup-menu(mainMenu) \n\
  75. ! @Num_Lock Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
  76. ~Meta <Btn1Down>:select-start() \n\
  77. ~Meta <Btn1Motion>:select-extend() \n\
  78. !Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
  79. !Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
  80. !Lock Ctrl @Num_Lock <Btn2Down>:popup-menu(vtMenu) \n\
  81. ! @Num_Lock Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
  82. ~Ctrl ~Meta <Btn2Down>:ignore() \n\
  83. Meta <Btn2Down>:clear-saved-lines() \n\
  84. ~Ctrl ~Meta <Btn2Up>:insert-selection(SELECT, CUT_BUFFER0) \n\
  85. !Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
  86. !Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
  87. !Lock Ctrl @Num_Lock <Btn3Down>:popup-menu(fontMenu) \n\
  88. ! @Num_Lock Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
  89. ~Ctrl ~Meta <Btn3Down>:start-extend() \n\
  90. ~Meta <Btn3Motion>:select-extend() \n\
  91. Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
  92. Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
  93. Lock @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
  94. @Num_Lock Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
  95. <Btn4Down>:scroll-back(5,line,m) \n\
  96. Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
  97. Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
  98. Lock @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
  99. @Num_Lock Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
  100. <Btn5Down>:scroll-forw(5,line,m) \n\
  101. <BtnUp>:select-end(SELECT, CUT_BUFFER0) \n\
  102. <BtnMotion>:pointer-motion() \n\
  103. <BtnDown>:pointer-button() \n\
  104. <BtnUp>:pointer-button() \n\
  105. <BtnDown>:ignore()
  106. ";ES;fi;;
  107. 1) S=M1;SC; if [[ $cur == enter ]];then R;echo -e "
  108. Привязки по умолчанию в окне Tektronix аналогичны,
  109. но менее обширны. Это для виджета tek4014:
  110. ~Meta<KeyPress>: insert-seven-bit() \n\
  111. Meta<KeyPress>: insert-eight-bit() \n\
  112. !Ctrl <Btn1Down>: popup-menu(mainMenu) \n\
  113. !Lock Ctrl <Btn1Down>: popup-menu(mainMenu) \n\
  114. !Lock Ctrl @Num_Lock <Btn1Down>: popup-menu(mainMenu) \n\
  115. !Ctrl @Num_Lock <Btn1Down>: popup-menu(mainMenu) \n\
  116. !Ctrl <Btn2Down>: popup-menu(tekMenu) \n\
  117. !Lock Ctrl <Btn2Down>: popup-menu(tekMenu) \n\
  118. !Lock Ctrl @Num_Lock <Btn2Down>: popup-menu(tekMenu) \n\
  119. !Ctrl @Num_Lock <Btn2Down>: popup-menu(tekMenu) \n\
  120. Shift ~Meta<Btn1Down>: gin-press(L) \n\
  121. ~Meta<Btn1Down>: gin-press(l) \n\
  122. Shift ~Meta<Btn2Down>: gin-press(M) \n\
  123. ~Meta<Btn2Down>: gin-press(m) \n\
  124. Shift ~Meta<Btn3Down>: gin-press(R) \n\
  125. ~Meta<Btn3Down>: gin-press(r)
  126. ";ES;fi;;
  127. 2) S=M2;SC; if [[ $cur == enter ]];then R;echo -e "
  128. Custom Key Bindings
  129. Вы можете изменить ресурс переводов, переопределив его части или объединив с ним
  130. свои ресурсы. Вот пример, который использует выбор/вставку со сдвигом для копирования
  131. в буфер обмена и выбор/вставку без смещения для основного выбора.
  132. В каждом случае (другой) буфер вырезания также является целью
  133. или источником операции выбора/вставки. Однако важно помнить,
  134. что буферы вырезания хранят данные в кодировке ISO-8859-1,
  135. тогда как выборки могут хранить данные в различных форматах и кодировках.
  136. Хотя xterm владеет выбором, он выделяет его.
  137. Когда он теряет выделение, он удаляет соответствующую подсветку.
  138. Но вы все равно можете вставить из соответствующего вырезанного буфера.
  139. *VT100*translations: #override \n\
  140. ~Shift~Ctrl<Btn2Up>: insert-selection(PRIMARY, CUT_BUFFER0) \n\
  141. Shift~Ctrl<Btn2Up>: insert-selection(CLIPBOARD, CUT_BUFFER1) \n\
  142. ~Shift <BtnUp> : select-end(PRIMARY, CUT_BUFFER0) \n\
  143. Shift <BtnUp> : select-end(CLIPBOARD, CUT_BUFFER1)
  144. ";ES;fi;;
  145. 3) S=M3;SC; if [[ $cur == enter ]];then R;echo -e "
  146. В примере используется имя класса VT100, а не имя виджета.
  147. Это разные; имя класса может относиться к более чем одному виджету.
  148. Ведущий «*» используется, потому что иерархия виджетов выше виджета vt100
  149. зависит от того, скомпилирована ли поддержка панели инструментов в xterm.
  150. Большинство предопределенных переводов связаны с мышью,
  151. а некоторые используют специальные клавиши на клавиатуре.
  152. Приложения используют специальные клавиши
  153. (функциональные клавиши, клавиши курсора, клавиши клавиатуры)
  154. с модификаторами (shift, control, alt).
  155. Если xterm определяет перевод для данной комбинации специального ключа
  156. и модификатора, это делает его недоступным для использования приложениями
  157. в терминале. Например, можно расширить использование клавиш
  158. Page Up и Page Down, показанных здесь:
  159. Shift <KeyPress> Prior : scroll-back(1,halfpage) \n\
  160. Shift <KeyPress> Next : scroll-forw(1,halfpage) \n\
  161. ";ES;fi;;
  162. 4) S=M4;SC; if [[ $cur == enter ]];then R;echo -e "
  163. к клавишам Home и End:
  164. Shift <KeyPress> Home : scroll-to(begin) \n\
  165. Shift <KeyPress> End : scroll-to(end)
  166. ";ES;fi;;
  167. 5) S=M5;SC; if [[ $cur == enter ]];then R;echo -e "
  168. но тогда shift-Home и shift-End будут недоступны для приложений.
  169. Не всем удобно пользоваться трехкнопочной мышью.
  170. В колесной мыши средняя кнопка может быть колесиком.
  171. В качестве альтернативы вы можете добавить привязку с помощью сдвинутых клавиш:
  172. *VT100*translations: #override \n\
  173. Shift <Key>Home: copy-selection(SELECT) \n\
  174. Shift <Key>Insert: copy-selection(SELECT) \n\
  175. Ctrl Shift <Key>C: copy-selection(SELECT) \n\
  176. Ctrl Shift <Key>V: insert-selection(SELECT)
  177. ";ES;fi;;
  178. 6) S=M6;SC; if [[ $cur == enter ]];then R;echo -e "
  179. Вы по-прежнему будете использовать левую и правую кнопки мыши
  180. (обычно 1 и 3) для начала и расширения выделения.
  181. Помимо проблем с мышью, есть и клавиатуры с неудобной раскладкой.
  182. У некоторых отсутствует цифровая клавиатура, что затрудняет использование
  183. смещенной клавиатуры плюс и минус для переключения между размерами шрифта.
  184. Вы можете обойти это, назначив действия более легкодоступным клавишам:
  185. *VT100*translations: #override \n\
  186. Ctrl <Key> +: larger-vt-font() \n\
  187. Ctrl <Key> -: smaller-vt-font()
  188. ";ES;fi;;
  189. 7) S=M7;SC; if [[ $cur == enter ]];then R;echo -e "
  190. Функция раскладки клавиатуры позволяет переключаться между наборами переводов.
  191. В приведенном ниже примере показано, как можно использовать действие keymap()
  192. для добавления специальных клавиш для ввода часто используемых слов:
  193. *VT100.Translations: #override <Key>F13: keymap(dbx)
  194. *VT100.dbxKeymap.translations: \
  195. <Key>F14: keymap(None) \n\
  196. <Key>F17: string("next") \n\
  197. string(0x0d) \n\
  198. <Key>F18: string("step") \n\
  199. string(0x0d) \n\
  200. <Key>F19: string("continue") \n\
  201. string(0x0d) \n\
  202. <Key>F20: string("print ") \n\
  203. insert-selection(PRIMARY, CUT_BUFFER0)
  204. ";ES;fi;;
  205. 8) S=M8;SC; if [[ $cur == enter ]];then R;echo -e "
  206. Привязки полосы прокрутки по умолчанию
  207. Привязки клавиш обычно связаны с виджетами vt100 или tek4014,
  208. которые действуют как эмуляторы терминала.
  209. Полоса прокрутки Xterm (и панель инструментов, если она настроена)
  210. — это отдельные виджеты. Поскольку все они используют X Toolkit,
  211. у них есть соответствующие ресурсы перевода.
  212. количество уровней виджетов, которые они могут содержать.
  213. Виджет полосы прокрутки является потомком виджета vt100.
  214. Он расположен поверх виджета vt100.
  215. Включение и выключение полосы прокрутки приводит к изменению размера виджета vt100.
  216. Привязки по умолчанию для виджета полосы прокрутки используют только события кнопки мыши:
  217. <Btn5Down>: StartScroll(Forward) \n\
  218. <Btn1Down>: StartScroll(Forward) \n\
  219. <Btn2Down>: StartScroll(Continuous) MoveThumb() NotifyThumb() \n\
  220. <Btn3Down>: StartScroll(Backward) \n\
  221. <Btn4Down>: StartScroll(Backward) \n\
  222. <Btn2Motion>: MoveThumb() NotifyThumb() \n\
  223. <BtnUp>: NotifyScroll(Proportional) EndScroll()
  224. ";ES;fi;;
  225. 9) S=M9;SC; if [[ $cur == enter ]];then R;echo -e "
  226. События, которые виджет полосы прокрутки вообще не распознает, теряются.
  227. Однако при запуске xterm дополняет эти переводы переводами по умолчанию,
  228. используемыми для виджета vt100, вместе с ресурсными «действиями»,
  229. которые используют эти переводы. Поскольку виджеты полосы прокрутки
  230. (или строки меню) не распознают эти действия
  231. (но поскольку у них есть соответствующий перевод), они передаются виджету vt100.
  232. Это дополнение к переводам полосы прокрутки имеет несколько ограничений:
  233. • Xterm знает переводы по умолчанию, но нет подходящего интерфейса библиотеки
  234. для определения того, какие настройки пользователь мог добавить в виджет vt100.
  235. Все, что может сделать xterm, — это дополнить виджет полосы прокрутки,
  236. чтобы дать ему ту же отправную точку для дальнейшей настройки пользователем.
  237. • События в промежутке между виджетами могут быть потеряны.
  238. • Последовательности компоновки, начатые в одном виджете,
  239. не могут быть завершены в другом,
  240. поскольку методы ввода для каждого виджета не имеют общей контекстной информации.
  241. Большинство настроек перевода полосы прокрутки не касаются привязок клавиш.
  242. Скорее, пользователи обычно больше заинтересованы в изменении привязки кнопок мыши.
  243. Например, некоторые люди предпочитают использовать левую кнопку указателя
  244. для перетаскивания большого пальца полосы прокрутки.
  245. Это можно настроить, изменив ресурс перевода, например,
  246. *VT100.scrollbar.translations: #override \n\
  247. <Btn5Down>: StartScroll(Forward) \n\
  248. <Btn1Down>: StartScroll(Continuous) MoveThumb() NotifyThumb() \n\
  249. <Btn4Down>: StartScroll(Backward) \n\
  250. <Btn1Motion>: MoveThumb() NotifyThumb() \n\
  251. <BtnUp>: NotifyScroll(Proportional) EndScroll()
  252. ";ES;fi;;
  253. 10) S=M10;SC;if [[ $cur == enter ]];then R;echo -e "\e[32m
  254. XTerm*vt100.translations: #override
  255. Shift Ctrl <Key> C: copy-selection(CLIPBOARD) \\\n\\\ \e[0m
  256. \e[32m Shift Ctrl <Key> V: insert-selection(CLIPBOARD)\e[0m
  257. ";ES;fi;;
  258. #
  259. 11) S=M11;SC;if [[ $cur == enter ]];then R;clear;exit 0;fi;;
  260. esac;POS;done