aboutsummaryrefslogtreecommitdiff
path: root/lib/Daffm/Action/Core.hs
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-10-03 15:48:49 +0530
committerAkshay Nair <phenax5@gmail.com>2025-10-03 15:55:29 +0530
commita3d5295ee745ab851c28d0a53147cbad65a7805f (patch)
treef1771baa2748700e3045e00344d53a5782bd48c0 /lib/Daffm/Action/Core.hs
parentdd048c390f8762e7701572c4e319f22df06aeb75 (diff)
downloaddaffm-a3d5295ee745ab851c28d0a53147cbad65a7805f.tar.gz
daffm-a3d5295ee745ab851c28d0a53147cbad65a7805f.zip
Refactor event module with actions
Diffstat (limited to '')
-rw-r--r--lib/Daffm/Action/Core.hs45
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/Daffm/Action/Core.hs b/lib/Daffm/Action/Core.hs
new file mode 100644
index 0000000..48792c4
--- /dev/null
+++ b/lib/Daffm/Action/Core.hs
@@ -0,0 +1,45 @@
+{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
+
+{-# HLINT ignore "Use for_" #-}
+module Daffm.Action.Core where
+
+import Brick (suspendAndResume')
+import qualified Brick.Widgets.List as L
+import Control.Monad.State (MonadIO (liftIO), MonadState, get, gets, put)
+import Daffm.State (loadDirInAppState)
+import Daffm.Types (AppEvent, AppState (..), FileInfo (..), FileType (..))
+import Data.Vector ((!?))
+import System.FilePath (takeDirectory)
+import System.Process (callProcess)
+
+modifyM :: (MonadState s m) => (s -> m s) -> m ()
+modifyM f = get >>= f >>= put
+
+reloadDir :: AppEvent ()
+reloadDir = do
+ AppState {stateCwd, stateParentDir} <- get
+ modifyM (liftIO . loadDirInAppState stateCwd stateParentDir)
+
+goBackToParentDir :: AppEvent ()
+goBackToParentDir = do
+ dir <- gets stateParentDir
+ modifyM (liftIO . loadDirInAppState dir (takeDirectory dir))
+
+openSelectedFile :: AppEvent ()
+openSelectedFile = do
+ appState <- get
+ let indexM = L.listSelected $ stateFiles appState
+ let files = L.listElements $ stateFiles appState
+ case indexM >>= (files !?) of
+ Just file -> openFile appState file
+ Nothing -> pure ()
+ pure ()
+
+openFile :: AppState -> FileInfo -> AppEvent ()
+openFile appState (FileInfo {filePath, fileType = Directory}) = do
+ modifyM (liftIO . loadDirInAppState filePath (stateCwd appState))
+openFile _appState (FileInfo {filePath, fileType}) = do
+ suspendAndResume' $ do
+ putStrLn $ "Opening " <> show fileType <> ": " <> filePath
+ callProcess "nvim" [filePath]
+ pure ()