diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-10-03 15:29:11 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-10-03 15:29:11 +0530 |
| commit | dd048c390f8762e7701572c4e319f22df06aeb75 (patch) | |
| tree | e209780390cc94347bcabfe6850582d8b7c09e7d | |
| parent | c3eb868c3873af2fc556525350bde6faebbd7cc8 (diff) | |
| download | daffm-dd048c390f8762e7701572c4e319f22df06aeb75.tar.gz daffm-dd048c390f8762e7701572c4e319f22df06aeb75.zip | |
Add file mode string in listing
| -rw-r--r-- | lib/Daffm/View.hs | 26 | ||||
| -rw-r--r-- | notes.org | 2 |
2 files changed, 24 insertions, 4 deletions
diff --git a/lib/Daffm/View.hs b/lib/Daffm/View.hs index 3066c93..443d017 100644 --- a/lib/Daffm/View.hs +++ b/lib/Daffm/View.hs @@ -8,6 +8,8 @@ import Daffm.Attrs (directoryAttr, directorySelectedAttr, fileAttr, fileSelected import Daffm.Types (AppState (..), FileInfo (..), FileType (..), FocusTarget (..)) import Data.Int (Int64) import qualified Data.Vector as Vec +import System.Posix.Types (FileMode) +import qualified System.PosixCompat as Posix import Text.Printf (printf) appView :: AppState -> [Widget FocusTarget] @@ -25,15 +27,17 @@ headerView :: AppState -> Widget n headerView (AppState {stateCwd}) = str stateCwd fileItemView :: Bool -> FileInfo -> Widget FocusTarget -fileItemView sel fileInfo@(FileInfo {fileSize, fileType}) = +fileItemView sel fileInfo@(FileInfo {fileSize, fileType, fileMode}) = hBox - [ hFixed 6 (fileTypeView fileType), - hFixed 7 (fileSizeView fileSize), + [ hFixed 10 $ fileModeView fileMode, + hFixed 6 $ fileTypeView fileType, + hFixed 7 $ fileSizeView fileSize, fileNameView sel fileInfo ] where fileSizeView = str . prettyFileSize . fromIntegral fileTypeView = str . showFileType + fileModeView = str . showFileMode showFileType Directory = "dir" showFileType SymbolicLink = "link" showFileType UnixSocket = "sock" @@ -43,6 +47,22 @@ fileItemView sel fileInfo@(FileInfo {fileSize, fileType}) = showFileType RegularFile = "file" showFileType UnknownFileType = "?" +showFileMode :: FileMode -> String +showFileMode mode = permchars + where + perm m c = if Posix.intersectFileModes mode m == m then c else '-' + permchars = + [ perm Posix.ownerReadMode 'r', + perm Posix.ownerWriteMode 'w', + perm Posix.ownerExecuteMode 'x', + perm Posix.groupReadMode 'r', + perm Posix.groupWriteMode 'w', + perm Posix.groupExecuteMode 'x', + perm Posix.otherReadMode 'r', + perm Posix.otherWriteMode 'w', + perm Posix.otherExecuteMode 'x' + ] + fileNameView :: Bool -> FileInfo -> Widget FocusTarget fileNameView True (FileInfo {fileName, fileType = Directory}) = withAttr directorySelectedAttr $ str $ fileName <> "/" fileNameView False (FileInfo {fileName, fileType = Directory}) = withAttr directoryAttr $ str $ fileName <> "/" @@ -5,7 +5,7 @@ - [X] Run shell command - [X] Command substitution % - [X] Command substitution %d:cwd -- [ ] Show file permissions +- [X] Show file permissions - [ ] Commands - [ ] Error handling - [ ] Cli arg parsing |
