support arrow keys, page up/down, etc

This commit is contained in:
~d6 2022-03-24 01:26:06 -04:00
parent 676d9f5405
commit 201c549135
1 changed files with 50 additions and 2 deletions

View File

@ -96,6 +96,8 @@
@state [
&saw-esc $1 ( did we just see ESC? )
&saw-xterm $1 ( did we just see an ESC [ xterm sequence? )
&saw-vt $1 ( did we just see an ESC [ $N vt sequence? )
&modified $1 ( has the buffer been modified? )
&quitting $1 ( are we in the process of quitting? )
]
@ -577,7 +579,10 @@
;move-to-message-line JSR2
.File/success DEI2 STH2r EQU2 ( ok? ) ,&ok JCN
;messages/save-failed ,&finish JMP
&ok #00 .state/modified STZ ;messages/save-ok
&ok
#00 .state/modified STZ
;tmp/data ;filename ;str-copy JSR2
;messages/save-ok
&finish
;print JSR2 ;tmp/data ;print JSR2
;draw-all JSR2
@ -595,6 +600,47 @@
.Console/read DEI LIT '> EQU ( M-> ) ;goto-end JCN2
.Console/read DEI LIT 'g EQU ( M-g ) ;goto-line JCN2
.Console/read DEI LIT 'v EQU ( M-v ) ;page-up JCN2
.Console/read DEI LIT '[ EQU ( M-[ ) ;xterm JCN2
BRK
@xterm
#01 .state/saw-xterm STZ BRK
@on-key-vt ( -> )
.state/saw-vt LDZk STH #00 SWP STZ
.Console/read DEI LIT '~ EQU ,&ok JCN
POPr BRK
&ok
STHr DUP LIT '1 NEQ ,&not-1 JCN
( ^[[1~ -> home ) POP ;bol JMP2
&not-1 DUP LIT '2 NEQ ,&not-2 JCN
( ^[[2~ -> insert ) POP BRK
&not-2 DUP LIT '3 NEQ ,&not-3 JCN
( ^[[3~ -> delete ) POP ;delete JMP2
&not-3 DUP LIT '4 NEQ ,&not-4 JCN
( ^[[4~ -> end ) POP ;eol JMP2
&not-4 DUP LIT '5 NEQ ,&not-5 JCN
( ^[[5~ -> page up ) POP ;page-up JMP2
&not-5 DUP LIT '6 NEQ ,&not-6 JCN
( ^[[6~ -> page down ) POP ;page-down JMP2
&not-6 DUP LIT '7 NEQ ,&not-7 JCN
( ^[[7~ -> home ) POP ;bol JMP2
&not-7 DUP LIT '8 NEQ ,&not-8 JCN
( ^[[8~ -> end ) POP ;eol JMP2
&not-8
( ??? ) POP BRK
@on-key-xterm ( -> )
#00 .state/saw-xterm STZ
.Console/read DEI LIT 'A EQU ( ^[[A -> up ) ;up JCN2
.Console/read DEI LIT 'B EQU ( ^[[B -> down ) ;down JCN2
.Console/read DEI LIT 'C EQU ( ^[[C -> right ) ;forward JCN2
.Console/read DEI LIT 'D EQU ( ^[[D -> left ) ;back JCN2
.Console/read DEI LIT 'F EQU ( ^[[F -> end ) ;eol JCN2
.Console/read DEI LIT 'H EQU ( ^[[H -> home ) ;bol JCN2
.Console/read DEI LIT '0 LTH ;ignore JCN2
.Console/read DEI LIT '8 GTH ;ignore JCN2
.Console/read DEI .state/saw-vt STZ ( ^[[1 through ^[[8 )
BRK
@clear-line ( -> )
@ -620,6 +666,8 @@
@on-key
;clear-message-line JSR2
.prompt/active LDZ ;on-key-prompt JCN2
.state/saw-vt LDZ ;on-key-vt JCN2
.state/saw-xterm LDZ ;on-key-xterm JCN2
.state/saw-esc LDZ ;on-key-escaped JCN2
.Console/read DEI #01 EQU ( C-a ) ;bol JCN2
.Console/read DEI #02 EQU ( C-b ) ;back JCN2