diff --git a/src/GF/System/UseEditline.hs b/src/GF/System/UseEditline.hs new file mode 100644 index 000000000..6d51a1be3 --- /dev/null +++ b/src/GF/System/UseEditline.hs @@ -0,0 +1,36 @@ +---------------------------------------------------------------------- +-- | +-- Module : GF.System.UseReadline +-- Maintainer : BB +-- Stability : (stable) +-- Portability : (portable) +-- +-- > CVS $Date: 2005/05/10 15:04:01 $ +-- > CVS $Author: bringert $ +-- > CVS $Revision: 1.1 $ +-- +-- Use GNU readline +----------------------------------------------------------------------------- + +module GF.System.UseEditline (fetchCommand, setCompletionFunction, filenameCompletionFunction) where + +import System.Console.Editline.Readline + +fetchCommand :: String -> IO (String) +fetchCommand s = do + setCompletionAppendCharacter Nothing + --setBasicQuoteCharacters "" + res <- readline s + case res of + Nothing -> return "q" + Just s -> do addHistory s + return s + +setCompletionFunction :: Maybe (String -> String -> Int -> IO [String]) -> IO () +setCompletionFunction Nothing = setCompletionEntryFunction Nothing +setCompletionFunction (Just fn) = setCompletionEntryFunction (Just my_fn) + where + my_fn prefix = do + s <- getLineBuffer + p <- getPoint + fn s prefix p diff --git a/src/GF/System/UseHaskeline.hs b/src/GF/System/UseHaskeline.hs new file mode 100644 index 000000000..140407439 --- /dev/null +++ b/src/GF/System/UseHaskeline.hs @@ -0,0 +1,43 @@ +---------------------------------------------------------------------- +-- | +-- Module : GF.System.UseReadline +-- Maintainer : BB +-- Stability : (stable) +-- Portability : (portable) +-- +-- > CVS $Date: 2005/05/10 15:04:01 $ +-- > CVS $Author: bringert $ +-- > CVS $Revision: 1.1 $ +-- +-- Use GNU readline +----------------------------------------------------------------------------- + +module GF.System.UseHaskeline (fetchCommand, setCompletionFunction, filenameCompletionFunction) where + +import System.Console.Haskeline +import System.Directory + +fetchCommand :: String -> IO (String) +fetchCommand s = do + settings <- getGFSettings + res <- runInputT settings (getInputLine s) + case res of + Nothing -> return "q" + Just s -> return s + +getGFSettings :: IO (Settings IO) +getGFSettings = do + path <- getAppUserDataDirectory "gf_history" + return $ + Settings { + complete = completeFilename, + historyFile = Just path, + autoAddHistory = True + } + + +setCompletionFunction :: Maybe (String -> String -> Int -> IO [String]) -> IO () +setCompletionFunction _ = return () + +filenameCompletionFunction :: String -> IO [String] +filenameCompletionFunction _ = return []