summaryrefslogtreecommitdiffstats
path: root/lib/HistoryGrid.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/HistoryGrid.hs')
-rw-r--r--lib/HistoryGrid.hs42
1 files changed, 42 insertions, 0 deletions
diff --git a/lib/HistoryGrid.hs b/lib/HistoryGrid.hs
new file mode 100644
index 0000000..2c53fe6
--- /dev/null
+++ b/lib/HistoryGrid.hs
@@ -0,0 +1,42 @@
+module HistoryGrid (openLastHistoryGrid) where
+
+import Prelude hiding (catch)
+
+import Control.Exception.Extensible hiding (handle)
+import Control.Monad.IO.Class
+import Data.List
+import qualified Data.Map as M
+import Data.Maybe
+import System.Directory
+import System.IO
+
+import XMonad.Core
+import XMonad.Actions.GridSelect
+
+
+type History = M.Map String [String]
+
+emptyHistory :: History
+emptyHistory = M.empty
+
+getHistoryFile :: IO FilePath
+getHistoryFile = fmap (++ "/history") $ getAppUserDataDirectory "xmonad"
+
+readHistory :: IO History
+readHistory = readHist `catch` \(SomeException _) -> return emptyHistory
+ where
+ readHist = do
+ path <- getHistoryFile
+ xs <- bracket (openFile path ReadMode) hClose hGetLine
+ readIO xs
+
+getLastHistoryItems :: History -> Int -> [String]
+getLastHistoryItems hist i = take i $ nub $ fromMaybe [] $ M.lookup "Run: " hist
+
+getLastHistory :: Int -> IO [String]
+getLastHistory count = readHistory >>= \hist -> return $ getLastHistoryItems hist count
+
+openLastHistoryGrid :: GSConfig String -> Int -> X()
+openLastHistoryGrid config count = do
+ hist <- liftIO $ getLastHistory count
+ spawnSelected config hist