@@ -85,7 +85,10 @@ repl orig mods
85ideslave :: IState -> [FilePath] -> Idris ()
85ideslave :: IState -> [FilePath] -> Idris ()
86ideslave orig mods
86ideslave orig mods
87 = do idrisCatch
87 = do idrisCatch
88+ (do l <- liftIO $ getLine
88− (do sexp <- receiveMessage
89+ let (sexp, id) = receiveMessage l
91+ putIState $ i { idris_outputmode = (IdeSlave id) }
89 case sexpToCommand sexp of
92 case sexpToCommand sexp of
90 Just (Interpret cmd) ->
93 Just (Interpret cmd) ->
91 do i <- getIState
94 do i <- getIState
@@ -93,19 +96,19 @@ ideslave orig mods
93 (f:_) -> f
96 (f:_) -> f
95 case parseCmd i cmd of
98 case parseCmd i cmd of
96− Left err -> do sendMessage (Left (show err))
99+ Left err -> do liftIO $ putStrLn $ sendMessage id (Left (show err))
97 Right cmd -> do idrisCatch
100 Right cmd -> do idrisCatch
98 (do xs <- process fn cmd
101 (do xs <- process fn cmd
99− sendMessage (Right (xs, "no output")))
102+ liftIO $ putStrLn $ sendMessage id (Right (xs, "no output")))
100− (\e -> do sendMessage (Left (show e)))
103+ (\e -> do liftIO $ putStrLn $ sendMessage id (Left (show e)))
101 Just (REPLCompletions str) ->
104 Just (REPLCompletions str) ->
102 do (unused, compls) <- replCompletion (reverse str, "")
105 do (unused, compls) <- replCompletion (reverse str, "")
103− sendMessage (Right (map replacement compls, reverse unused))
106+ liftIO $ putStrLn $ sendMessage id (Right (map replacement compls, reverse unused))
104 Just (LoadFile filename) -> do clearErr
107 Just (LoadFile filename) -> do clearErr
105 mod <- loadModule filename
108 mod <- loadModule filename
106− sendMessage (Right (SymbolAtom "good"))
109+ liftIO $ putStrLn $ sendMessage id (Right (SymbolAtom "good"))
107− Nothing -> do sendMessage (Left "did not understand"))
110+ Nothing -> do liftIO $ putStrLn $ sendMessage id (Left "did not understand"))
108− (\e -> do sendMessage (Left (show e)))
111+ (\e -> do liftIO $ putStrLn $ sendMessage 0 (Left (show e)))
109 ideslave orig mods
112 ideslave orig mods
111-- | The prompt consists of the currently loaded modules, or "Idris" if there are none
114-- | The prompt consists of the currently loaded modules, or "Idris" if there are none
@@ -498,7 +501,7 @@ parseTarget _ = error "unknown target" -- FIXME: partial function
498parseArgs :: [String] -> [Opt]
501parseArgs :: [String] -> [Opt]
499parseArgs [] = []
502parseArgs [] = []
500parseArgs ("--quiet":ns) = Quiet : (parseArgs ns)
503parseArgs ("--quiet":ns) = Quiet : (parseArgs ns)
501−parseArgs ("--ideslave":ns) = IdeSlave : (parseArgs ns)
504+parseArgs ("--ideslave":ns) = Ideslave : (parseArgs ns)
502parseArgs ("--log":lvl:ns) = OLogging (read lvl) : (parseArgs ns)
505parseArgs ("--log":lvl:ns) = OLogging (read lvl) : (parseArgs ns)
503parseArgs ("--noprelude":ns) = NoPrelude : (parseArgs ns)
506parseArgs ("--noprelude":ns) = NoPrelude : (parseArgs ns)
504parseArgs ("--check":ns) = NoREPL : (parseArgs ns)
507parseArgs ("--check":ns) = NoREPL : (parseArgs ns)
@@ -552,7 +555,7 @@ idrisMain :: [Opt] -> Idris ()
552idrisMain opts =
555idrisMain opts =
553 do let inputs = opt getFile opts
556 do let inputs = opt getFile opts
554 let quiet = Quiet `elem` opts
557 let quiet = Quiet `elem` opts
555− let idesl = IdeSlave `elem` opts
558+ let idesl = Ideslave `elem` opts
556 let runrepl = not (NoREPL `elem` opts)
559 let runrepl = not (NoREPL `elem` opts)
557 let output = opt getOutput opts
560 let output = opt getOutput opts
558 let newoutput = opt getNewOutput opts
561 let newoutput = opt getNewOutput opts