fix drum cursor handling, refactor chat newline splitter

This commit is contained in:
Anton Dyudin 2015-10-22 13:23:44 -07:00
parent cd7d41f4df
commit 859bce32c9
2 changed files with 29 additions and 28 deletions

View File

@ -763,27 +763,29 @@
++ sh-sane-chat :: sanitize chatter
|= buf=(list ,@c)
^- (list sole-edit)
?~ buf ~
=+ [inx=0 sap=0 con=0]
|^ run
++ fix |=(cha=@ [%mor [%del inx] [%ins inx `@c`cha] ~])
++ run ^- (list sole-edit)
?~ buf ~
?: =(i.buf (turf '•'))
?~ con [[%del inx] run(buf t.buf)]
run(con 0, inx +(inx), buf t.buf)
?: =(64 con)
=+ dif=(sub inx sap)
?: (lth dif 64)
[(fix(inx sap) (turf '•')) run(con dif)]
[[%ins inx (turf '•')] run(con 0, inx +(inx))]
?: =(i.buf ' ')
run(sap inx, inx +(inx), con +(con), buf t.buf)
=+ lit=run(inx +(inx), con +(con), buf t.buf)
?: |((lth i.buf 32) (gth i.buf 126))
[(fix '?') lit]
?: &((gte i.buf 'A') (lte i.buf 'Z'))
[(fix (add 32 i.buf)) lit]
lit
|^ ^- (list sole-edit)
?: =(i.buf (turf '•'))
?. =(0 con) newline
[[%del inx] ?~(t.buf ~ $(buf t.buf))]
?: =(i.buf ' ')
?. =(64 con) advance(sap inx)
[(fix (turf '•')) newline]
?: =(64 con)
=+ dif=(sub inx sap)
?: (lth dif 64)
[(fix(inx sap) (turf '•')) $(con dif)]
[[%ins inx (turf '•')] $(con 0, inx +(inx))]
?: |((lth i.buf 32) (gth i.buf 126))
[(fix '?') advance]
?: &((gte i.buf 'A') (lte i.buf 'Z'))
[(fix (add 32 i.buf)) advance]
advance
::
++ advance ?~(t.buf ~ $(con +(con), inx +(inx), buf t.buf))
++ newline ?~(t.buf ~ $(con 0, inx +(inx), buf t.buf))
++ fix |=(cha=@ [%mor [%del inx] [%ins inx `@c`cha] ~])
--
::
++ sh-sane :: sanitize input

View File

@ -495,7 +495,7 @@
?. liv
?: (~(has in (deft-fish our)) gyl)
(se-blit qit/~)
(se-nuke gyl)
(se-nuke gyl)
..ta(fug (~(put by fug) gyl ``target`+<+))
::
++ ta-poke |=(a=pear +>(..ta (se-poke gyl a))) :: poke gyl
@ -556,7 +556,7 @@
(ta-act %clr ~)
:: .(+> (se-blit %bel ~))
=+ pre=(dec pos.inp)
(ta-hom(pos.inp pre) %del pre)
(ta-hom %del pre)
::
++ ta-ctl :: hear control
|= key=@ud
@ -596,13 +596,12 @@
==
%u ?: =(0 pos.inp)
ta-bel
%- ta-hom(pos.inp 0, kil `(scag pos.inp buf.say.inp))
%- ta-hom(kil `(scag pos.inp buf.say.inp))
(ta-cut 0 pos.inp)
%v ta-bel
%x +>(+> se-anon)
%y ?~ kil ta-bel
%- ta-hom(pos.inp (add pos.inp (lent u.kil)))
(ta-cat pos.inp u.kil)
%y ?~ kil ta-bel
(ta-hom (ta-cat pos.inp u.kil))
==
::
++ ta-cru :: hear crud
@ -653,7 +652,7 @@
|- ^- @ud
?- -.ted
%del ?:((gth pos.inp p.ted) (dec pos.inp) pos.inp)
%ins ?:((lte pos.inp p.ted) +(pos.inp) pos.inp)
%ins ?:((gte pos.inp p.ted) +(pos.inp) pos.inp)
%mor |- ^- @ud
?~ p.ted pos.inp
$(p.ted t.p.ted, pos.inp ^$(ted i.p.ted))
@ -743,7 +742,7 @@
^+ +>
?^ ris
(ta-ser txt)
%- ta-hom(pos.inp (add (lent txt) pos.inp))
%- ta-hom
:- %mor
|- ^- (list sole-edit)
?~ txt ~