From a9189b183b96634a6af335b447f9aa44263ac304 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Mon, 6 Oct 2025 00:56:23 +0530 Subject: Add symlink resolution for navigation --- lib/Daffm/View.hs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'lib/Daffm/View.hs') 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 "" +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 -- cgit v1.3.1