forked from kanaka/mal
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReadline.hs
38 lines (32 loc) · 982 Bytes
/
Readline.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
module Readline
( readline, load_history )
where
-- Pick one of these:
-- GPL license
import qualified System.Console.Readline as RL
-- BSD license
--import qualified System.Console.Editline.Readline as RL
import Control.Monad (when)
import System.Directory (getHomeDirectory, doesFileExist)
import System.IO (hGetLine, hFlush, hIsEOF, stdin, stdout)
import System.IO.Error (tryIOError)
history_file = do
home <- getHomeDirectory
return $ home ++ "/.mal-history"
load_history = do
hfile <- history_file
fileExists <- doesFileExist hfile
when fileExists $ do
content <- readFile hfile
mapM RL.addHistory (lines content)
return ()
return ()
readline prompt = do
hfile <- history_file
maybeLine <- RL.readline prompt
case maybeLine of
Just line -> do
RL.addHistory line
res <- tryIOError (appendFile hfile (line ++ "\n"))
return maybeLine
_ -> return maybeLine