diff options
author | Boris Lykah <lykahb@gmail.com> | 2010-11-23 19:01:32 +0000 |
---|---|---|
committer | Boris Lykah <lykahb@gmail.com> | 2010-11-23 19:01:32 +0000 |
commit | e639fb4700db196a81734f69f96f6d57767fc23d (patch) | |
tree | 920f0897a721097de0f0853af8a90ed8898d4284 /ghc | |
parent | c54980ff8b19f8f1e5ffb562f0477f7f674dabb6 (diff) | |
download | haskell-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.hs | 55 |
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 |