Skip to content

Instantly share code, notes, and snippets.

@lsparrish
Created September 12, 2010 03:07
Show Gist options
  • Save lsparrish/575798 to your computer and use it in GitHub Desktop.
Save lsparrish/575798 to your computer and use it in GitHub Desktop.
with strings'
with quotes'
{
create str0 512 allot
create str1 512 allot
: NewCompare
[ toLower dup getLength 1+ str0 swap copy ] dip
toLower dup getLength 1+ str1 swap copy
str0 str1 default: compare ;
&NewCompare is compare
}
WITHOUT WITHOUT
WITH Quotes'
: alias D' DUP @D->CLASS [ @D->XT : , ` ; ] DIP RECLASS ;
WITHOUT
ALIAS GetLength StrLen
CHAIN: Buffer'
{{
: buffer TIB ;
buffer VARIABLE: pointer
: CleanEnding 0 @pointer ! ;
---REVEAL---
: PutToBuffer @pointer ! pointer ++ CleanEnding ;
: GetFromBuffer pointer -- @pointer @ CleanEnding ;
: EndOfBuffer REPEAT @pointer @ 0; pointer ++ AGAIN ;
: SizeOfBuffer @pointer buffer - ;
: EmptyBuffer buffer !pointer CleanEnding ;
}}
;CHAIN
WITH Buffer' WITH Quotes' WITH Strings'
CHAIN: TabCompletion'
{{
VARIABLE completions 100 ALLOT
completions dup !
: AddToCompletions completions ++ @completions ! ;
: GetFromCompletions @completions @ completions -- ;
: NumOfCompletions @completions completions - ;
: FindCompletions LAST REPEAT @ 0;
DUP D->NAME TIB GETLENGTH 0 SWAP GETSUBSET
TIB COMPARE [ DUP AddToCompletions ] IFTRUE AGAIN ;
: ShowCompletions completions NumOfCompletions
[ GetFromCompletions D->NAME TYPE SPACE ] LOOP ;
: FinishCompletion NumOfCompletions 1 =
[ GetFromCompletions D->NAME TIB OVER GETLENGTH 1+ COPY EndOfBuffer ]
[ ShowCompletions ] IF ;
VARIABLE delimiter
: TestDelimiter @delimiter = ;
: TestTrigger 27 = ;
: DoTrigger FindCompletions FinishCompletion CR TIB TYPE ;
---REVEAL---
: accept ( "- ) !delimiter EmptyBuffer REPEAT
KEY DUP TestDelimiter NOT 0; DROP
DUP TestTrigger [ DoTrigger ] [ DUP EMIT PutToBuffer ] IF AGAIN ;
}}
;CHAIN
WITHOUT WITHOUT WITHOUT
WITH TabCompletion'
: foo 32 ACCEPT TIB TYPE ;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment