ui: allow the filter query to be changed
This commit is contained in:
		
							parent
							
								
									606036e1a2
								
							
						
					
					
						commit
						9131eb7c67
					
				| @ -25,6 +25,7 @@ import qualified Data.Vector as V | ||||
| import Graphics.Vty as Vty | ||||
| import Brick | ||||
| import Brick.Widgets.List | ||||
| import Brick.Widgets.Edit | ||||
| import Brick.Widgets.Border (borderAttr) | ||||
| -- import Brick.Widgets.Center | ||||
| 
 | ||||
| @ -103,7 +104,8 @@ initAccountsScreen _ _ = error "init function called with wrong screen type, sho | ||||
| drawAccountsScreen :: AppState -> [Widget] | ||||
| drawAccountsScreen AppState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ropts}} | ||||
|                            ,ajournal=j | ||||
|                            ,aScreen=AccountsScreen{asState=(l,_)}} = | ||||
|                            ,aScreen=AccountsScreen{asState=(l,_)} | ||||
|                            ,aMinibuffer=mbuf} = | ||||
|   [ui] | ||||
|     where | ||||
|       toplabel = files | ||||
| @ -148,11 +150,16 @@ drawAccountsScreen AppState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ropts}} | ||||
|         ,("C", "cleared?") | ||||
|         ,("U", "uncleared?") | ||||
|         ,("R", "real?") | ||||
|         ,("f", "filter") | ||||
|         ,("right/enter", "register") | ||||
|         ,("g", "reload") | ||||
|         ,("q", "quit") | ||||
|         ] | ||||
| 
 | ||||
|       bottomarea = case mbuf of | ||||
|                     Nothing  -> bottomlabel | ||||
|                     Just ed  -> minibuffer ed | ||||
| 
 | ||||
|       ui = Widget Greedy Greedy $ do | ||||
|         c <- getContext | ||||
|         let | ||||
| @ -188,7 +195,7 @@ drawAccountsScreen AppState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ropts}} | ||||
| 
 | ||||
|           colwidths = (acctwidth, balwidth) | ||||
| 
 | ||||
|         render $ defaultLayout toplabel bottomlabel $ renderList l (drawAccountsItem colwidths) | ||||
|         render $ defaultLayout toplabel bottomarea $ renderList l (drawAccountsItem colwidths) | ||||
| 
 | ||||
| drawAccountsScreen _ = error "draw function called with wrong screen type, should not happen" | ||||
| 
 | ||||
| @ -224,7 +231,8 @@ handleAccountsScreen st@AppState{ | ||||
|    aScreen=scr@AccountsScreen{asState=(l,selacct)} | ||||
|   ,aopts=UIOpts{cliopts_=copts} | ||||
|   ,ajournal=j | ||||
|   } e = do | ||||
|   ,aMinibuffer=mbuf | ||||
|   } ev = do | ||||
|     d <- liftIO getCurrentDay | ||||
|     -- c <- getContext | ||||
|     -- let h = c^.availHeightL | ||||
| @ -238,48 +246,60 @@ handleAccountsScreen st@AppState{ | ||||
|                   Nothing -> selacct | ||||
|       st' = st{aScreen=scr{asState=(l,selacct')}} | ||||
| 
 | ||||
|     case e of | ||||
|         Vty.EvKey Vty.KEsc []        -> halt st' | ||||
|         Vty.EvKey (Vty.KChar 'q') [] -> halt st' | ||||
|         -- Vty.EvKey (Vty.KChar 'l') [Vty.MCtrl] -> do | ||||
|     case mbuf of | ||||
|       Nothing -> | ||||
| 
 | ||||
