Skip to content

Commit

Permalink
Merge branch 'master' of github.com:jtdaugherty/brick
Browse files Browse the repository at this point in the history
  • Loading branch information
jtdaugherty committed Feb 11, 2025
2 parents 8ae59b7 + b116263 commit 3da209b
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 6 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@
Brick changelog
---------------

2.8
---

Behavior changes:
* `FileBrowser` file marking with `Space` now honors the file browser's
configured file selector predicate.
* `FileBrowser` file marking with `Space` and `Enter` now toggles file
selection rather than just selecting files, allowing for selected
files to be unselected.

2.7
---

Expand Down
2 changes: 1 addition & 1 deletion brick.cabal
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: brick
version: 2.7
version: 2.8
synopsis: A declarative terminal user interface library
description:
Write terminal user interfaces (TUIs) painlessly with 'brick'! You
Expand Down
17 changes: 12 additions & 5 deletions src/Brick/Widgets/FileBrowser.hs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ import Data.List (sortBy, isSuffixOf, dropWhileEnd)
import qualified Data.Set as Set
import qualified Data.Vector as V
import Lens.Micro
import Lens.Micro.Mtl ((%=))
import Lens.Micro.Mtl ((%=), use)
import Lens.Micro.TH (lensRules, generateUpdateableOptics)
import qualified Graphics.Vty as Vty
import qualified System.Directory as D
Expand Down Expand Up @@ -728,8 +728,13 @@ handleFileBrowserEventCommon e =
_ ->
zoom fileBrowserEntriesL $ handleListEvent e

markSelected :: FileInfo -> EventM n (FileBrowser n) ()
markSelected e = fileBrowserSelectedFilesL %= Set.insert (fileInfoFilename e)
toggleSelected :: FileInfo -> EventM n (FileBrowser n) ()
toggleSelected e = do
fs <- use fileBrowserSelectedFilesL
let fName = fileInfoFilename e
if Set.member fName fs
then fileBrowserSelectedFilesL %= Set.delete fName
else fileBrowserSelectedFilesL %= Set.insert fName

-- | If the browser's current entry is selectable according to
-- @fileBrowserSelectable@, add it to the selection set and return.
Expand All @@ -742,14 +747,16 @@ maybeSelectCurrentEntry = do
b <- get
for_ (fileBrowserCursor b) $ \entry ->
if fileBrowserSelectable b entry
then markSelected entry
then toggleSelected entry
else when (selectDirectories entry) $
put =<< liftIO (setWorkingDirectory (fileInfoFilePath entry) b)

selectCurrentEntry :: EventM n (FileBrowser n) ()
selectCurrentEntry = do
b <- get
for_ (fileBrowserCursor b) markSelected
for_ (fileBrowserCursor b) $ \entry ->
when (fileBrowserSelectable b entry) $
toggleSelected entry

-- | Render a file browser. This renders a list of entries in the
-- working directory, a cursor to select from among the entries, a
Expand Down

0 comments on commit 3da209b

Please sign in to comment.