add tab completion by displaying functions matching prefix
Added a function to State which returns a list of all defined values/functions matching a prefix. Modify the tab printout to display 5 of these results.
This commit is contained in:
@@ -80,10 +80,14 @@ printStatus state str =
|
|||||||
|
|
||||||
printCompletions :: State -> String -> IO ()
|
printCompletions :: State -> String -> IO ()
|
||||||
printCompletions state str =
|
printCompletions state str =
|
||||||
let completions = "" -- TODO: get possible completions
|
let tokens = words str
|
||||||
|
completions = if tokens == []
|
||||||
|
then []
|
||||||
|
else getCompletions (last tokens) state
|
||||||
|
compString = intercalate " " $ take 5 completions
|
||||||
toPrint = "\n\x1b[32m" -- color to green
|
toPrint = "\n\x1b[32m" -- color to green
|
||||||
++ replicate (length promptStr) ' '
|
++ replicate (length promptStr) ' '
|
||||||
++ completions
|
++ compString
|
||||||
++ "\x1b[0m\r\x1b[A" -- color to white, move to prev line
|
++ "\x1b[0m\r\x1b[A" -- color to white, move to prev line
|
||||||
in do putStr toPrint
|
in do putStr toPrint
|
||||||
putStr $ concat $ replicate (length promptStr + length str) "\x1b[C"
|
putStr $ concat $ replicate (length promptStr + length str) "\x1b[C"
|
||||||
|
@@ -9,3 +9,8 @@ type State = Map String Value
|
|||||||
|
|
||||||
newState :: State
|
newState :: State
|
||||||
newState = fromList primitives
|
newState = fromList primitives
|
||||||
|
|
||||||
|
getCompletions :: String -> State -> [String]
|
||||||
|
getCompletions s = foldWithKey addKey []
|
||||||
|
where addKey k _ ks = if isPrefix s k then k:ks else ks
|
||||||
|
isPrefix s1 s2 = length s2 >= length s1 && (all id $ zipWith (==) s1 s2)
|
Reference in New Issue
Block a user