|         Vty.EvKey (Vty.KChar 'g') [] -> do | ||||
|           (ej, _) <- liftIO $ journalReloadIfChanged copts d j | ||||
|           case ej of | ||||
|             Right j' -> continue $ reload j' d st' | ||||
|             Left err -> continue $ screenEnter d ES.screen{esState=err} st' | ||||
|         case ev of | ||||
|             Vty.EvKey (Vty.KChar 'q') [] -> halt st' | ||||
|             -- Vty.EvKey (Vty.KChar 'l') [Vty.MCtrl] -> do | ||||
| 
 | ||||
|         Vty.EvKey (Vty.KChar '-') [] -> continue $ reload j d $ decDepth st' | ||||
|         Vty.EvKey (Vty.KChar '+') [] -> continue $ reload j d $ incDepth st' | ||||
|         Vty.EvKey (Vty.KChar '=') [] -> continue $ reload j d $ incDepth st' | ||||
|         Vty.EvKey (Vty.KChar '1') [] -> continue $ reload j d $ setDepth 1 st' | ||||
|         Vty.EvKey (Vty.KChar '2') [] -> continue $ reload j d $ setDepth 2 st' | ||||
|         Vty.EvKey (Vty.KChar '3') [] -> continue $ reload j d $ setDepth 3 st' | ||||
|         Vty.EvKey (Vty.KChar '4') [] -> continue $ reload j d $ setDepth 4 st' | ||||
|         Vty.EvKey (Vty.KChar '5') [] -> continue $ reload j d $ setDepth 5 st' | ||||
|         Vty.EvKey (Vty.KChar '6') [] -> continue $ reload j d $ setDepth 6 st' | ||||
|         Vty.EvKey (Vty.KChar '7') [] -> continue $ reload j d $ setDepth 7 st' | ||||
|         Vty.EvKey (Vty.KChar '8') [] -> continue $ reload j d $ setDepth 8 st' | ||||
|         Vty.EvKey (Vty.KChar '9') [] -> continue $ reload j d $ setDepth 9 st' | ||||
|         Vty.EvKey (Vty.KChar '0') [] -> continue $ reload j d $ setDepth 0 st' | ||||
|         Vty.EvKey (Vty.KChar 'F') [] -> continue $ reload j d $ stToggleFlat st' | ||||
|         Vty.EvKey (Vty.KChar 'E') [] -> scrollTop >> (continue $ reload j d $ stToggleEmpty st') | ||||
|         Vty.EvKey (Vty.KChar 'C') [] -> scrollTop >> (continue $ reload j d $ stToggleCleared st') | ||||
|         Vty.EvKey (Vty.KChar 'U') [] -> scrollTop >> (continue $ reload j d $ stToggleUncleared st') | ||||
|         Vty.EvKey (Vty.KChar 'R') [] -> scrollTop >> (continue $ reload j d $ stToggleReal st') | ||||
|         Vty.EvKey (Vty.KLeft) []     -> continue $ popScreen st' | ||||
|         Vty.EvKey (k) [] | k `elem` [Vty.KRight, Vty.KEnter] -> do | ||||
|           let | ||||
|             scr = RS.rsSetCurrentAccount selacct' RS.screen | ||||
|             st'' = screenEnter d scr st' | ||||
|           scrollTopRegister | ||||
|           continue st'' | ||||
|             Vty.EvKey (Vty.KChar 'g') [] -> do | ||||
|               (ej, _) <- liftIO $ journalReloadIfChanged copts d j | ||||
|               case ej of | ||||
|                 Right j' -> continue $ reload j' d st' | ||||
|                 Left err -> continue $ screenEnter d ES.screen{esState=err} st' | ||||
| 
 | ||||
|             Vty.EvKey (Vty.KChar '-') [] -> continue $ reload j d $ decDepth st' | ||||
|             Vty.EvKey (Vty.KChar '+') [] -> continue $ reload j d $ incDepth st' | ||||
|             Vty.EvKey (Vty.KChar '=') [] -> continue $ reload j d $ incDepth st' | ||||
|             Vty.EvKey (Vty.KChar '1') [] -> continue $ reload j d $ setDepth 1 st' | ||||
|             Vty.EvKey (Vty.KChar '2') [] -> continue $ reload j d $ setDepth 2 st' | ||||
|             Vty.EvKey (Vty.KChar '3') [] -> continue $ reload j d $ setDepth 3 st' | ||||
|             Vty.EvKey (Vty.KChar '4') [] -> continue $ reload j d $ setDepth 4 st' | ||||
|             Vty.EvKey (Vty.KChar '5') [] -> continue $ reload j d $ setDepth 5 st' | ||||
|             Vty.EvKey (Vty.KChar '6') [] -> continue $ reload j d $ setDepth 6 st' | ||||
|             Vty.EvKey (Vty.KChar '7') [] -> continue $ reload j d $ setDepth 7 st' | ||||
|             Vty.EvKey (Vty.KChar '8') [] -> continue $ reload j d $ setDepth 8 st' | ||||
|             Vty.EvKey (Vty.KChar '9') [] -> continue $ reload j d $ setDepth 9 st' | ||||
|             Vty.EvKey (Vty.KChar '0') [] -> continue $ reload j d $ setDepth 0 st' | ||||
|             Vty.EvKey (Vty.KChar 'F') [] -> continue $ reload j d $ stToggleFlat st' | ||||
|             Vty.EvKey (Vty.KChar 'E') [] -> scrollTop >> (continue $ reload j d $ stToggleEmpty st') | ||||
|             Vty.EvKey (Vty.KChar 'C') [] -> scrollTop >> (continue $ reload j d $ stToggleCleared st') | ||||
|             Vty.EvKey (Vty.KChar 'U') [] -> scrollTop >> (continue $ reload j d $ stToggleUncleared st') | ||||
|             Vty.EvKey (Vty.KChar 'R') [] -> scrollTop >> (continue $ reload j d $ stToggleReal st') | ||||
|             Vty.EvKey (Vty.KChar 'f') [] -> continue $ reload j d $ stShowMinibuffer st' | ||||
|             Vty.EvKey (Vty.KLeft) []     -> continue $ popScreen st' | ||||
|             Vty.EvKey (k) [] | k `elem` [Vty.KRight, Vty.KEnter] -> do | ||||
|               let | ||||
|                 scr = RS.rsSetCurrentAccount selacct' RS.screen | ||||
|                 st'' = screenEnter d scr st' | ||||
|               scrollTopRegister | ||||
|               continue st'' | ||||
| 
 | ||||
|             -- fall through to the list's event handler (handles up/down) | ||||
|             ev                       -> do | ||||
|                                          l' <- handleEvent ev l | ||||
|                                          continue $ st'{aScreen=scr{asState=(l',selacct')}} | ||||
|                                      -- continue =<< handleEventLensed st' someLens ev | ||||
| 
 | ||||
|       Just ed -> | ||||
|         case ev of | ||||
|             Vty.EvKey Vty.KEsc   [] -> continue $ stHideMinibuffer st' | ||||
|             Vty.EvKey Vty.KEnter [] -> continue $ reload j d $ stFilter s $ stHideMinibuffer st' | ||||
|                                         where s = chomp $ unlines $ getEditContents ed | ||||
|             ev                      -> do ed' <- handleEvent ev ed | ||||
|                                           continue $ st'{aMinibuffer=Just ed'} | ||||
| 
 | ||||
|         -- fall through to the list's event handler (handles up/down) | ||||
|         ev                       -> do | ||||
|                                      l' <- handleEvent ev l | ||||
|                                      continue $ st'{aScreen=scr{asState=(l',selacct')}} | ||||
|                                  -- continue =<< handleEventLensed st' someLens ev | ||||
|   where | ||||
|     -- Encourage a more stable scroll position when toggling list items. | ||||
|     -- We scroll to the top, and the viewport will automatically | ||||
|  | ||||
| @ -115,6 +115,7 @@ runBrickUi uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}} j = do | ||||
|                    ,ajournal=j | ||||
|                    ,aScreen=asSetSelectedAccount acct AS.screen | ||||
|                    ,aPrevScreens=[] | ||||
|                    ,aMinibuffer=Nothing | ||||
|                    } | ||||
|    | ||||
|     st = (sInitFn scr) d | ||||
| @ -123,6 +124,7 @@ runBrickUi uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}} j = do | ||||
|            ,ajournal=j | ||||
|            ,aScreen=scr | ||||
|            ,aPrevScreens=prevscrs | ||||
|            ,aMinibuffer=Nothing | ||||
|            } | ||||
|           | ||||
|     app :: App (AppState) V.Event | ||||
|  | ||||
| @ -21,6 +21,7 @@ import qualified Data.Vector as V | ||||
| import Graphics.Vty as Vty | ||||
| import Brick | ||||
| import Brick.Widgets.List | ||||
| import Brick.Widgets.Edit | ||||
| import Brick.Widgets.Border (borderAttr) | ||||
| -- import Brick.Widgets.Center | ||||
| -- import Text.Printf | ||||
| @ -94,12 +95,14 @@ initRegisterScreen _ _ = error "init function called with wrong screen type, sho | ||||
| 
 | ||||
| drawRegisterScreen :: AppState -> [Widget] | ||||
| drawRegisterScreen AppState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ropts}} | ||||
|                            ,aScreen=RegisterScreen{rsState=(l,acct)}} = [ui] | ||||
|                            ,aScreen=RegisterScreen{rsState=(l,acct)} | ||||
|                            ,aMinibuffer=mbuf} | ||||
|   = [ui] | ||||
|   where | ||||
|     toplabel = withAttr ("border" <> "bold") (str $ T.unpack acct) | ||||
|             <+> togglefilters | ||||
|             <+> str " transactions" | ||||
|             -- <+> borderQueryStr querystr -- no, account transactions report shows all transactions in the acct ? | ||||
|             <+> borderQueryStr (query_ ropts) | ||||
|             -- <+> str " and subs" | ||||
|             <+> str " (" | ||||
|             <+> cur | ||||
| @ -176,12 +179,17 @@ drawRegisterScreen AppState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ropts}} | ||||
|           ,("C", "cleared?") | ||||
|           ,("U", "uncleared?") | ||||
|           ,("R", "real?") | ||||
|           ,("f", "filter") | ||||
|           ,("right/enter", "transaction") | ||||
|           ,("g", "reload") | ||||
|           ,("q", "quit") | ||||
|           ] | ||||
| 
 | ||||
