@@ -140,14 +140,12 @@ repl orig mods
140 showM c thm n = if c then colouriseFun thm (show n)
140 showM c thm n = if c then colouriseFun thm (show n)
141 else show n
141 else show n
143−-- | Run the REPL server
143+-- | Run the REPL seDver
144−startServer :: IState -> [FilePath] -> Idris ()
144+startServer :: PortID -> IState -> [FilePath] -> Idris ()
145−startServer orig fn_in = do tid <- runIO $ forkOS serverLoop
145+startServer port orig fn_in = do tid <- runIO $ forkOS (serverLoop port)
146− return ()
146+ return ()
147− where serverLoop :: IO ()
147+ where serverLoop port = withSocketsDo $
148− -- TODO: option for port number
149− serverLoop = withSocketsDo $
150− do sock <- listenOnLocalhost $ PortNumber 4294
148+ do sock <- listenOnLocalhost port
151 loop fn orig { idris_colourRepl = False } sock
149 loop fn orig { idris_colourRepl = False } sock
153 fn = case fn_in of
151 fn = case fn_in of
@@ -201,9 +199,9 @@ processNetCmd orig i h fn cmd
201 IdeSlave n _ -> ist {idris_outputmode = IdeSlave n h}
199 IdeSlave n _ -> ist {idris_outputmode = IdeSlave n h}
203-- | Run a command on the server on localhost
201-- | Run a command on the server on localhost
204−runClient :: String -> IO ()
202+runClient :: PortID -> String -> IO ()
205−runClient str = withSocketsDo $ do
203+runClient port str = withSocketsDo $ do
206− h <- connectTo "localhost" (PortNumber 4294)
204+ h <- connectTo "localhost" port
207 hSetEncoding h utf8
205 hSetEncoding h utf8
208 hPutStrLn h str
206 hPutStrLn h str
209 resp <- hGetResp "" h
207 resp <- hGetResp "" h
@@ -1428,6 +1426,7 @@ idrisMain opts =
1428 runIO $ exitWith (ExitFailure 1)
1426 runIO $ exitWith (ExitFailure 1)
1429 [expr] -> return (Just expr)
1427 [expr] -> return (Just expr)
1430 let immediate = opt getEvalExpr opts
1428 let immediate = opt getEvalExpr opts
1429+ let port = getPort opts
1432 when (DefaultTotal `elem` opts) $ do i <- getIState
1431 when (DefaultTotal `elem` opts) $ do i <- getIState
1433 putIState (i { default_total = True })
1432 putIState (i { default_total = True })
@@ -1516,7 +1515,7 @@ idrisMain opts =
1517 when (runrepl && not idesl) $ do
1516 when (runrepl && not idesl) $ do
1518-- clearOrigPats
1517-- clearOrigPats
1519− startServer orig inputs
1518+ startServer port orig inputs
1520 runInputT (replSettings (Just historyFile)) $ repl orig inputs
1519 runInputT (replSettings (Just historyFile)) $ repl orig inputs
1521 let idesock = IdeslaveSocket `elem` opts
1520 let idesock = IdeslaveSocket `elem` opts
1522 when (idesl) $ ideslaveStart idesock orig inputs
1521 when (idesl) $ ideslaveStart idesock orig inputs
@@ -1679,11 +1678,26 @@ getColour :: Opt -> Maybe Bool
1679getColour (ColourREPL b) = Just b
1678getColour (ColourREPL b) = Just b
1680getColour _ = Nothing
1679getColour _ = Nothing
1681+getClient :: Opt -> Maybe String
1682+getClient (Client x) = Just x
1683+getClient _ = Nothing
1685+-- Get the first valid port
1686+getPort :: [Opt] -> PortID
1687+getPort [] = defaultPort
1689+ | all (`elem` ['0'..'9']) p = PortNumber $ fromIntegral (read p)
1690+ | otherwise = getPort xs
1691+getPort (_:xs) = getPort xs
1682opt :: (Opt -> Maybe a) -> [Opt] -> [a]
1693opt :: (Opt -> Maybe a) -> [Opt] -> [a]
1683opt = mapMaybe
1694opt = mapMaybe
1685ver = showVersion version ++ gitHash
1696ver = showVersion version ++ gitHash
1698+defaultPort :: PortID
1699+defaultPort = PortNumber (fromIntegral 4294)
1687banner = " ____ __ _ \n" ++
1701banner = " ____ __ _ \n" ++
1688 " / _/___/ /____(_)____ \n" ++
1702 " / _/___/ /____(_)____ \n" ++
1689 " / // __ / ___/ / ___/ Version " ++ ver ++ "\n" ++
1703 " / // __ / ___/ / ___/ Version " ++ ver ++ "\n" ++