keyboard.tin 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. #nop vim: set filetype=tt:;
  2. #var lib_ui_keyboard[META] {
  3. {NAME} {键盘绑定}
  4. {DESC} {允许玩家在正常输入模式和翻屏模式之间切换}
  5. {AUTHOR} {担子炮}
  6. };
  7. #var keyboard-mode {};
  8. #alias {keyboard.LessMode} {
  9. #if { "$keyboard-mode" == "less" } {
  10. #return;
  11. };
  12. keyboard.DisableAllKeys;
  13. #var keyboard-mode {less};
  14. #class keyboard-less-mode open;
  15. #macro {g} {#buffer home};
  16. #macro {G} {#buffer end};
  17. #macro {j} {#buffer down 1};
  18. #macro {k} {#buffer up 1};
  19. #macro {\cf} {#buffer down 20};
  20. #macro {\cb} {#buffer up 20};
  21. #macro {n} {keyboard.Search next};
  22. #macro {N} {keyboard.Search prev};
  23. #macro {\cc} {keyboard.NormalMode};
  24. #macro {?} {keyboard.SearchMode up};
  25. #macro {/} {keyboard.SearchMode down};
  26. #local mode {};
  27. #if { {$keyboard-search-pattern} == {} } {
  28. #local mode {<139>【翻页模式】<299>};
  29. };
  30. #elseif { "$keyboard-search-dir" == "down" } {
  31. #local mode {<159>【向下搜索】<299>};
  32. };
  33. #else {
  34. #local mode {<129>【向上搜索】<299>};
  35. };
  36. prompt.Change {$mode<169>Ctrl+b<299>/<169>Ctrl+f<299> 前后翻页
  37. <169>j<299>/<169>k<299> 上下滚动
  38. <169>g<299>/<169>G<299> 到开头/结尾
  39. <169>Ctrl+C<299> 回到正常模式
  40. <169>?<299>/<169>/<299> 输入搜索条件
  41. <169>n<299>/<169>N<299> 前后搜索};
  42. #class keyboard-less-mode close;
  43. };
  44. #alias {keyboard.NormalMode} {
  45. #if { "$keyboard-mode" == "normal" } {
  46. #return;
  47. };
  48. #if { "$keyboard-mode" != "" } {
  49. keyboard.restore-macro;
  50. };
  51. #var keyboard-mode {normal};
  52. #var keyboard-search-pattern {};
  53. #var keyboard-search-dir {};
  54. #buffer end;
  55. prompt.Set {{search}{}};
  56. prompt.Change {};
  57. #class {keyboard-normal-mode} assign {#macro {\cb} {keyboard.LessMode; #buffer up 20}};
  58. };
  59. #alias {keyboard.backup-macro} {
  60. #info macro {save};
  61. #var macro-backup {};
  62. #local count {&info[MACROS][]};
  63. #if { $count > 0 } {
  64. #local id {};
  65. #loop {1} {&info[MACROS][]} {id} {
  66. #var key {$info[MACROS][+$id][arg1]};
  67. #var action {$info[MACROS][+$id][arg2]};
  68. #var class {$info[MACROS][+$id][class]};
  69. #list {macro-backup} {add} {{
  70. {key} {$key}
  71. {class} {$class}
  72. {action}{$action}
  73. }};
  74. };
  75. };
  76. #unvar key;
  77. };
  78. #alias {keyboard.restore-macro} {
  79. #kill macro;
  80. #local count {&macro-backup[]};
  81. #if { $count > 0 } {
  82. #local idx {};
  83. #loop {1} {$count} {idx} {
  84. #local key {$macro-backup[+$idx][key]};
  85. #local class {$macro-backup[+$idx][class]};
  86. #local action {$macro-backup[+$idx][action]};
  87. #line sub var #class {$class} {assign} {#macro {$key} {$action}};
  88. };
  89. };
  90. };
  91. #alias {keyboard.DisableAllKeys} {
  92. #if { "$keyboard-mode" == "normal" } {
  93. keyboard.backup-macro;
  94. };
  95. #local ch {};
  96. #parse {abcdefghijklmnopqrstuvwxyz} {ch} {
  97. #macro {\c$ch} {#0} {1.000};
  98. #macro {$ch} {#0} {1.000};
  99. };
  100. #parse {ABCDEFGHIJKLMNOPQRSTUVWXYZ} {ch} {
  101. #macro {$ch} {#0} {1.000};
  102. };
  103. #parse {`1234567890-=~!@#$%^&*()_+} {ch} {
  104. #macro {$ch} {#0} {1.000};
  105. };
  106. #parse {,./<>?;':"[]\\|} {ch} {
  107. #macro {$ch} {#0} {1.000};
  108. };
  109. #macro {\x7B} {#0} {1.000};
  110. #macro {\x7D} {#0} {1.000};
  111. #macro { } {#0} {1.000};
  112. };
  113. #alias {keyboard.checkBufferEnd} {
  114. #local info {};
  115. #buffer info save info;
  116. #if { $info[LINE] < 0 || $info[LINE] >= $info[USED] } {
  117. keyboard.NormalMode;
  118. };
  119. };
  120. #nop 搜索条件;
  121. #var keyboard-search-pattern {};
  122. #nop 进入搜索模式;
  123. #alias {keyboard.SearchMode} {
  124. #local dir {%1};
  125. #if { "$keyboard-mode" == "search" } {
  126. #return;
  127. };
  128. #kill macro;
  129. #class keyboard-search-mode open;
  130. #var keyboard-mode {search};
  131. #var keyboard-search-dir {$dir};
  132. #macro {\cc} {keyboard.LessMode};
  133. #macro {\n} {
  134. #local input {};
  135. #cursor get input;
  136. #if { {$input} != {} } {
  137. #var keyboard-search-pattern {$input};
  138. #cursor clear;
  139. };
  140. keyboard.LessMode;
  141. keyboard.Search next;
  142. #if { "$keyboard-search-dir" == "down" } {
  143. prompt.Set {{search}{<159>$keyboard-search-pattern}};
  144. };
  145. #else {
  146. prompt.Set {{search}{<129>$keyboard-search-pattern}};
  147. };
  148. };
  149. #if { "$dir" == "up" } {
  150. #if { $keyboard-search-skip > 0 } {
  151. #var keyboard-search-skip {0};
  152. #var keyboard-search-last-find {0};
  153. };
  154. prompt.Change {<129>向上搜索<299>: };
  155. };
  156. #else {
  157. #if { $keyboard-search-skip < 0 } {
  158. #var keyboard-search-last-find {0};
  159. #var keyboard-search-skip {0};
  160. };
  161. prompt.Change {<159>向下搜索<299>: };
  162. };
  163. #class keyboard-search-mode close;
  164. };
  165. #var keyboard-search-skip {0};
  166. #var keyboard-search-last-find {0};
  167. #alias {keyboard.Search} {
  168. #local dir {%1};
  169. #if { {$keyboard-search-pattern} == {} } {
  170. #return;
  171. };
  172. #local old {$keyboard-search-skip};
  173. #switch {"$keyboard-search-dir/$dir"} {
  174. #case {"up/next"} {#math keyboard-search-skip {$keyboard-search-skip - 1}};
  175. #case {"up/prev"} {#math keyboard-search-skip {$keyboard-search-skip + 1}};
  176. #case {"down/next"} {#math keyboard-search-skip {$keyboard-search-skip + 1}};
  177. #case {"down/prev"} {#math keyboard-search-skip {$keyboard-search-skip - 1}};
  178. };
  179. #local line {};
  180. #line quiet #buffer find {$keyboard-search-skip} {$keyboard-search-pattern} {line};
  181. #if { "$line" == "{|0|$keyboard-search-last-find}" } {
  182. #var keyboard-search-skip {$old};
  183. };
  184. #else {
  185. #var keyboard-search-last-find {$line};
  186. #buffer jump $line;
  187. };
  188. };
  189. keyboard.NormalMode;