support moving by word
This commit is contained in:
parent
f1f8c97537
commit
397d60693b
62
femto.tal
62
femto.tal
|
@ -44,14 +44,13 @@
|
|||
( - help text )
|
||||
( - open file command? )
|
||||
( - close file command? )
|
||||
( - move by word/paragraph )
|
||||
( - search&replace )
|
||||
|
||||
|00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 ]
|
||||
|10 @Console [ &vector $2 &read $1 &pad $5 &write $1 &error $1 ]
|
||||
|a0 @File [ &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 ]
|
||||
|
||||
( MAX file size is currently #c950, i.e. 51536 bytes )
|
||||
( MAX file size is currently #d000, i.e. 53248 bytes )
|
||||
|
||||
%dbg { #ff .System/debug DEO }
|
||||
%emit { .Console/write DEO }
|
||||
|
@ -87,7 +86,6 @@
|
|||
%emit-~ { LIT2 '~ 18 DEO }
|
||||
|
||||
%quit! { #01 .System/halt DEO BRK }
|
||||
|
||||
%lmargin { #0006 }
|
||||
|
||||
( zero page )
|
||||
|
@ -194,7 +192,7 @@
|
|||
( the interpreter to halt. )
|
||||
@error! ( msg* -> )
|
||||
emit-! sp
|
||||
&loop LDAk #00 EQU ,&done JMP
|
||||
&loop LDAk #00 EQU ,&done JCN
|
||||
LDAk emit INC2 ,&loop JMP
|
||||
&done POP2 nl dbg BRK
|
||||
|
||||
|
@ -205,7 +203,7 @@
|
|||
( TODO: enable closing/opening files with editor already running )
|
||||
@open-file ( filename* -> )
|
||||
.File/name DEO2
|
||||
#c950 .File/length DEO2
|
||||
#d000 .File/length DEO2
|
||||
;data .File/read DEO2
|
||||
|
||||
.File/success DEI2 #0000 GTH2 ,&ok JCN
|
||||
|
@ -318,18 +316,20 @@
|
|||
;redraw-statusbar-and-cursor JSR2
|
||||
;return JMP2
|
||||
|
||||
( move forward by one character )
|
||||
@forward ( -> )
|
||||
;go-forward JSR2 ;return JMP2
|
||||
|
||||
( move forward by one character )
|
||||
@go-forward ( -> )
|
||||
;cur-pos JSR2 ;last-pos JSR2 GTH2 ( ;return JCN2 ) ,&noop JCN
|
||||
;redraw-statusbar-and-cursor JSR2
|
||||
;cur-pos JSR2 ;last-pos JSR2 GTH2 ;return JCN2
|
||||
;cur-col JSR2 ;cur-len JSR2 LTH2 ,&normal JCN
|
||||
#0000 .cursor/col STZ2
|
||||
.cursor/row LDZ2 INC2 .cursor/row STZ2
|
||||
;ensure-visible-cursor JSR2
|
||||
;return JMP2
|
||||
;ensure-visible-cursor JMP2
|
||||
&normal
|
||||
;cur-col JSR2 INC2 .cursor/col STZ2
|
||||
;return JMP2
|
||||
&noop JMP2r
|
||||
|
||||
( move backward by one character )
|
||||
@back ( -> )
|
||||
|
@ -365,6 +365,40 @@
|
|||
;redraw-statusbar-and-cursor JSR2
|
||||
;return JMP2
|
||||
|
||||
@is-word-char ( c^ -> bool^ )
|
||||
DUP #2f GTH OVR #3a LTH AND STH
|
||||
DUP #40 GTH OVR #5b LTH AND STH ORAr
|
||||
DUP #60 GTH SWP #7b LTH AND STHr ORA JMP2r
|
||||
|
||||
@not-word-char ( c^ -> bool^ )
|
||||
;is-word-char JSR2 #00 EQU JMP2r
|
||||
|
||||
@forward-by-word ( -> )
|
||||
;cur-pos JSR2
|
||||
&first
|
||||
LDAk #00 EQU ,&done JCN
|
||||
LDAk ;is-word-char JSR2 ,&second JCN
|
||||
INC2 ;go-forward JSR2 ,&first JMP
|
||||
&second
|
||||
LDAk #00 EQU ,&done JCN
|
||||
LDAk ;not-word-char JSR2 ,&done JCN
|
||||
INC2 ;go-forward JSR2 ,&second JMP
|
||||
&done
|
||||
POP2 ;return JMP2
|
||||
|
||||
@back-by-word ( -> )
|
||||
;cur-pos JSR2 #0001 SUB2
|
||||
&first
|
||||
DUP2 ;data LTH2 ,&done JCN
|
||||
LDAk ;is-word-char JSR2 ,&second JCN
|
||||
#0001 SUB2 ;go-back JSR2 ,&first JMP
|
||||
&second
|
||||
DUP2 ;data LTH2 ,&done JCN
|
||||
LDAk ;not-word-char JSR2 ,&done JCN
|
||||
#0001 SUB2 ;go-back JSR2 ,&second JMP
|
||||
&done
|
||||
POP2 ;return JMP2
|
||||
|
||||
( center buffer view on the current line )
|
||||
@center-view
|
||||
.term/rows LDZ2 INC2 #0002 DIV2 STH2k
|
||||
|
@ -786,14 +820,14 @@
|
|||
( )
|
||||
( called by on-key with state/saw-esc is true )
|
||||
( )
|
||||
( TODO: M-f and M-b for next/previous word )
|
||||
( M-n and M-p for next/previous paragraph )
|
||||
( maybe M-% for search&replace )
|
||||
( TODO: maybe M-% for search&replace )
|
||||
@on-key-escaped ( -> )
|
||||
#00 .state/saw-esc STZ
|
||||
.state/key LDZ LIT '< EQU ( M-< ) ;goto-start JCN2
|
||||
.state/key LDZ LIT '> EQU ( M-> ) ;goto-end JCN2
|
||||
.state/key LDZ LIT 'b EQU ( M-b ) ;back-by-word JCN2
|
||||
.state/key LDZ LIT 'c EQU ( M-c ) ;toggle-color JCN2
|
||||
.state/key LDZ LIT 'f EQU ( M-f ) ;forward-by-word JCN2
|
||||
.state/key LDZ LIT 'g EQU ( M-g ) ;goto-line JCN2
|
||||
.state/key LDZ LIT 's EQU ( M-s ) ;regex-search JCN2
|
||||
.state/key LDZ LIT 't EQU ( M-t ) ;toggle-tabs JCN2
|
||||
|
@ -1550,4 +1584,4 @@
|
|||
@filename $80
|
||||
|
||||
( actual file data to be edited )
|
||||
@data $c950
|
||||
@data $d000
|
||||
|
|
Loading…
Reference in New Issue