aboutsummaryrefslogtreecommitdiff
path: root/lib/Daffm/View.hs
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-10-06 00:56:23 +0530
committerAkshay Nair <phenax5@gmail.com>2025-10-08 13:09:34 +0530
commita9189b183b96634a6af335b447f9aa44263ac304 (patch)
treec10617f4c5090539abab25e170fd8e98f613740f /lib/Daffm/View.hs
parent41d8a90746cd97d1dcb8228c1e9a0846ba9d9b6a (diff)
downloaddaffm-a9189b183b96634a6af335b447f9aa44263ac304.tar.gz
daffm-a9189b183b96634a6af335b447f9aa44263ac304.zip
Add symlink resolution for navigation
Diffstat (limited to 'lib/Daffm/View.hs')
-rw-r--r--lib/Daffm/View.hs14
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/Daffm/View.hs b/lib/Daffm/View.hs
index 081cd38..e65a13a 100644
--- a/lib/Daffm/View.hs
+++ b/lib/Daffm/View.hs
@@ -4,7 +4,7 @@ import Brick.Types (Widget)
import Brick.Widgets.Core (Padding (Max, Pad), emptyWidget, hBox, hLimit, padLeft, padRight, str, txt, vBox, vLimit, withAttr, (<+>))
import Brick.Widgets.Edit (renderEditor)
import qualified Brick.Widgets.List as L
-import Daffm.Attrs (directoryAttr, directorySelectedAttr, fileAttr, fileSelectedAttr, searchMarchAttr)
+import Daffm.Attrs (directoryAttr, directoryLinkAttr, directorySelectedAttr, fileAttr, fileSelectedAttr, invalidLinkAttr, linkAttr, searchMarchAttr)
import Daffm.Keymap (showKeySequence)
import Daffm.Types (AppState (..), FileInfo (..), FileType (..), FocusTarget (..))
import Data.Int (Int64)
@@ -78,9 +78,21 @@ showFileMode mode = permchars
fileNameView :: Bool -> FileInfo -> Widget FocusTarget
fileNameView True (FileInfo {fileName, fileType = Directory}) = withAttr directorySelectedAttr $ txt $ fileName <> "/"
fileNameView False (FileInfo {fileName, fileType = Directory}) = withAttr directoryAttr $ txt $ fileName <> "/"
+fileNameView _ file@(FileInfo {fileType = SymbolicLink}) = symbolicLinkNameView file
fileNameView True (FileInfo {fileName}) = withAttr fileSelectedAttr $ txt fileName
fileNameView False (FileInfo {fileName}) = withAttr fileAttr $ txt fileName
+symbolicLinkNameView :: FileInfo -> Widget n
+symbolicLinkNameView (FileInfo {fileName, fileLinkTarget, fileLinkType = Just Directory}) =
+ withAttr directoryLinkAttr (txt $ fileName <> "/") <+> txt " -> " <+> symTargetView (Just Directory) fileLinkTarget
+symbolicLinkNameView (FileInfo {fileName, fileLinkType, fileLinkTarget}) =
+ withAttr linkAttr (txt fileName) <+> txt " -> " <+> symTargetView fileLinkType fileLinkTarget
+
+symTargetView :: Maybe FileType -> Maybe Text.Text -> Widget n
+symTargetView _ Nothing = withAttr invalidLinkAttr $ txt "<none>"
+symTargetView Nothing (Just target) = withAttr invalidLinkAttr $ txt target
+symTargetView _ (Just target) = txt target
+
cmdlineView :: AppState -> Widget FocusTarget
cmdlineView (AppState {stateFocusTarget = FocusCmdline, stateCmdlineEditor}) =
txt ":" <+> renderEditor (txt . Text.unlines) True stateCmdlineEditor