|       render $ defaultLayout toplabel bottomlabel $ renderList l (drawRegisterItem colwidths) | ||||
|         bottomarea = case mbuf of | ||||
|                       Nothing  -> bottomlabel | ||||
|                       Just ed  -> minibuffer ed | ||||
| 
 | ||||
|       render $ defaultLayout toplabel bottomarea $ renderList l (drawRegisterItem colwidths) | ||||
| 
 | ||||
| drawRegisterScreen _ = error "draw function called with wrong screen type, should not happen" | ||||
| 
 | ||||
| @ -211,40 +219,53 @@ handleRegisterScreen st@AppState{ | ||||
|    aScreen=s@RegisterScreen{rsState=(l,acct)} | ||||
|   ,aopts=UIOpts{cliopts_=copts} | ||||
|   ,ajournal=j | ||||
|   } e = do | ||||
|   ,aMinibuffer=mbuf | ||||
|   } ev = do | ||||
|   d <- liftIO getCurrentDay | ||||
|   case e of | ||||
|     Vty.EvKey Vty.KEsc []        -> halt st | ||||
|     Vty.EvKey (Vty.KChar 'q') [] -> halt st | ||||
|   case mbuf of | ||||
|     Nothing -> | ||||
| 
 | ||||
|     Vty.EvKey (Vty.KChar 'g') [] -> do | ||||
|       (ej, _) <- liftIO $ journalReloadIfChanged copts d j | ||||
|       case ej of | ||||
|         Right j' -> continue $ reload j' d st | ||||
|         Left err -> continue $ screenEnter d ES.screen{esState=err} st | ||||
|       case ev of | ||||
|         Vty.EvKey (Vty.KChar 'q') [] -> halt st | ||||
| 
 | ||||
