summaryrefslogtreecommitdiff
path: root/src-3.0
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@chalmers.se>2008-06-03 17:06:45 +0000
committerkr.angelov <kr.angelov@chalmers.se>2008-06-03 17:06:45 +0000
commitb5ca08c9c28d7ee3ae2931dbfd39e287e3d1e2c6 (patch)
tree398a3bfed0cb49f649f64060bfb608484ffe88b6 /src-3.0
parentea145ddf5289c1f12d01a39ceb2935ddce8b31a0 (diff)
Use readline for word completion
Diffstat (limited to 'src-3.0')
-rw-r--r--src-3.0/GF/Command/Commands.hs13
1 files changed, 10 insertions, 3 deletions
diff --git a/src-3.0/GF/Command/Commands.hs b/src-3.0/GF/Command/Commands.hs
index d1fb4dd4c..e35410405 100644
--- a/src-3.0/GF/Command/Commands.hs
+++ b/src-3.0/GF/Command/Commands.hs
@@ -21,6 +21,7 @@ import qualified PGF.Parsing.FCFG.Incremental as Incremental
import GF.Compile.Export
import GF.Infra.UseIO
import GF.Data.ErrM ----
+import GF.System.Readline
import Data.Maybe
import qualified Data.Map as Map
@@ -167,9 +168,9 @@ allCommands pgf = Map.fromAscList [
cat = optCat opts
pinfo = fromMaybe (error ("Unknown language: " ++ lang)) (lookParser pgf (mkCId lang))
state0 = Incremental.initState pinfo (mkCId cat)
- putStrFlush ">> "
- s <- getLine
- if null s
+ setCompletionFunction (Just (myCompletion pinfo state0))
+ s <- fetchCommand ">> "
+ if s == "q"
then return ()
else do cpu1 <- getCPUTime
st <- parse pinfo state0 (words s)
@@ -184,3 +185,9 @@ allCommands pgf = Map.fromAscList [
parse pinfo st (t:ts) = do putStrFlush "."
st1 <- return $! (Incremental.nextState pinfo t st)
parse pinfo st1 ts
+
+ myCompletion pinfo state0 line prefix p = do
+ let ws = words (take (p-length prefix) line)
+ state = foldl (\st t -> Incremental.nextState pinfo t st) state0 ws
+ compls = Incremental.getCompletions pinfo prefix state
+ return (Map.keys compls)