diff options
| author | hallgren <hallgren@chalmers.se> | 2015-08-18 13:13:31 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2015-08-18 13:13:31 +0000 |
| commit | 41075fb50a846ef0ae9851b99a3468bc0e405988 (patch) | |
| tree | 92ac4a600a899227f1f064ab1bd45e5d1f06016d /src/compiler/GF/Interactive2.hs | |
| parent | 17e7a01ae1ab33158273f7370251185b430b41cd (diff) | |
GF shell: restore the eh command to working order and document it
Also, when the command line parser fails, append the problematic command line
to the error message "command not parsed".
Diffstat (limited to 'src/compiler/GF/Interactive2.hs')
| -rw-r--r-- | src/compiler/GF/Interactive2.hs | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/compiler/GF/Interactive2.hs b/src/compiler/GF/Interactive2.hs index 70f7e567e..bfa7fd6b2 100644 --- a/src/compiler/GF/Interactive2.hs +++ b/src/compiler/GF/Interactive2.hs @@ -11,7 +11,7 @@ import GF.Command.Help(helpCommand) import GF.Command.Abstract import GF.Command.Parse(readCommandLine,pCommand) import GF.Data.Operations (Err(..),done) -import GF.Data.Utilities(repeatM) +import GF.Data.Utilities(whenM,repeatM) import GF.Infra.UseIO(ioErrorText,putStrLnE) import GF.Infra.SIO @@ -117,14 +117,18 @@ type ShellM = StateT GFEnv SIO execute1 :: String -> ShellM Bool execute1 s0 = do modify $ \ gfenv0 -> gfenv0 {history = s0 : history gfenv0} - opts <- gets startOpts + execute1' s0 + +-- | Execute a given command line, without adding it to the history +execute1' s0 = + do opts <- gets startOpts interruptible $ optionallyShowCPUTime opts $ case pwords s0 of -- cc, sd, so, ss and dg are now in GF.Commands.SourceCommands -- special commands "q" :_ -> quit "!" :ws -> system_command ws - "eh":ws -> eh ws + "eh":ws -> execute_history ws "i" :ws -> do import_ ws; continue -- other special commands, working on GFEnv "dc":ws -> define_command ws @@ -158,12 +162,16 @@ execute1 s0 = cs <- readFile w >>= return . map words . lines gfenv' <- foldM (flip (process False benv)) gfenv cs loopNewCPU gfenv' -} - eh [w] = -- Ehhh? Reads commands from a file, but does not execute them - do env <- gets commandenv - cs <- lift $ restricted (readFile w) >>= return . map (interpretCommandLine env) . lines + execute_history [w] = + do execute . lines =<< lift (restricted (readFile w)) continue - eh _ = do putStrLnE "eh command not parsed" - continue + where + execute [] = done + execute (line:lines) = whenM (execute1' line) (execute lines) + + execute_history _ = + do putStrLnE "eh command not parsed" + continue define_command (f:ws) = case readCommandLine (unwords ws) of |
