-
-
Save crcx/576343 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
chain: stringBuffer' | |
{{ | |
tib variable: buffer | |
@buffer variable: pointer | |
: terminate ( - ) 0 @pointer ! ; | |
: bs? ( c-cf ) dup 8 = ; | |
: remove ( c- ) drop pointer -- @pointer @buffer <if @buffer !pointer then terminate ; | |
: add ( c- ) @pointer ! pointer ++ terminate ; | |
---reveal--- | |
: addToBuffer ( c- ) bs? if remove else add then ; | |
: getFromBuffer ( -c ) pointer -- @pointer @ terminate ; | |
: endOfBuffer ( -a ) repeat @pointer dup @ 0; 2drop pointer ++ again ; | |
: sizeOfBuffer ( -n ) @pointer @buffer - ; | |
: emptyBuffer ( - ) @buffer !pointer terminate ; | |
: setBuffer ( a- ) !buffer emptyBuffer ; | |
}} | |
;chain | |
with quotes' | |
with stringBuffer' | |
with strings' | |
chain: tabCompletion' | |
{{ | |
create completions 100 allot | |
completions dup ! | |
: addCompletion completions ++ @completions ! ; | |
: getCompletion @completions @ completions -- ; | |
: numCompletions @completions completions - ; | |
: findCompletions | |
last repeat | |
@ 0; | |
dup d->name | |
tib getLength 0 swap getSubset | |
tib compare [ dup addCompletion ] ifTrue | |
again ; | |
: showCompletions | |
completions numCompletions | |
[ getCompletion d->name type space ] loop ; | |
: finishCompletion | |
numCompletions 0; 1 = | |
[ getCompletion d->name tib over getLength 1+ copy endOfBuffer ] | |
[ showCompletions ] if ; | |
variable delimiter | |
: testDelimiter @delimiter = ; | |
: testTrigger 27 = ; | |
: doTrigger findCompletions finishCompletion cr tib type ; | |
: newaccept ( "- ) | |
!delimiter emptyBuffer | |
repeat | |
key dup testDelimiter not 0; drop | |
dup testTrigger [ doTrigger ] [ dup emit addToBuffer ] if | |
again ; | |
---reveal--- | |
: start &newaccept &accept :is ; | |
: finish &accept :devector ; | |
: accept newaccept ; | |
}} | |
;chain | |
global with tabCompletion' | |
start |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment