#nop vim: set filetype=tt:; #var lib_ui_keyboard[META] { {NAME} {键盘绑定} {DESC} {允许玩家在正常输入模式和翻屏模式之间切换} {AUTHOR} {担子炮} }; #var keyboard-mode {}; #alias {keyboard.LessMode} { #if { "$keyboard-mode" == "less" } { #return; }; keyboard.DisableAllKeys; #var keyboard-mode {less}; #class keyboard-less-mode open; #macro {g} {#buffer home}; #macro {G} {#buffer end}; #macro {j} {#buffer down 1}; #macro {k} {#buffer up 1}; #macro {\cf} {#buffer down 20}; #macro {\cb} {#buffer up 20}; #macro {n} {keyboard.Search next}; #macro {N} {keyboard.Search prev}; #macro {\cc} {keyboard.NormalMode}; #macro {?} {keyboard.SearchMode up}; #macro {/} {keyboard.SearchMode down}; #local mode {}; #if { {$keyboard-search-pattern} == {} } { #local mode {<139>【翻页模式】<299>}; }; #elseif { "$keyboard-search-dir" == "down" } { #local mode {<159>【向下搜索】<299>}; }; #else { #local mode {<129>【向上搜索】<299>}; }; prompt.Change {$mode<169>Ctrl+b<299>/<169>Ctrl+f<299> 前后翻页 <169>j<299>/<169>k<299> 上下滚动 <169>g<299>/<169>G<299> 到开头/结尾 <169>Ctrl+C<299> 回到正常模式 <169>?<299>/<169>/<299> 输入搜索条件 <169>n<299>/<169>N<299> 前后搜索}; #class keyboard-less-mode close; }; #alias {keyboard.NormalMode} { #if { "$keyboard-mode" == "normal" } { #return; }; #if { "$keyboard-mode" != "" } { keyboard.restore-macro; }; #var keyboard-mode {normal}; #var keyboard-search-pattern {}; #var keyboard-search-dir {}; #buffer end; prompt.Set {{search}{}}; prompt.Change {}; #class {keyboard-normal-mode} assign {#macro {\cb} {keyboard.LessMode; #buffer up 20}}; }; #alias {keyboard.backup-macro} { #info macro {save}; #var macro-backup {}; #local count {&info[MACROS][]}; #if { $count > 0 } { #local id {}; #loop {1} {&info[MACROS][]} {id} { #var key {$info[MACROS][+$id][arg1]}; #var action {$info[MACROS][+$id][arg2]}; #var class {$info[MACROS][+$id][class]}; #list {macro-backup} {add} {{ {key} {$key} {class} {$class} {action}{$action} }}; }; }; #unvar key; }; #alias {keyboard.restore-macro} { #kill macro; #local count {¯o-backup[]}; #if { $count > 0 } { #local idx {}; #loop {1} {$count} {idx} { #local key {$macro-backup[+$idx][key]}; #local class {$macro-backup[+$idx][class]}; #local action {$macro-backup[+$idx][action]}; #line sub var #class {$class} {assign} {#macro {$key} {$action}}; }; }; }; #alias {keyboard.DisableAllKeys} { #if { "$keyboard-mode" == "normal" } { keyboard.backup-macro; }; #local ch {}; #parse {abcdefghijklmnopqrstuvwxyz} {ch} { #macro {\c$ch} {#0} {1.000}; #macro {$ch} {#0} {1.000}; }; #parse {ABCDEFGHIJKLMNOPQRSTUVWXYZ} {ch} { #macro {$ch} {#0} {1.000}; }; #parse {`1234567890-=~!@#$%^&*()_+} {ch} { #macro {$ch} {#0} {1.000}; }; #parse {,./<>?;':"[]\\|} {ch} { #macro {$ch} {#0} {1.000}; }; #macro {\x7B} {#0} {1.000}; #macro {\x7D} {#0} {1.000}; #macro { } {#0} {1.000}; }; #alias {keyboard.checkBufferEnd} { #local info {}; #buffer info save info; #if { $info[LINE] < 0 || $info[LINE] >= $info[USED] } { keyboard.NormalMode; }; }; #nop 搜索条件; #var keyboard-search-pattern {}; #nop 进入搜索模式; #alias {keyboard.SearchMode} { #local dir {%1}; #if { "$keyboard-mode" == "search" } { #return; }; #kill macro; #class keyboard-search-mode open; #var keyboard-mode {search}; #var keyboard-search-dir {$dir}; #macro {\cc} {keyboard.LessMode}; #macro {\n} { #local input {}; #cursor get input; #if { {$input} != {} } { #var keyboard-search-pattern {$input}; #cursor clear; }; keyboard.LessMode; keyboard.Search next; #if { "$keyboard-search-dir" == "down" } { prompt.Set {{search}{<159>$keyboard-search-pattern}}; }; #else { prompt.Set {{search}{<129>$keyboard-search-pattern}}; }; }; #if { "$dir" == "up" } { #if { $keyboard-search-skip > 0 } { #var keyboard-search-skip {0}; #var keyboard-search-last-find {0}; }; prompt.Change {<129>向上搜索<299>: }; }; #else { #if { $keyboard-search-skip < 0 } { #var keyboard-search-last-find {0}; #var keyboard-search-skip {0}; }; prompt.Change {<159>向下搜索<299>: }; }; #class keyboard-search-mode close; }; #var keyboard-search-skip {0}; #var keyboard-search-last-find {0}; #alias {keyboard.Search} { #local dir {%1}; #if { {$keyboard-search-pattern} == {} } { #return; }; #local old {$keyboard-search-skip}; #switch {"$keyboard-search-dir/$dir"} { #case {"up/next"} {#math keyboard-search-skip {$keyboard-search-skip - 1}}; #case {"up/prev"} {#math keyboard-search-skip {$keyboard-search-skip + 1}}; #case {"down/next"} {#math keyboard-search-skip {$keyboard-search-skip + 1}}; #case {"down/prev"} {#math keyboard-search-skip {$keyboard-search-skip - 1}}; }; #local line {}; #line quiet #buffer find {$keyboard-search-skip} {$keyboard-search-pattern} {line}; #if { "$line" == "{|0|$keyboard-search-last-find}" } { #var keyboard-search-skip {$old}; }; #else { #var keyboard-search-last-find {$line}; #buffer jump $line; }; }; keyboard.NormalMode;