summaryrefslogtreecommitdiff
path: root/ghc
diff options
context:
space:
mode:
authorBoris Lykah <lykahb@gmail.com>2010-11-23 19:01:32 +0000
committerBoris Lykah <lykahb@gmail.com>2010-11-23 19:01:32 +0000
commite639fb4700db196a81734f69f96f6d57767fc23d (patch)
tree920f0897a721097de0f0853af8a90ed8898d4284 /ghc
parentc54980ff8b19f8f1e5ffb562f0477f7f674dabb6 (diff)
downloadhaskell-e639fb4700db196a81734f69f96f6d57767fc23d.tar.gz
:unset settings support
Added support for settings [args, prog, prompt, editor and stop]. Now :unset supports the same set of options as :set.
Diffstat (limited to 'ghc')
-rw-r--r--ghc/InteractiveUI.hs55
1 files changed, 35 insertions, 20 deletions
diff --git a/ghc/InteractiveUI.hs b/ghc/InteractiveUI.hs
index 80ec79dd21..31c1dba846 100644
--- a/ghc/InteractiveUI.hs
+++ b/ghc/InteractiveUI.hs
@@ -294,6 +294,11 @@ findEditor = do
foreign import ccall unsafe "rts_isProfiled" isProfiled :: IO CInt
+default_progname = "<interactive>"
+default_args = []
+default_prompt = "%s> "
+default_stop = ""
+
interactiveUI :: [(FilePath, Maybe Phase)] -> Maybe [String]
-> Ghc ()
interactiveUI srcs maybe_exprs = do
@@ -344,10 +349,10 @@ interactiveUI srcs maybe_exprs = do
default_editor <- liftIO $ findEditor
startGHCi (runGHCi srcs maybe_exprs)
- GHCiState{ progname = "<interactive>",
- args = [],
- prompt = "%s> ",
- stop = "",
+ GHCiState{ progname = default_progname,
+ args = default_args,
+ prompt = default_prompt,
+ stop = default_stop,
editor = default_editor,
-- session = session,
options = [],
@@ -1518,22 +1523,32 @@ newDynFlags minus_opts = do
unsetOptions :: String -> GHCi ()
unsetOptions str
- = do -- first, deal with the GHCi opts (+s, +t, etc.)
- let opts = words str
- (minus_opts, rest1) = partition isMinus opts
- (plus_opts, rest2) = partitionWith isPlus rest1
-
- if (not (null rest2))
- then liftIO (putStrLn ("unknown option: '" ++ head rest2 ++ "'"))
- else do
-
- mapM_ unsetOpt plus_opts
-
- let no_flag ('-':'f':rest) = return ("-fno-" ++ rest)
- no_flag f = ghcError (ProgramError ("don't know how to reverse " ++ f))
-
- no_flags <- mapM no_flag minus_opts
- newDynFlags no_flags
+ = -- first, deal with the GHCi opts (+s, +t, etc.)
+ let opts = words str
+ (minus_opts, rest1) = partition isMinus opts
+ (plus_opts, rest2) = partitionWith isPlus rest1
+ (other_opts, rest3) = partition (`elem` map fst defaulters) rest2
+
+ defaulters =
+ [ ("args" , setArgs default_args)
+ , ("prog" , setProg default_progname)
+ , ("prompt", setPrompt default_prompt)
+ , ("editor", liftIO findEditor >>= setEditor)
+ , ("stop" , setStop default_stop)
+ ]
+
+ no_flag ('-':'f':rest) = return ("-fno-" ++ rest)
+ no_flag f = ghcError (ProgramError ("don't know how to reverse " ++ f))
+
+ in if (not (null rest3))
+ then liftIO (putStrLn ("unknown option: '" ++ head rest3 ++ "'"))
+ else do
+ mapM_ (fromJust.flip lookup defaulters) other_opts
+
+ mapM_ unsetOpt plus_opts
+
+ no_flags <- mapM no_flag minus_opts
+ newDynFlags no_flags
isMinus :: String -> Bool
isMinus ('-':_) = True