brick 2.7 → 2.8
raw patch · 3 files changed
+23/−6 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Brick.BorderMap: eBottomL :: forall a_ahz0. Lens' (Edges a_ahz0) a_ahz0
+ Brick.BorderMap: eBottomL :: forall a_afCd. Lens' (Edges a_afCd) a_afCd
- Brick.BorderMap: eLeftL :: forall a_ahz0. Lens' (Edges a_ahz0) a_ahz0
+ Brick.BorderMap: eLeftL :: forall a_afCd. Lens' (Edges a_afCd) a_afCd
- Brick.BorderMap: eRightL :: forall a_ahz0. Lens' (Edges a_ahz0) a_ahz0
+ Brick.BorderMap: eRightL :: forall a_afCd. Lens' (Edges a_afCd) a_afCd
- Brick.BorderMap: eTopL :: forall a_ahz0. Lens' (Edges a_ahz0) a_ahz0
+ Brick.BorderMap: eTopL :: forall a_afCd. Lens' (Edges a_afCd) a_afCd
- Brick.Types: availHeightL :: forall n_axPx. Lens' (Context n_axPx) Int
+ Brick.Types: availHeightL :: forall n_atym. Lens' (Context n_atym) Int
- Brick.Types: availWidthL :: forall n_axPx. Lens' (Context n_axPx) Int
+ Brick.Types: availWidthL :: forall n_atym. Lens' (Context n_atym) Int
- Brick.Types: bordersL :: forall n_axPB. Lens' (Result n_axPB) (BorderMap DynBorder)
+ Brick.Types: bordersL :: forall n_atyq. Lens' (Result n_atyq) (BorderMap DynBorder)
- Brick.Types: ctxAttrMapL :: forall n_axPx. Lens' (Context n_axPx) AttrMap
+ Brick.Types: ctxAttrMapL :: forall n_atym. Lens' (Context n_atym) AttrMap
- Brick.Types: ctxAttrNameL :: forall n_axPx. Lens' (Context n_axPx) AttrName
+ Brick.Types: ctxAttrNameL :: forall n_atym. Lens' (Context n_atym) AttrName
- Brick.Types: ctxBorderStyleL :: forall n_axPx. Lens' (Context n_axPx) BorderStyle
+ Brick.Types: ctxBorderStyleL :: forall n_atym. Lens' (Context n_atym) BorderStyle
- Brick.Types: ctxDynBordersL :: forall n_axPx. Lens' (Context n_axPx) Bool
+ Brick.Types: ctxDynBordersL :: forall n_atym. Lens' (Context n_atym) Bool
- Brick.Types: ctxHScrollBarOrientationL :: forall n_axPx. Lens' (Context n_axPx) (Maybe HScrollBarOrientation)
+ Brick.Types: ctxHScrollBarOrientationL :: forall n_atym. Lens' (Context n_atym) (Maybe HScrollBarOrientation)
- Brick.Types: ctxHScrollBarRendererL :: forall n_axPx. Lens' (Context n_axPx) (Maybe (HScrollbarRenderer n_axPx))
+ Brick.Types: ctxHScrollBarRendererL :: forall n_atym. Lens' (Context n_atym) (Maybe (HScrollbarRenderer n_atym))
- Brick.Types: ctxVScrollBarOrientationL :: forall n_axPx. Lens' (Context n_axPx) (Maybe VScrollBarOrientation)
+ Brick.Types: ctxVScrollBarOrientationL :: forall n_atym. Lens' (Context n_atym) (Maybe VScrollBarOrientation)
- Brick.Types: ctxVScrollBarRendererL :: forall n_axPx. Lens' (Context n_axPx) (Maybe (VScrollbarRenderer n_axPx))
+ Brick.Types: ctxVScrollBarRendererL :: forall n_atym. Lens' (Context n_atym) (Maybe (VScrollbarRenderer n_atym))
- Brick.Types: cursorLocationL :: forall n_axPC. Lens' (CursorLocation n_axPC) Location
+ Brick.Types: cursorLocationL :: forall n_atyr. Lens' (CursorLocation n_atyr) Location
- Brick.Types: cursorLocationNameL :: forall n_axPC n_aApe. Lens (CursorLocation n_axPC) (CursorLocation n_aApe) (Maybe n_axPC) (Maybe n_aApe)
+ Brick.Types: cursorLocationNameL :: forall n_atyr n_aw7M. Lens (CursorLocation n_atyr) (CursorLocation n_aw7M) (Maybe n_atyr) (Maybe n_aw7M)
- Brick.Types: cursorsL :: forall n_axPB. Lens' (Result n_axPB) [CursorLocation n_axPB]
+ Brick.Types: cursorsL :: forall n_atyq. Lens' (Result n_atyq) [CursorLocation n_atyq]
- Brick.Types: eBottomL :: forall a_ahz0. Lens' (Edges a_ahz0) a_ahz0
+ Brick.Types: eBottomL :: forall a_afCd. Lens' (Edges a_afCd) a_afCd
- Brick.Types: eLeftL :: forall a_ahz0. Lens' (Edges a_ahz0) a_ahz0
+ Brick.Types: eLeftL :: forall a_afCd. Lens' (Edges a_afCd) a_afCd
- Brick.Types: eRightL :: forall a_ahz0. Lens' (Edges a_ahz0) a_ahz0
+ Brick.Types: eRightL :: forall a_afCd. Lens' (Edges a_afCd) a_afCd
- Brick.Types: eTopL :: forall a_ahz0. Lens' (Edges a_ahz0) a_ahz0
+ Brick.Types: eTopL :: forall a_afCd. Lens' (Edges a_afCd) a_afCd
- Brick.Types: extentsL :: forall n_axPB. Lens' (Result n_axPB) [Extent n_axPB]
+ Brick.Types: extentsL :: forall n_atyq. Lens' (Result n_atyq) [Extent n_atyq]
- Brick.Types: imageL :: forall n_axPB. Lens' (Result n_axPB) Image
+ Brick.Types: imageL :: forall n_atyq. Lens' (Result n_atyq) Image
- Brick.Types: visibilityRequestsL :: forall n_axPB. Lens' (Result n_axPB) [VisibilityRequest]
+ Brick.Types: visibilityRequestsL :: forall n_atyq. Lens' (Result n_atyq) [VisibilityRequest]
- Brick.Types: windowHeightL :: forall n_axPx. Lens' (Context n_axPx) Int
+ Brick.Types: windowHeightL :: forall n_atym. Lens' (Context n_atym) Int
- Brick.Types: windowWidthL :: forall n_axPx. Lens' (Context n_axPx) Int
+ Brick.Types: windowWidthL :: forall n_atym. Lens' (Context n_atym) Int
- Brick.Widgets.Dialog: dialogButtonsL :: forall a_a1t3l n_a1t3m a_a1t4j. Lens (Dialog a_a1t3l n_a1t3m) (Dialog a_a1t4j n_a1t3m) [(String, n_a1t3m, a_a1t3l)] [(String, n_a1t3m, a_a1t4j)]
+ Brick.Widgets.Dialog: dialogButtonsL :: forall a_a1gjv n_a1gjw a_a1gkt. Lens (Dialog a_a1gjv n_a1gjw) (Dialog a_a1gkt n_a1gjw) [(String, n_a1gjw, a_a1gjv)] [(String, n_a1gjw, a_a1gkt)]
- Brick.Widgets.Dialog: dialogTitleL :: forall a_a1t3l n_a1t3m. Lens' (Dialog a_a1t3l n_a1t3m) (Maybe (Widget n_a1t3m))
+ Brick.Widgets.Dialog: dialogTitleL :: forall a_a1gjv n_a1gjw. Lens' (Dialog a_a1gjv n_a1gjw) (Maybe (Widget n_a1gjw))
- Brick.Widgets.Dialog: dialogWidthL :: forall a_a1t3l n_a1t3m. Lens' (Dialog a_a1t3l n_a1t3m) Int
+ Brick.Widgets.Dialog: dialogWidthL :: forall a_a1gjv n_a1gjw. Lens' (Dialog a_a1gjv n_a1gjw) Int
- Brick.Widgets.Edit: editContentsL :: forall t_a1l7p n_a1l7q t_a1l8a. Lens (Editor t_a1l7p n_a1l7q) (Editor t_a1l8a n_a1l7q) (TextZipper t_a1l7p) (TextZipper t_a1l8a)
+ Brick.Widgets.Edit: editContentsL :: forall t_a19rG n_a19rH t_a19sr. Lens (Editor t_a19rG n_a19rH) (Editor t_a19sr n_a19rH) (TextZipper t_a19rG) (TextZipper t_a19sr)
- Brick.Widgets.FileBrowser: fileBrowserEntriesG :: forall n_a1H34. SimpleGetter (FileBrowser n_a1H34) (List n_a1H34 FileInfo)
+ Brick.Widgets.FileBrowser: fileBrowserEntriesG :: forall n_a1sjV. SimpleGetter (FileBrowser n_a1sjV) (List n_a1sjV FileInfo)
- Brick.Widgets.FileBrowser: fileBrowserEntryFilterG :: forall n_a1H34. SimpleGetter (FileBrowser n_a1H34) (Maybe (FileInfo -> Bool))
+ Brick.Widgets.FileBrowser: fileBrowserEntryFilterG :: forall n_a1sjV. SimpleGetter (FileBrowser n_a1sjV) (Maybe (FileInfo -> Bool))
- Brick.Widgets.FileBrowser: fileBrowserExceptionG :: forall n_a1H34. SimpleGetter (FileBrowser n_a1H34) (Maybe IOException)
+ Brick.Widgets.FileBrowser: fileBrowserExceptionG :: forall n_a1sjV. SimpleGetter (FileBrowser n_a1sjV) (Maybe IOException)
- Brick.Widgets.FileBrowser: fileBrowserLatestResultsG :: forall n_a1H34. SimpleGetter (FileBrowser n_a1H34) [FileInfo]
+ Brick.Widgets.FileBrowser: fileBrowserLatestResultsG :: forall n_a1sjV. SimpleGetter (FileBrowser n_a1sjV) [FileInfo]
- Brick.Widgets.FileBrowser: fileBrowserNameG :: forall n_a1H34. SimpleGetter (FileBrowser n_a1H34) n_a1H34
+ Brick.Widgets.FileBrowser: fileBrowserNameG :: forall n_a1sjV. SimpleGetter (FileBrowser n_a1sjV) n_a1sjV
- Brick.Widgets.FileBrowser: fileBrowserSearchStringG :: forall n_a1H34. SimpleGetter (FileBrowser n_a1H34) (Maybe Text)
+ Brick.Widgets.FileBrowser: fileBrowserSearchStringG :: forall n_a1sjV. SimpleGetter (FileBrowser n_a1sjV) (Maybe Text)
- Brick.Widgets.FileBrowser: fileBrowserSelectableG :: forall n_a1H34. SimpleGetter (FileBrowser n_a1H34) (FileInfo -> Bool)
+ Brick.Widgets.FileBrowser: fileBrowserSelectableG :: forall n_a1sjV. SimpleGetter (FileBrowser n_a1sjV) (FileInfo -> Bool)
- Brick.Widgets.FileBrowser: fileBrowserSelectableL :: forall n_a1H34. Lens' (FileBrowser n_a1H34) (FileInfo -> Bool)
+ Brick.Widgets.FileBrowser: fileBrowserSelectableL :: forall n_a1sjV. Lens' (FileBrowser n_a1sjV) (FileInfo -> Bool)
- Brick.Widgets.FileBrowser: fileBrowserSelectedFilesG :: forall n_a1H34. SimpleGetter (FileBrowser n_a1H34) (Set String)
+ Brick.Widgets.FileBrowser: fileBrowserSelectedFilesG :: forall n_a1sjV. SimpleGetter (FileBrowser n_a1sjV) (Set String)
- Brick.Widgets.FileBrowser: fileBrowserWorkingDirectoryG :: forall n_a1H34. SimpleGetter (FileBrowser n_a1H34) FilePath
+ Brick.Widgets.FileBrowser: fileBrowserWorkingDirectoryG :: forall n_a1sjV. SimpleGetter (FileBrowser n_a1sjV) FilePath
- Brick.Widgets.List: listElementsL :: forall n_a1AKc t_a1AKd e_a1AKe t_a1AZQ e_a1AZR. Lens (GenericList n_a1AKc t_a1AKd e_a1AKe) (GenericList n_a1AKc t_a1AZQ e_a1AZR) (t_a1AKd e_a1AKe) (t_a1AZQ e_a1AZR)
+ Brick.Widgets.List: listElementsL :: forall n_a1mRw t_a1mRx e_a1mRy t_a1n7a e_a1n7b. Lens (GenericList n_a1mRw t_a1mRx e_a1mRy) (GenericList n_a1mRw t_a1n7a e_a1n7b) (t_a1mRx e_a1mRy) (t_a1n7a e_a1n7b)
- Brick.Widgets.List: listItemHeightL :: forall n_a1AKc t_a1AKd e_a1AKe. Lens' (GenericList n_a1AKc t_a1AKd e_a1AKe) Int
+ Brick.Widgets.List: listItemHeightL :: forall n_a1mRw t_a1mRx e_a1mRy. Lens' (GenericList n_a1mRw t_a1mRx e_a1mRy) Int
- Brick.Widgets.List: listNameL :: forall n_a1AKc t_a1AKd e_a1AKe n_a1AZS. Lens (GenericList n_a1AKc t_a1AKd e_a1AKe) (GenericList n_a1AZS t_a1AKd e_a1AKe) n_a1AKc n_a1AZS
+ Brick.Widgets.List: listNameL :: forall n_a1mRw t_a1mRx e_a1mRy n_a1n7c. Lens (GenericList n_a1mRw t_a1mRx e_a1mRy) (GenericList n_a1n7c t_a1mRx e_a1mRy) n_a1mRw n_a1n7c
- Brick.Widgets.List: listSelectedL :: forall n_a1AKc t_a1AKd e_a1AKe. Lens' (GenericList n_a1AKc t_a1AKd e_a1AKe) (Maybe Int)
+ Brick.Widgets.List: listSelectedL :: forall n_a1mRw t_a1mRx e_a1mRy. Lens' (GenericList n_a1mRw t_a1mRx e_a1mRy) (Maybe Int)
Files
- CHANGELOG.md +10/−0
- brick.cabal +1/−1
- src/Brick/Widgets/FileBrowser.hs +12/−5
CHANGELOG.md view
@@ -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 ---
brick.cabal view
@@ -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
src/Brick/Widgets/FileBrowser.hs view
@@ -158,7 +158,7 @@ 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@@ -728,8 +728,13 @@ _ -> 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.@@ -742,14 +747,16 @@ 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