keyboard.tin 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  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 mouse-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 mouse-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. #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. #line sub var #var key {$info[MACROS][+$id][arg1]};
  67. #replace key {\\} {\\};
  68. #var action {$info[MACROS][+$id][arg2]};
  69. #line sub var #var {macro-backup[$key]} {$action};
  70. };
  71. };
  72. #unvar key;
  73. };
  74. #alias {keyboard.restore-macro} {
  75. #kill macro;
  76. #local count {&macro-backup[]};
  77. #if { $count > 0 } {
  78. #local idx {};
  79. #loop {1} {$count} {idx} {
  80. #local key {*macro-backup[+$idx]};
  81. #local action {$macro-backup[+$idx]};
  82. #line sub var #macro {$key} {$action};
  83. };
  84. };
  85. };
  86. #alias {keyboard.DisableAllKeys} {
  87. #if { "$keyboard-mode" == "normal" } {
  88. keyboard.backup-macro;
  89. };
  90. #local ch {};
  91. #parse {abcdefghijklmnopqrstuvwxyz} {ch} {
  92. #macro {\c$ch} {#0} {1.000};
  93. #macro {$ch} {#0} {1.000};
  94. };
  95. #parse {ABCDEFGHIJKLMNOPQRSTUVWXYZ} {ch} {
  96. #macro {$ch} {#0} {1.000};
  97. };
  98. #parse {`1234567890-=~!@#$%^&*()_+} {ch} {
  99. #macro {$ch} {#0} {1.000};
  100. };
  101. #parse {,./<>?;':"[]\\|} {ch} {
  102. #macro {$ch} {#0} {1.000};
  103. };
  104. #macro {\x7B} {#0} {1.000};
  105. #macro {\x7D} {#0} {1.000};
  106. #macro { } {#0} {1.000};
  107. };
  108. #alias {keyboard.checkBufferEnd} {
  109. #local info {};
  110. #buffer info save info;
  111. #if { $info[LINE] < 0 || $info[LINE] >= $info[USED] } {
  112. keyboard.NormalMode;
  113. };
  114. };
  115. #nop 搜索条件;
  116. #var keyboard-search-pattern {};
  117. #nop 进入搜索模式;
  118. #alias {keyboard.SearchMode} {
  119. #local dir {%1};
  120. #if { "$keyboard-mode" == "search" } {
  121. #return;
  122. };
  123. #kill macro;
  124. #class keyboard-search-mode open;
  125. #var keyboard-mode {search};
  126. #var keyboard-search-dir {$dir};
  127. #macro {\cc} {keyboard.LessMode};
  128. #macro {\n} {
  129. #local input {};
  130. #cursor get input;
  131. #if { {$input} != {} } {
  132. #var keyboard-search-pattern {$input};
  133. #cursor clear;
  134. };
  135. keyboard.LessMode;
  136. keyboard.Search next;
  137. #if { "$keyboard-search-dir" == "down" } {
  138. prompt.Set {{search}{<159>$keyboard-search-pattern}};
  139. };
  140. #else {
  141. prompt.Set {{search}{<129>$keyboard-search-pattern}};
  142. };
  143. };
  144. #if { "$dir" == "up" } {
  145. #if { $keyboard-search-skip > 0 } {
  146. #var keyboard-search-skip {0};
  147. #var keyboard-search-last-find {0};
  148. };
  149. prompt.Change {<129>向上搜索<299>: };
  150. };
  151. #else {
  152. #if { $keyboard-search-skip < 0 } {
  153. #var keyboard-search-last-find {0};
  154. #var keyboard-search-skip {0};
  155. };
  156. prompt.Change {<159>向下搜索<299>: };
  157. };
  158. #class keyboard-search-mode close;
  159. };
  160. #var keyboard-search-skip {0};
  161. #var keyboard-search-last-find {0};
  162. #alias {keyboard.Search} {
  163. #local dir {%1};
  164. #if { {$keyboard-search-pattern} == {} } {
  165. #return;
  166. };
  167. #local old {$keyboard-search-skip};
  168. #switch {"$keyboard-search-dir/$dir"} {
  169. #case {"up/next"} {#math keyboard-search-skip {$keyboard-search-skip - 1}};
  170. #case {"up/prev"} {#math keyboard-search-skip {$keyboard-search-skip + 1}};
  171. #case {"down/next"} {#math keyboard-search-skip {$keyboard-search-skip + 1}};
  172. #case {"down/prev"} {#math keyboard-search-skip {$keyboard-search-skip - 1}};
  173. };
  174. #local line {};
  175. #line quiet #buffer find {$keyboard-search-skip} {$keyboard-search-pattern} {line};
  176. #if { "$line" == "{|0|$keyboard-search-last-find}" } {
  177. #var keyboard-search-skip {$old};
  178. };
  179. #else {
  180. #var keyboard-search-last-find {$line};
  181. #buffer jump $line;
  182. };
  183. };
  184. keyboard.NormalMode;