diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-10-06 00:56:23 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-10-08 13:09:34 +0530 |
| commit | a9189b183b96634a6af335b447f9aa44263ac304 (patch) | |
| tree | c10617f4c5090539abab25e170fd8e98f613740f /lib/Daffm/View.hs | |
| parent | 41d8a90746cd97d1dcb8228c1e9a0846ba9d9b6a (diff) | |
| download | daffm-a9189b183b96634a6af335b447f9aa44263ac304.tar.gz daffm-a9189b183b96634a6af335b447f9aa44263ac304.zip | |
Add symlink resolution for navigation
Diffstat (limited to 'lib/Daffm/View.hs')
| -rw-r--r-- | lib/Daffm/View.hs | 14 |
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 |
