@@ -140,14 +140,12 @@ repl orig mods
140140 showM c thm n = if c then colouriseFun thm (show n)
141141 else show n
142142
143−-- | Run the REPL server
144−startServer :: IState -> [FilePath] -> Idris ()
145−startServer orig fn_in = do tid <- runIO $ forkOS serverLoop
146− return ()
147− where serverLoop :: IO ()
148− -- TODO: option for port number
149− serverLoop = withSocketsDo $
150− do sock <- listenOnLocalhost $ PortNumber 4294
143+-- | Run the REPL seDver
144+startServer :: PortID -> IState -> [FilePath] -> Idris ()
145+startServer port orig fn_in = do tid <- runIO $ forkOS (serverLoop port)
146+ return ()
147+ where serverLoop port = withSocketsDo $
148+ do sock <- listenOnLocalhost port
151149 loop fn orig { idris_colourRepl = False } sock
152150
153151 fn = case fn_in of
@@ -202,9 +200,9 @@ processNetCmd orig i h fn cmd
202200 IdeSlave n _ -> ist {idris_outputmode = IdeSlave n h}
203201
204202-- | Run a command on the server on localhost
205−runClient :: String -> IO ()
206−runClient str = withSocketsDo $ do
207− h <- connectTo "localhost" (PortNumber 4294)
203+runClient :: PortID -> String -> IO ()
204+runClient port str = withSocketsDo $ do
205+ h <- connectTo "localhost" port
208206 hSetEncoding h utf8
209207 hPutStrLn h str
210208 resp <- hGetResp "" h
@@ -1431,6 +1429,7 @@ idrisMain opts =
14311429 runIO $ exitWith (ExitFailure 1)
14321430 [expr] -> return (Just expr)
14331431 let immediate = opt getEvalExpr opts
1432+ let port = getPort opts
14341433
14351434 when (DefaultTotal `elem` opts) $ do i <- getIState
14361435 putIState (i { default_total = True })
@@ -1519,7 +1518,7 @@ idrisMain opts =
15191518
15201519 when (runrepl && not idesl) $ do
15211520-- clearOrigPats
1522− startServer orig inputs
1521+ startServer port orig inputs
15231522 runInputT (replSettings (Just historyFile)) $ repl orig inputs
15241523 let idesock = IdeslaveSocket `elem` opts
15251524 when (idesl) $ ideslaveStart idesock orig inputs
@@ -1683,11 +1682,26 @@ getColour :: Opt -> Maybe Bool
16831682getColour (ColourREPL b) = Just b
16841683getColour _ = Nothing
16851684
1685+getClient :: Opt -> Maybe String
1686+getClient (Client x) = Just x
1687+getClient _ = Nothing
1688+
1689+-- Get the first valid port
1690+getPort :: [Opt] -> PortID
1691+getPort [] = defaultPort
1692+getPort (Port p:xs)
1693+ | all (`elem` ['0'..'9']) p = PortNumber $ fromIntegral (read p)
1694+ | otherwise = getPort xs
1695+getPort (_:xs) = getPort xs
1696+
16861697opt :: (Opt -> Maybe a) -> [Opt] -> [a]
16871698opt = mapMaybe
16881699
16891700ver = showVersion version ++ gitHash
16901701
1702+defaultPort :: PortID
1703+defaultPort = PortNumber (fromIntegral 4294)
1704+
16911705banner = " ____ __ _ \n" ++
16921706 " / _/___/ /____(_)____ \n" ++
16931707 " / // __ / ___/ / ___/ Version " ++ ver ++ "\n" ++