|     Vty.EvKey (Vty.KChar 'E') [] -> scrollTop >> (continue $ reload j d $ stToggleEmpty st) | ||||
|     Vty.EvKey (Vty.KChar 'C') [] -> scrollTop >> (continue $ reload j d $ stToggleCleared st) | ||||
|     Vty.EvKey (Vty.KChar 'U') [] -> scrollTop >> (continue $ reload j d $ stToggleUncleared st) | ||||
|     Vty.EvKey (Vty.KChar 'R') [] -> scrollTop >> (continue $ reload j d $ stToggleReal st) | ||||
|     Vty.EvKey (Vty.KLeft)     [] -> continue $ popScreen st | ||||
|         Vty.EvKey (Vty.KChar 'g') [] -> do | ||||
|           (ej, _) <- liftIO $ journalReloadIfChanged copts d j | ||||
|           case ej of | ||||
|             Right j' -> continue $ reload j' d st | ||||
|             Left err -> continue $ screenEnter d ES.screen{esState=err} st | ||||
| 
 | ||||
|     Vty.EvKey (k) [] | k `elem` [Vty.KRight, Vty.KEnter] -> do | ||||
|       case listSelectedElement l of | ||||
|         Just (_, (_, _, _, _, _, t)) -> | ||||
|           let | ||||
|             ts = map sixth6 $ V.toList $ listElements l | ||||
|             numberedts = zip [1..] ts | ||||
|             i = fromIntegral $ maybe 0 (+1) $ elemIndex t ts -- XXX | ||||
|           in | ||||
|             continue $ screenEnter d TS.screen{tsState=((i,t),numberedts,acct)} st | ||||
|         Nothing -> continue st | ||||
|         Vty.EvKey (Vty.KChar 'E') [] -> scrollTop >> (continue $ reload j d $ stToggleEmpty st) | ||||
|         Vty.EvKey (Vty.KChar 'C') [] -> scrollTop >> (continue $ reload j d $ stToggleCleared st) | ||||
|         Vty.EvKey (Vty.KChar 'U') [] -> scrollTop >> (continue $ reload j d $ stToggleUncleared st) | ||||
|         Vty.EvKey (Vty.KChar 'R') [] -> scrollTop >> (continue $ reload j d $ stToggleReal st) | ||||
|         Vty.EvKey (Vty.KChar 'f') [] -> (continue $ reload j d $ stShowMinibuffer st) | ||||
|         Vty.EvKey (Vty.KLeft)     [] -> continue $ popScreen st | ||||
| 
 | ||||
