version 1.56, 2007/06/16 20:47:00
|
version 1.61, 2007/07/01 20:01:32
|
Line 201 require utf-8.fs
|
Line 201 require utf-8.fs
|
[IFUNDEF] #esc 27 Constant #esc [THEN] |
[IFUNDEF] #esc 27 Constant #esc [THEN] |
|
|
Variable curpos |
Variable curpos |
|
Variable screenw |
|
|
: cygwin? ( -- flag ) s" TERM" getenv s" cygwin" str= ; |
: cygwin? ( -- flag ) s" TERM" getenv s" cygwin" str= ; |
: at-xy? ( -- x y ) |
: at-xy? ( -- x y ) |
key? drop |
key? drop \ make sure prep_terminal() is executed |
#esc emit ." [6n" 0 0 |
#esc emit ." [6n" 0 0 |
BEGIN key dup 'R <> WHILE |
BEGIN key dup 'R <> WHILE |
dup '; = IF drop swap ELSE |
dup '; = IF drop swap ELSE |
dup '0 '9 1+ within IF '0 - swap 10 * + ELSE |
dup '0 '9 1+ within IF '0 - swap 10 * + ELSE |
drop THEN THEN |
drop THEN THEN |
REPEAT drop 1- swap 1- ; |
REPEAT drop 1- swap 1- ; |
: cursor@ ( -- n ) at-xy? form nip * + ; |
: cursor@ ( -- n ) at-xy? screenw @ * + ; |
: cursor! ( n -- ) form nip /mod at-xy ; |
: cursor! ( n -- ) screenw @ /mod at-xy ; |
: xcur-correct ( addr u -- ) |
: xcur-correct ( addr u -- ) |
cygwin? IF 2drop EXIT THEN |
cygwin? curpos @ -1 = or IF 2drop EXIT THEN |
x-width curpos @ + cursor@ - |
x-width curpos @ + cursor@ - |
form nip >r r@ 2/ + r@ / r> * negate curpos +! ; |
screenw @ >r r@ 2/ + r@ / r> * negate curpos +! ; |
: save-cursor ( -- ) |
: save-cursor ( -- ) |
cygwin? IF #esc emit '7 emit ELSE |
cygwin? IF #esc emit '7 emit ELSE |
key? IF -1 ELSE cursor@ THEN curpos ! THEN ; |
key? IF -1 ELSE form nip screenw ! cursor@ THEN curpos ! THEN ; |
: restore-cursor ( -- ) |
: restore-cursor ( -- ) |
cygwin? IF #esc emit '8 emit ELSE |
cygwin? IF #esc emit '8 emit ELSE |
curpos @ dup -1 = IF drop ELSE cursor! THEN THEN ; |
curpos @ dup -1 = IF drop ELSE cursor! THEN THEN ; |
Line 236 Variable curpos
|
Line 237 Variable curpos
|
drop key? ?EXIT |
drop key? ?EXIT |
restore-cursor ; |
restore-cursor ; |
|
|
|
: xretype ( max span addr pos1 -- max span addr pos1 ) |
|
restore-cursor screenw @ >r save-cursor |
|
.all 2 pick r@ / screenw @ r> - * 0 max spaces .rest false ; |
|
|
\ In the following, addr max is the buffer, addr span is the current |
\ In the following, addr max is the buffer, addr span is the current |
\ string in the buffer, and pos1 is the cursor position in the buffer. |
\ string in the buffer, and pos1 is the cursor position in the buffer. |
|
|
Line 314 Variable curpos
|
Line 319 Variable curpos
|
['] xclear-tib ctrl K bindkey |
['] xclear-tib ctrl K bindkey |
['] xfirst-pos ctrl A bindkey |
['] xfirst-pos ctrl A bindkey |
['] xend-pos ctrl E bindkey |
['] xend-pos ctrl E bindkey |
|
['] xretype ctrl L bindkey |
history IF ['] (xenter) #lf bindkey THEN |
history IF ['] (xenter) #lf bindkey THEN |
history IF ['] (xenter) #cr bindkey THEN |
history IF ['] (xenter) #cr bindkey THEN |
['] xtab-expand #tab bindkey |
['] xtab-expand #tab bindkey |