diff --git a/basis/tools/completion/completion-tests.factor b/basis/tools/completion/completion-tests.factor
index 05c8e321ec..e35fdb9d04 100644
--- a/basis/tools/completion/completion-tests.factor
+++ b/basis/tools/completion/completion-tests.factor
@@ -30,3 +30,6 @@ IN: tools.completion
 { f } [ { "USING:" "A" "B" "C" ";" } complete-vocab? ] unit-test
 { t } [ { "X" ";" "USING:" "A" "B" "C" } complete-vocab? ] unit-test
 
+{ f } [ { "CHAR:" } complete-CHAR:? ] unit-test
+{ t } [ { "CHAR:" "" } complete-CHAR:? ] unit-test
+{ t } [ { "CHAR:" "a" } complete-CHAR:? ] unit-test
diff --git a/basis/tools/completion/completion.factor b/basis/tools/completion/completion.factor
index 8c61da927b..22fec129b0 100644
--- a/basis/tools/completion/completion.factor
+++ b/basis/tools/completion/completion.factor
@@ -135,8 +135,18 @@ PRIVATE>
 : complete-vocab? ( tokens -- ? )
     { [ complete-single-vocab? ] [ complete-vocab-list? ] } 1|| ;
 
-: complete-CHAR:? ( tokens -- ? )
-    2 short tail* "CHAR:" swap member? ;
+<PRIVATE
 
-: complete-COLOR:? ( tokens -- ? )
-    2 short tail* "COLOR:" swap member? ;
+: complete-token? ( tokens token -- ? )
+    over last empty? [
+        [ harvest ?last ] [ = ] bi*
+    ] [
+        swap harvest dup length 1 >
+        [ 2 tail* ?first = ] [ 2drop f ] if
+    ] if ;
+
+PRIVATE>
+
+: complete-CHAR:? ( tokens -- ? ) "CHAR:" complete-token? ;
+
+: complete-COLOR:? ( tokens -- ? ) "COLOR:" complete-token? ;