|         Vty.EvKey (k) [] | k `elem` [Vty.KRight, Vty.KEnter] -> do | ||||
|           case listSelectedElement l of | ||||
|             Just (_, (_, _, _, _, _, t)) -> | ||||
|               let | ||||
|                 ts = map sixth6 $ V.toList $ listElements l | ||||
|                 numberedts = zip [1..] ts | ||||
|                 i = fromIntegral $ maybe 0 (+1) $ elemIndex t ts -- XXX | ||||
|               in | ||||
|                 continue $ screenEnter d TS.screen{tsState=((i,t),numberedts,acct)} st | ||||
|             Nothing -> continue st | ||||
| 
 | ||||
|         -- fall through to the list's event handler (handles [pg]up/down) | ||||
|         ev                       -> do | ||||
|                                      l' <- handleEvent ev l | ||||
|                                      continue st{aScreen=s{rsState=(l',acct)}} | ||||
|                                      -- continue =<< handleEventLensed st someLens ev | ||||
| 
 | ||||
|     Just ed -> | ||||
|         case ev of | ||||
|             Vty.EvKey Vty.KEsc   [] -> continue $ stHideMinibuffer st | ||||
|             Vty.EvKey Vty.KEnter [] -> continue $ reload j d $ stFilter s $ stHideMinibuffer st | ||||
|                                         where s = chomp $ unlines $ getEditContents ed | ||||
|             ev                      -> do ed' <- handleEvent ev ed | ||||
|                                           continue $ st{aMinibuffer=Just ed'} | ||||
| 
 | ||||
|     -- fall through to the list's event handler (handles [pg]up/down) | ||||
|     ev                       -> do | ||||
|                                  l' <- handleEvent ev l | ||||
|                                  continue st{aScreen=s{rsState=(l',acct)}} | ||||
|                                  -- continue =<< handleEventLensed st someLens ev | ||||
|   where | ||||
|     -- Encourage a more stable scroll position when toggling list items (cf AccountsScreen.hs) | ||||
|     scrollTop = vScrollToBeginning $ viewportScroll "register" | ||||
|  | ||||
| @ -72,6 +72,7 @@ themesList = [ | ||||
|               (borderAttr <> "query", cyan `on` black & bold), | ||||
|               (borderAttr <> "depth", yellow `on` black & bold), | ||||
|               (borderAttr <> "keys", white `on` black & bold), | ||||
|               (borderAttr <> "minibuffer", white `on` black & bold), | ||||
|               -- ("normal"                , black `on` white), | ||||
|               ("list"                  , black `on` white),      -- regular list items | ||||
|               ("list" <> "selected"    , white `on` blue & bold), -- selected list items | ||||
|  | ||||
| @ -1,9 +1,12 @@ | ||||
| {-# LANGUAGE StandaloneDeriving #-} | ||||
| 
 | ||||
| module Hledger.UI.UITypes where | ||||
| 
 | ||||
| import Data.Time.Calendar (Day) | ||||
| import qualified Graphics.Vty as V | ||||
| import Brick | ||||
| import Brick.Widgets.List (List) | ||||
| import Brick.Widgets.Edit (Editor) | ||||
| import Text.Show.Functions () | ||||
|   -- import the Show instance for functions. Warning, this also re-exports it | ||||
| 
 | ||||
| @ -12,6 +15,10 @@ import Hledger.UI.UIOptions | ||||
| 
 | ||||
| ---------------------------------------------------------------------- | ||||
| 
 | ||||
| instance Show Editor | ||||
|   where | ||||
|     show = const "<Editor>" | ||||
| 
 | ||||
| -- | hledger-ui's application state. This is part of, but distinct | ||||
| -- from, brick's App. | ||||
| data AppState = AppState { | ||||
| @ -19,6 +26,7 @@ data AppState = AppState { | ||||
|   ,ajournal :: Journal      -- ^ the journal being viewed | ||||
|   ,aScreen :: Screen        -- ^ the currently active screen | ||||
|   ,aPrevScreens :: [Screen] -- ^ previously visited screens, most recent first | ||||
|   ,aMinibuffer :: Maybe Editor  -- ^ a compact editor used for data entry, when active | ||||
|   } deriving (Show) | ||||
| 
 | ||||
| -- | Types of screen available within the app, along with their state. | ||||
|  | ||||
| @ -14,6 +14,7 @@ module Hledger.UI.UIUtils ( | ||||
|  ,borderQueryStr | ||||
|  ,borderDepthStr | ||||
|  ,borderKeysStr | ||||
|  ,minibuffer | ||||
|  -- | ||||
|  ,stToggleCleared | ||||
|  ,stTogglePending | ||||
| @ -21,6 +22,9 @@ module Hledger.UI.UIUtils ( | ||||
|  ,stToggleEmpty | ||||
|  ,stToggleFlat | ||||
|  ,stToggleReal | ||||
|  ,stFilter | ||||
|  ,stShowMinibuffer | ||||
|  ,stHideMinibuffer | ||||
|  ) where | ||||
| 
 | ||||
| import Lens.Micro ((^.)) | ||||
| @ -29,9 +33,11 @@ import Lens.Micro ((^.)) | ||||
| -- import Data.Default | ||||
| import Data.List | ||||
| import Data.Monoid | ||||
| import Data.Text.Zipper (gotoEOL) | ||||
| import Data.Time.Calendar (Day) | ||||
| import Brick | ||||
| -- import Brick.Widgets.List | ||||
| import Brick.Widgets.Edit | ||||
| import Brick.Widgets.Border | ||||
| import Brick.Widgets.Border.Style | ||||
| import Graphics.Vty as Vty | ||||
| @ -87,6 +93,20 @@ stToggleReal st@AppState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=r | ||||
|   where | ||||
|     toggleReal ropts = ropts{real_=not $ real_ ropts} | ||||
| 
 | ||||
| -- | Apply a new filter query. | ||||
| stFilter :: String -> AppState -> AppState | ||||
| stFilter s st@AppState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} = | ||||
|   st{aopts=uopts{cliopts_=copts{reportopts_=ropts{query_=s}}}} | ||||
| 
 | ||||
| -- | Enable the minibuffer, setting its content to the current query with the cursor at the end. | ||||
| stShowMinibuffer st = st{aMinibuffer=Just e} | ||||
|   where | ||||
|     e = applyEdit gotoEOL $ editor "minibuffer" (str . unlines) (Just 1) oldq | ||||
|     oldq = query_ $ reportopts_ $ cliopts_ $ aopts st | ||||
| 
 | ||||
| -- | Disable the minibuffer, discarding any edit in progress. | ||||
| stHideMinibuffer st = st{aMinibuffer=Nothing} | ||||
| 
 | ||||
| -- | Regenerate the content for the current and previous screens, from a new journal and current date. | ||||
| reload :: Journal -> Day -> AppState -> AppState | ||||
| reload j d st@AppState{aScreen=s,aPrevScreens=ss} = | ||||
| @ -229,3 +249,9 @@ borderKeysStr keydescs = | ||||
|     -- sep = str " | " | ||||
|     sep = str " " | ||||
| 
 | ||||
| minibuffer :: Editor -> Widget | ||||
| minibuffer ed = | ||||
|   forceAttr (borderAttr <> "minibuffer") $ | ||||
|   hBox $ | ||||
|   [txt "filter: ", renderEditor ed] | ||||
| 
 | ||||
|  | ||||
| @ -232,7 +232,14 @@ With large journal files, there can be a noticeable pause. | ||||
| .PP | ||||
| \f[C]q\f[] quits the application. | ||||
| .PP | ||||
| Some screens have additional key bindings, described below. | ||||
| \f[C]f\f[] lets you add or change the current filter query which limits | ||||
| the data shown on most screens. | ||||
| While editing, you can use typical command\-line edit keys, and press | ||||
| enter to set the new filter, or escape to cancel. | ||||
| Note queries which filter by account name may not work well in the | ||||
| register screen. | ||||
| .PP | ||||
| Additional screen\-specific keys are described below. | ||||
| .SH SCREENS | ||||
| .SS Accounts screen | ||||
| .PP | ||||
|  | ||||
| @ -162,7 +162,13 @@ screens). With large journal files, there can be a noticeable pause. | ||||
| 
 | ||||
|    `q' quits the application. | ||||
| 
 | ||||
|    Some screens have additional key bindings, described below. | ||||
|    `f' lets you add or change the current filter query which limits the | ||||
| data shown on most screens. While editing, you can use typical | ||||
| command-line edit keys, and press enter to set the new filter, or escape | ||||
| to cancel. Note queries which filter by account name may not work well | ||||
| in the register screen. | ||||
| 
 | ||||
|    Additional screen-specific keys are described below. | ||||
| 
 | ||||
|  | ||||
| File: hledger-ui.1.info,  Node: SCREENS,  Prev: KEYS,  Up: Top | ||||
| @ -303,15 +309,15 @@ Node: OPTIONS714 | ||||
| Ref: #options813 | ||||
| Node: KEYS3689 | ||||
| Ref: #keys3786 | ||||
| Node: SCREENS4209 | ||||
| Ref: #screens4296 | ||||
| Node: Accounts screen4386 | ||||
| Ref: #accounts-screen4516 | ||||
| Node: Register screen5620 | ||||
| Ref: #register-screen5777 | ||||
| Node: Transaction screen7434 | ||||
| Ref: #transaction-screen7594 | ||||
| Node: Error screen8461 | ||||
| Ref: #error-screen8585 | ||||
| Node: SCREENS4506 | ||||
| Ref: #screens4593 | ||||
| Node: Accounts screen4683 | ||||
| Ref: #accounts-screen4813 | ||||
| Node: Register screen5917 | ||||
| Ref: #register-screen6074 | ||||
| Node: Transaction screen7731 | ||||
| Ref: #transaction-screen7891 | ||||
| Node: Error screen8758 | ||||
| Ref: #error-screen8882 | ||||
|  | ||||
| End Tag Table | ||||
|  | ||||
| @ -92,7 +92,13 @@ screens). With large journal files, there can be a noticeable pause. | ||||
| 
 | ||||
| `q` quits the application. | ||||
| 
 | ||||
| Some screens have additional key bindings, described below. | ||||
| `f` lets you add or change the current | ||||
| [filter query](/journal.html#queries) which limits the data shown on | ||||
| most screens. While editing, you can use typical command-line edit keys, | ||||
| and press enter to set the new filter, or escape to cancel. Note queries | ||||
| which filter by account name may not work well in the register screen. | ||||
| 
 | ||||
| Additional screen-specific keys are described below. | ||||
| 
 | ||||
| # SCREENS | ||||
| 
 | ||||
|  | ||||
| @ -154,7 +154,13 @@ KKEEYYSS | ||||
| 
 | ||||
|        q quits the application. | ||||
| 
 | ||||
|        Some screens have additional key bindings, described below. | ||||
|        f lets you add or change the current filter query which limits the data | ||||
|        shown on most screens.  While editing, you can use typical command-line | ||||
|        edit keys, and press enter to set the new filter, or escape to  cancel. | ||||
|        Note queries which filter by account name may not work well in the reg- | ||||
|        ister screen. | ||||
| 
 | ||||
|        Additional screen-specific keys are described below. | ||||
| 
 | ||||
| SSCCRREEEENNSS | ||||
|    AAccccoouunnttss ssccrreeeenn | ||||
|  | ||||
| @ -84,6 +84,7 @@ executables: | ||||
|       - safe >= 0.2 | ||||
|       - split >= 0.1 && < 0.3 | ||||
|       - text >= 1.2 && < 1.3 | ||||
|       - text-zipper >= 0.4 && < 0.5 | ||||
|       - transformers | ||||
|       - vector | ||||
|       - vty >= 5.2 && < 5.5 | ||||
|  | ||||
| @ -75,6 +75,7 @@ executable hledger-ui | ||||
|     , safe >= 0.2 | ||||
|     , split >= 0.1 && < 0.3 | ||||
|     , text >= 1.2 && < 1.3 | ||||
|     , text-zipper >= 0.4 && < 0.5 | ||||
|     , transformers | ||||
|     , vector | ||||
|     , vty >= 5.2 && < 5.6 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user