Previously, it would keep the old buffer displayed why typing over it. I had kept it thus because I didn't want to erase the buffer right away because the behavior is that when we type nothing, we keep the buffer as-is and repeat the action. Now, the behavior of I and F is much better. It keeps the buffer displayed until the first non-return keystroke and then erases it. Also, fixed PSP leak in _type and fixed PSP overuse in successful _F (they balanced out).pull/109/head
@@ -1,8 +1,6 @@ | |||||
: _type ( buf -- ) | : _type ( buf -- ) | ||||
C< DUP 0xd = IF 2DROP EXIT THEN OVER DUP _zbuf ( c a ) | |||||
BEGIN ( c a ) | |||||
C!+ C< SWAP | |||||
OVER 0x0d = UNTIL ( c a ) C! ; | |||||
C< DUP 0xd = IF 2DROP EXIT THEN SWAP DUP _zbuf ( c a ) | |||||
BEGIN ( c a ) C!+ C< TUCK 0x0d = UNTIL ( c a ) C! ; | |||||
( user-facing lines are 1-based ) | ( user-facing lines are 1-based ) | ||||
: T 1- DUP 64 * EDPOS ! _pln ; | : T 1- DUP 64 * EDPOS ! _pln ; | ||||
: P IBUF _type IBUF EDPOS @ _cpos 64 MOVE BLK!! ; | : P IBUF _type IBUF EDPOS @ _cpos 64 MOVE BLK!! ; | ||||
@@ -1,10 +1,10 @@ | |||||
: _F ( F without _pln. used in VE ) | |||||
FBUF _type FBUF EDPOS @ _cpos ( a1 a2 ) | |||||
: _F ( F without _type and _pln. used in VE ) | |||||
FBUF EDPOS @ _cpos ( a1 a2 ) | |||||
BEGIN | BEGIN | ||||
C@+ ROT ( a2+1 c2 a1 ) C@+ ROT ( a2+1 a1+1 c1 c2 ) | C@+ ROT ( a2+1 c2 a1 ) C@+ ROT ( a2+1 a1+1 c1 c2 ) | ||||
= NOT IF DROP FBUF THEN | |||||
= NOT IF DROP FBUF THEN ( a2 a1 ) | |||||
TUCK C@ 0xd = ( a1 a2 f1 ) | TUCK C@ 0xd = ( a1 a2 f1 ) | ||||
OVER BLK) = OR ( a1 a2 f1|f2 ) | OVER BLK) = OR ( a1 a2 f1|f2 ) | ||||
UNTIL | |||||
DUP BLK) < IF BLK( - FBUF + -^ EDPOS ! THEN DROP ; | |||||
: F _F EDPOS @ 64 / _pln ; | |||||
UNTIL ( a1 a2 ) | |||||
DUP BLK) < IF BLK( - FBUF + -^ EDPOS ! ELSE DROP THEN ; | |||||
: F FBUF _type _F EDPOS @ 64 / _pln ; |
@@ -3,8 +3,8 @@ | |||||
: _rbufsz ( size of linebuf to the right of curpos ) | : _rbufsz ( size of linebuf to the right of curpos ) | ||||
EDPOS @ 64 MOD 63 -^ ; | EDPOS @ 64 MOD 63 -^ ; | ||||
: i COMPILE I ; IMMEDIATE ( save overshadowed ) | : i COMPILE I ; IMMEDIATE ( save overshadowed ) | ||||
: _I ( I without _pln. used in VE ) | |||||
IBUF _type _rbufsz IBUF _blen 2DUP > IF | |||||
: _I ( I without _pln and _type. used in VE ) | |||||
_rbufsz IBUF _blen 2DUP > IF | |||||
TUCK - ( ilen chars-to-move ) | TUCK - ( ilen chars-to-move ) | ||||
SWAP EDPOS @ _cpos 2DUP + ( ctm ilen a a+ilen ) | SWAP EDPOS @ _cpos 2DUP + ( ctm ilen a a+ilen ) | ||||
3 PICK MOVE- ( ctm ilen ) | 3 PICK MOVE- ( ctm ilen ) | ||||
@@ -12,4 +12,4 @@ | |||||
ELSE DROP ( ilen becomes rbuffsize ) | ELSE DROP ( ilen becomes rbuffsize ) | ||||
THEN | THEN | ||||
DUP IBUF EDPOS @ _cpos ROT MOVE ( ilen ) EDPOS +! BLK!! ; | DUP IBUF EDPOS @ _cpos ROT MOVE ( ilen ) EDPOS +! BLK!! ; | ||||
: I _I EDPOS @ 64 / _pln ; | |||||
: I IBUF _type _I EDPOS @ 64 / _pln ; |
@@ -3,3 +3,8 @@ | |||||
: setpos ( -- ) EDPOS @ 64 /MOD | : setpos ( -- ) EDPOS @ 64 /MOD | ||||
3 + ( header ) SWAP 3 + ( gutter ) SWAP AT-XY ; | 3 + ( header ) SWAP 3 + ( gutter ) SWAP AT-XY ; | ||||
: cmv ( n -- , char movement ) acc@ * EDPOS @ + pos! ; | : cmv ( n -- , char movement ) acc@ * EDPOS @ + pos! ; | ||||
: buftype ( buf ln -- ) | |||||
3 OVER AT-XY C< DUP 0xd = IF 2DROP DROP EXIT THEN | |||||
( buf ln c ) 63 nspcs SWAP 4 SWAP AT-XY ( buf c ) | |||||
SWAP DUP _zbuf BEGIN ( c a ) | |||||
C!+ C< TUCK 0x0d = UNTIL ( c a ) C! ; |
@@ -2,8 +2,8 @@ | |||||
: $g ACC @ selblk 0acc ; | : $g ACC @ selblk 0acc ; | ||||
: $[ BLK> @ acc@ - selblk ; | : $[ BLK> @ acc@ - selblk ; | ||||
: $] BLK> @ acc@ + selblk ; | : $] BLK> @ acc@ + selblk ; | ||||
: $I mode! 'I' EMIT 3 1 AT-XY _I contents mode! SPC ; | |||||
: $F mode! 'F' EMIT 3 2 AT-XY _F setpos mode! SPC ; | |||||
: $I mode! 'I' EMIT IBUF 1 buftype _I contents mode! SPC ; | |||||
: $F mode! 'F' EMIT FBUF 2 buftype _F setpos mode! SPC ; | |||||
: $E E contents ; | : $E E contents ; | ||||
: $X acc@ X contents ; | : $X acc@ X contents ; | ||||
: $h -1 cmv ; : $l 1 cmv ; : $k -64 cmv ; : $j 64 cmv ; | : $h -1 cmv ; : $l 1 cmv ; : $k -64 cmv ; : $j 64 cmv ; | ||||