ui: historical/period toggle, help updates

accounts and register screens can now switch between "historical"
(default) and "period" modes

title header wording is clearer

quick help footer now indicates historical/period and tree/flat modes,
saving space in the title

help screen is more explanatory

the enter key has been reserved for later and is no longer an alias
for right/l
This commit is contained in:
Simon Michael 2016-08-12 17:44:55 -07:00
parent f3bcf570e5
commit 4e3c0cc936
5 changed files with 142 additions and 96 deletions

View File

@ -79,7 +79,13 @@ asInit d reset ui@UIState{
valuedate = fromMaybe d $ queryEndDate False q valuedate = fromMaybe d $ queryEndDate False q
-- run the report -- run the report
(items,_total) = convert $ singleBalanceReport ropts' q j (items,_total) = convert $ report ropts' q j
where
-- still using the old balanceReport for change reports as it
-- does not include every account from before the report period
report | balancetype_ ropts == HistoricalBalance = singleBalanceReport
| otherwise = balanceReport
-- pre-render the list items -- pre-render the list items
displayitem (fullacct, shortacct, indent, bal) = displayitem (fullacct, shortacct, indent, bal) =
@ -118,7 +124,7 @@ asDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
maxacctwidthseen = maxacctwidthseen =
-- ltrace "maxacctwidthseen" $ -- ltrace "maxacctwidthseen" $
V.maximum $ V.maximum $
V.map (\AccountsScreenItem{..} -> asItemIndentLevel*2 + textWidth asItemDisplayAccountName) $ V.map (\AccountsScreenItem{..} -> asItemIndentLevel + textWidth asItemDisplayAccountName) $
-- V.filter (\(indent,_,_,_) -> (indent-1) <= fromMaybe 99999 mdepth) $ -- V.filter (\(indent,_,_,_) -> (indent-1) <= fromMaybe 99999 mdepth) $
displayitems displayitems
maxbalwidthseen = maxbalwidthseen =
@ -145,14 +151,17 @@ asDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
render $ defaultLayout toplabel bottomlabel $ renderList (asDrawItem colwidths) True (_asList s) render $ defaultLayout toplabel bottomlabel $ renderList (asDrawItem colwidths) True (_asList s)
where where
ishistorical = balancetype_ ropts == HistoricalBalance
toplabel = toplabel =
files files
-- <+> withAttr (borderAttr <> "query") (str (if flat_ ropts then " flat" else ""))
<+> nonzero <+> nonzero
<+> str " accounts" <+> str (if ishistorical then " accounts" else " account changes")
<+> withAttr (borderAttr <> "query") (str (if flat_ ropts then " (flat)" else "")) -- <+> str (if ishistorical then " balances" else " changes")
<+> borderPeriodStr (if ishistorical then "at end of" else "in") (period_ ropts)
<+> borderQueryStr querystr <+> borderQueryStr querystr
<+> togglefilters <+> togglefilters
<+> borderPeriodStr (period_ ropts)
<+> borderDepthStr mdepth <+> borderDepthStr mdepth
<+> str " (" <+> str " ("
<+> cur <+> cur
@ -176,7 +185,7 @@ asDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
,if real_ ropts then ["real"] else [] ,if real_ ropts then ["real"] else []
] of ] of
[] -> str "" [] -> str ""
fs -> str " with " <+> withAttr (borderAttr <> "query") (str $ intercalate ", " fs) <+> str " txns" fs -> str " from " <+> withAttr (borderAttr <> "query") (str $ intercalate ", " fs) <+> str " txns"
nonzero | empty_ ropts = str "" nonzero | empty_ ropts = str ""
| otherwise = withAttr (borderAttr <> "query") (str " nonzero") | otherwise = withAttr (borderAttr <> "query") (str " nonzero")
cur = str (case _asList s ^. listSelectedL of cur = str (case _asList s ^. listSelectedL of
@ -188,17 +197,25 @@ asDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
Minibuffer ed -> minibuffer ed Minibuffer ed -> minibuffer ed
_ -> quickhelp _ -> quickhelp
where where
quickhelp = borderKeysStr [ selectedstr = withAttr (borderAttr <> "query") . str
("?", "help") quickhelp = borderKeysStr' [
,("right", "register") ("?", str "help")
,("F", "flat?") ,("right", str "register")
,("-+0123456789", "depth") ,("H"
,if ishistorical
then selectedstr "historical" <+> str "/period"
else str "historical" <+> selectedstr "/period")
,("F"
,if flat_ ropts
then str "tree/" <+> selectedstr "flat"
else selectedstr "tree" <+> str "/flat")
,("-+", str "depth")
--,("/", "filter") --,("/", "filter")
--,("DEL", "unfilter") --,("DEL", "unfilter")
--,("ESC", "cancel/top") --,("ESC", "cancel/top")
,("a", "add") ,("a", str "add")
,("g", "reload") -- ,("g", "reload")
,("q", "quit") ,("q", str "quit")
] ]
asDraw _ = error "draw function called with wrong screen type, should not happen" asDraw _ = error "draw function called with wrong screen type, should not happen"
@ -210,7 +227,7 @@ asDrawItem (acctwidth, balwidth) selected AccountsScreenItem{..} =
-- let showitem = intercalate "\n" . balanceReportItemAsText defreportopts fmt -- let showitem = intercalate "\n" . balanceReportItemAsText defreportopts fmt
render $ render $
addamts asItemRenderedAmounts $ addamts asItemRenderedAmounts $
str (T.unpack $ fitText (Just acctwidth) (Just acctwidth) True True $ T.replicate (2*asItemIndentLevel) " " <> asItemDisplayAccountName) <+> str (T.unpack $ fitText (Just acctwidth) (Just acctwidth) True True $ T.replicate (asItemIndentLevel) " " <> asItemDisplayAccountName) <+>
str " " <+> str " " <+>
str (balspace asItemRenderedAmounts) str (balspace asItemRenderedAmounts)
where where
@ -287,6 +304,7 @@ asHandle ui0@UIState{
EvKey (KChar '_') [] -> continue $ regenerateScreens j d $ decDepth ui EvKey (KChar '_') [] -> continue $ regenerateScreens j d $ decDepth ui
EvKey (KChar c) [] | c `elem` ['+','='] -> continue $ regenerateScreens j d $ incDepth ui EvKey (KChar c) [] | c `elem` ['+','='] -> continue $ regenerateScreens j d $ incDepth ui
EvKey (KChar 't') [] -> continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui EvKey (KChar 't') [] -> continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
EvKey (KChar 'H') [] -> continue $ regenerateScreens j d $ toggleHistorical ui
EvKey (KChar 'F') [] -> continue $ regenerateScreens j d $ toggleFlat ui EvKey (KChar 'F') [] -> continue $ regenerateScreens j d $ toggleFlat ui
EvKey (KChar 'Z') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleEmpty ui) EvKey (KChar 'Z') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleEmpty ui)
EvKey (KChar 'C') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleCleared ui) EvKey (KChar 'C') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleCleared ui)
@ -298,8 +316,8 @@ asHandle ui0@UIState{
EvKey (KLeft) [MShift] -> continue $ regenerateScreens j d $ previousReportPeriod ui EvKey (KLeft) [MShift] -> continue $ regenerateScreens j d $ previousReportPeriod ui
EvKey (KChar '/') [] -> continue $ regenerateScreens j d $ showMinibuffer ui EvKey (KChar '/') [] -> continue $ regenerateScreens j d $ showMinibuffer ui
EvKey k [] | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui) EvKey k [] | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui)
EvKey k [] | k `elem` [KLeft, KChar 'h'] -> continue $ popScreen ui EvKey k [] | k `elem` [KLeft, KChar 'h'] -> continue $ popScreen ui
EvKey k [] | k `elem` [KRight, KChar 'l', KEnter] -> scrollTopRegister >> continue (screenEnter d scr ui) EvKey k [] | k `elem` [KRight, KChar 'l'] -> scrollTopRegister >> continue (screenEnter d scr ui)
where where
scr = rsSetAccount selacct isdepthclipped registerScreen scr = rsSetAccount selacct isdepthclipped registerScreen
isdepthclipped = case getDepth ui of isdepthclipped = case getDepth ui of

View File

@ -62,7 +62,6 @@ rsInit d reset ui@UIState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ropts}}, ajo
thisacctq = Acct $ (if inclusive then accountNameToAccountRegex else accountNameToAccountOnlyRegex) rsAccount thisacctq = Acct $ (if inclusive then accountNameToAccountRegex else accountNameToAccountOnlyRegex) rsAccount
ropts' = ropts{ ropts' = ropts{
depth_=Nothing depth_=Nothing
,balancetype_=HistoricalBalance
} }
q = queryFromOpts d ropts' q = queryFromOpts d ropts'
-- reportq = filterQuery (not . queryIsDepth) q -- reportq = filterQuery (not . queryIsDepth) q
@ -158,14 +157,18 @@ rsDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
render $ defaultLayout toplabel bottomlabel $ renderList (rsDrawItem colwidths) True rsList render $ defaultLayout toplabel bottomlabel $ renderList (rsDrawItem colwidths) True rsList
where where
ishistorical = balancetype_ ropts == HistoricalBalance
inclusive = not (flat_ ropts) || rsForceInclusive
toplabel = toplabel =
withAttr ("border" <> "bold") (str $ T.unpack $ replaceHiddenAccountsNameWith "All" rsAccount) withAttr ("border" <> "bold") (str $ T.unpack $ replaceHiddenAccountsNameWith "All" rsAccount)
<+> withAttr (borderAttr <> "query") (str $ if inclusive then "" else " exclusive") -- <+> withAttr (borderAttr <> "query") (str $ if inclusive then "" else " exclusive")
<+> togglefilters <+> togglefilters
<+> str " transactions" <+> str " transactions"
-- <+> str (if ishistorical then " historical total" else " period total")
<+> borderQueryStr (query_ ropts) <+> borderQueryStr (query_ ropts)
-- <+> str " and subs" -- <+> str " and subs"
<+> borderPeriodStr (period_ ropts) <+> borderPeriodStr "in" (period_ ropts)
<+> str " (" <+> str " ("
<+> cur <+> cur
<+> str "/" <+> str "/"
@ -173,7 +176,6 @@ rsDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
<+> str ")" <+> str ")"
<+> (if ignore_assertions_ copts then withAttr (borderAttr <> "query") (str " ignoring balance assertions") else str "") <+> (if ignore_assertions_ copts then withAttr (borderAttr <> "query") (str " ignoring balance assertions") else str "")
where where
inclusive = not (flat_ ropts) || rsForceInclusive
togglefilters = togglefilters =
case concat [ case concat [
uiShowClearedStatus $ clearedstatus_ ropts uiShowClearedStatus $ clearedstatus_ ropts
@ -193,16 +195,22 @@ rsDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
Minibuffer ed -> minibuffer ed Minibuffer ed -> minibuffer ed
_ -> quickhelp _ -> quickhelp
where where
quickhelp = borderKeysStr [ selectedstr = withAttr (borderAttr <> "query") . str
("?", "help") quickhelp = borderKeysStr' [
,("left", "back") ("?", str "help")
,("right", "transaction") ,("left", str "back")
,("/", "filter") ,("right", str "transaction")
,("DEL", "unfilter") ,("H"
--,("ESC", "reset") ,if ishistorical
,("a", "add") then selectedstr "historical" <+> str "/period"
,("g", "reload") else str "historical" <+> selectedstr "/period")
,("q", "quit") ,("F"
,if inclusive
then selectedstr "inclusive" <+> str "/exclusive"
else str "inclusive/" <+> selectedstr "exclusive")
-- ,("a", "add")
-- ,("g", "reload")
-- ,("q", "quit")
] ]
rsDraw _ = error "draw function called with wrong screen type, should not happen" rsDraw _ = error "draw function called with wrong screen type, should not happen"
@ -265,6 +273,7 @@ rsHandle ui@UIState{
(pos,f) = case listSelectedElement rsList of (pos,f) = case listSelectedElement rsList of
Nothing -> (endPos, journalFilePath j) Nothing -> (endPos, journalFilePath j)
Just (_, RegisterScreenItem{rsItemTransaction=Transaction{tsourcepos=GenericSourcePos f l c}}) -> (Just (l, Just c),f) Just (_, RegisterScreenItem{rsItemTransaction=Transaction{tsourcepos=GenericSourcePos f l c}}) -> (Just (l, Just c),f)
EvKey (KChar 'H') [] -> continue $ regenerateScreens j d $ toggleHistorical ui
EvKey (KChar 'F') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleFlat ui) EvKey (KChar 'F') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleFlat ui)
EvKey (KChar 'Z') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleEmpty ui) EvKey (KChar 'Z') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleEmpty ui)
EvKey (KChar 'C') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleCleared ui) EvKey (KChar 'C') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleCleared ui)
@ -276,8 +285,8 @@ rsHandle ui@UIState{
EvKey (KRight) [MShift] -> continue $ regenerateScreens j d $ nextReportPeriod ui EvKey (KRight) [MShift] -> continue $ regenerateScreens j d $ nextReportPeriod ui
EvKey (KLeft) [MShift] -> continue $ regenerateScreens j d $ previousReportPeriod ui EvKey (KLeft) [MShift] -> continue $ regenerateScreens j d $ previousReportPeriod ui
EvKey k [] | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui) EvKey k [] | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui)
EvKey k [] | k `elem` [KLeft, KChar 'h'] -> continue $ popScreen ui EvKey k [] | k `elem` [KLeft, KChar 'h'] -> continue $ popScreen ui
EvKey k [] | k `elem` [KRight, KChar 'l', KEnter] -> do EvKey k [] | k `elem` [KRight, KChar 'l'] -> do
case listSelectedElement rsList of case listSelectedElement rsList of
Just (_, RegisterScreenItem{rsItemTransaction=t}) -> Just (_, RegisterScreenItem{rsItemTransaction=t}) ->
let let

View File

@ -56,6 +56,14 @@ toggleFlat ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropt
toggleFlatMode ropts@ReportOpts{accountlistmode_=ALFlat} = ropts{accountlistmode_=ALTree} toggleFlatMode ropts@ReportOpts{accountlistmode_=ALFlat} = ropts{accountlistmode_=ALTree}
toggleFlatMode ropts = ropts{accountlistmode_=ALFlat} toggleFlatMode ropts = ropts{accountlistmode_=ALFlat}
-- | Toggle between historical balances and period balances.
toggleHistorical :: UIState -> UIState
toggleHistorical ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
ui{aopts=uopts{cliopts_=copts{reportopts_=ropts{balancetype_=b}}}}
where
b | balancetype_ ropts == HistoricalBalance = PeriodChange
| otherwise = HistoricalBalance
-- | Toggle between showing all and showing only real (non-virtual) items. -- | Toggle between showing all and showing only real (non-virtual) items.
toggleReal :: UIState -> UIState toggleReal :: UIState -> UIState
toggleReal ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} = toggleReal ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =

View File

@ -8,7 +8,7 @@ where
import Brick import Brick
import Brick.Widgets.Border import Brick.Widgets.Border
import Brick.Widgets.Border.Style import Brick.Widgets.Border.Style
import Brick.Widgets.Center -- import Brick.Widgets.Center
import Brick.Widgets.Dialog import Brick.Widgets.Dialog
import Brick.Widgets.Edit import Brick.Widgets.Edit
import Data.List import Data.List
@ -48,9 +48,9 @@ helpDialog =
padLeftRight 1 $ padLeftRight 1 $
vBox [ vBox [
str "NAVIGATION" str "NAVIGATION"
,renderKey ("UP/k/DOWN/j/PGUP/PGDN/HOME/END", "") ,renderKey ("UP/DOWN/k/j/PGUP/PGDN/HOME/END", "")
,str " move selection" ,str " move selection"
,renderKey ("RIGHT/l/ENTER", "drill down") ,renderKey ("RIGHT/l", "more detail")
,renderKey ("LEFT/h", "previous screen") ,renderKey ("LEFT/h", "previous screen")
,renderKey ("ESC", "cancel / reset") ,renderKey ("ESC", "cancel / reset")
,str " " ,str " "
@ -61,40 +61,50 @@ helpDialog =
,renderKey ("g", "reload data") ,renderKey ("g", "reload data")
,renderKey ("I", "toggle balance assertions") ,renderKey ("I", "toggle balance assertions")
,renderKey ("q", "quit") ,renderKey ("q", "quit")
] ,str " "
,str "MANUAL"
,str "from help dialog:"
,renderKey ("t", "text")
,renderKey ("m", "man page")
,renderKey ("i", "info")
]
,padLeftRight 1 $ ,padLeftRight 1 $
vBox [ vBox [
str "FILTERING" str "FILTERING"
,renderKey ("/", "set a filter query") ,renderKey ("SHIFT-DOWN/UP", "shrink/grow report period")
,renderKey ("C", "toggle cleared filter") ,renderKey ("SHIFT-RIGHT/LEFT", "next/previous report period")
,renderKey ("U", "toggle uncleared filter") ,renderKey ("t", "set report period to today")
,renderKey ("R", "toggle real filter")
,renderKey ("Z", "toggle nonzero filter")
,renderKey ("F", "toggle flat/exclusive mode")
,str " " ,str " "
,renderKey ("t", " set report period to today") ,renderKey ("/", "set a filter query")
,renderKey ("d/u", "decrease/increase report period") ,renderKey ("C", "toggle cleared/all")
,renderKey ("n/p", "next/previous report period") ,renderKey ("U", "toggle uncleared/all")
,renderKey ("R", "toggle real/all")
,renderKey ("Z", "toggle nonzero/all")
,renderKey ("DEL/BS", "remove filters")
,str " " ,str " "
,str "accounts screen:" ,str "accounts screen:"
,renderKey ("-+0123456789", "set depth limit") ,renderKey ("-+0123456789", "set depth limit")
,renderKey ("H", "toggle period balance (shows change) or\nhistorical balance (includes older postings)")
,renderKey ("F", "toggle tree (amounts include subaccounts) or\nflat mode (amounts exclude subaccounts\nexcept when account is depth-clipped)")
,str " " ,str " "
,renderKey ("DEL/BS", "remove filters") ,str "register screen:"
,renderKey ("H", "toggle period or historical total")
,renderKey ("F", "toggle subaccount transaction inclusion\n(and tree/flat mode)")
] ]
] ]
,vBox [ -- ,vBox [
str " " -- str " "
,hCenter $ padLeftRight 1 $ -- ,hCenter $ padLeftRight 1 $
hCenter (str "MANUAL") -- hCenter (str "MANUAL")
<=> -- <=>
hCenter (hBox [ -- hCenter (hBox [
renderKey ("t", "text") -- renderKey ("t", "text")
,str " " -- ,str " "
,renderKey ("m", "man page") -- ,renderKey ("m", "man page")
,str " " -- ,str " "
,renderKey ("i", "info") -- ,renderKey ("i", "info")
]) -- ])
] -- ]
] ]
where where
renderKey (key,desc) = withAttr (borderAttr <> "keys") (str key) <+> str " " <+> str desc renderKey (key,desc) = withAttr (borderAttr <> "keys") (str key) <+> str " " <+> str desc
@ -104,10 +114,12 @@ helpHandle :: UIState -> Event -> EventM Name (Next UIState)
helpHandle ui ev = helpHandle ui ev =
case ev of case ev of
EvKey k [] | k `elem` [KEsc, KLeft, KChar 'h', KChar '?'] -> continue $ setMode Normal ui EvKey k [] | k `elem` [KEsc, KLeft, KChar 'h', KChar '?'] -> continue $ setMode Normal ui
EvKey (KChar 't') [] -> suspendAndResume $ runHelp >> return (setMode Normal ui) EvKey (KChar 't') [] -> suspendAndResume $ runHelp >> return ui'
EvKey (KChar 'm') [] -> suspendAndResume $ runMan >> return (setMode Normal ui) EvKey (KChar 'm') [] -> suspendAndResume $ runMan >> return ui'
EvKey (KChar 'i') [] -> suspendAndResume $ runInfo >> return (setMode Normal ui) EvKey (KChar 'i') [] -> suspendAndResume $ runInfo >> return ui'
_ -> continue ui _ -> continue ui
where
ui' = setMode Normal ui
-- | Draw the minibuffer. -- | Draw the minibuffer.
minibuffer :: Editor Name -> Widget Name minibuffer :: Editor Name -> Widget Name
@ -133,15 +145,18 @@ borderDepthStr :: Maybe Int -> Widget Name
borderDepthStr Nothing = str "" borderDepthStr Nothing = str ""
borderDepthStr (Just d) = str " to " <+> withAttr (borderAttr <> "query") (str $ "depth "++show d) borderDepthStr (Just d) = str " to " <+> withAttr (borderAttr <> "query") (str $ "depth "++show d)
borderPeriodStr :: Period -> Widget Name borderPeriodStr :: String -> Period -> Widget Name
borderPeriodStr PeriodAll = str "" borderPeriodStr _ PeriodAll = str ""
borderPeriodStr p = str " in " <+> withAttr (borderAttr <> "query") (str $ showPeriod p) borderPeriodStr preposition p = str (" "++preposition++" ") <+> withAttr (borderAttr <> "query") (str $ showPeriod p)
borderKeysStr :: [(String,String)] -> Widget Name borderKeysStr :: [(String,String)] -> Widget Name
borderKeysStr keydescs = borderKeysStr = borderKeysStr' . map (\(a,b) -> (a, str b))
borderKeysStr' :: [(String,Widget Name)] -> Widget Name
borderKeysStr' keydescs =
hBox $ hBox $
intersperse sep $ intersperse sep $
[withAttr (borderAttr <> "keys") (str keys) <+> str ":" <+> str desc | (keys, desc) <- keydescs] [withAttr (borderAttr <> "keys") (str keys) <+> str ":" <+> desc | (keys, desc) <- keydescs]
where where
-- sep = str " | " -- sep = str " | "
sep = str " " sep = str " "

View File

@ -137,9 +137,17 @@ To see less detail, set a depth limit by pressing a number key, `1` to `9`.
`-` and `+` (or `=`) decrease and increase the depth limit. `-` and `+` (or `=`) decrease and increase the depth limit.
To remove the depth limit, set it higher than the maximum account depth, or press `ESCAPE`. To remove the depth limit, set it higher than the maximum account depth, or press `ESCAPE`.
`F` toggles flat mode on and off. In flat mode, accounts are listed without indentation, `F` toggles flat mode, in which accounts are shown as a flat list, with their full names.
and show their subaccount-excluding balances, except for accounts which have been clipped In this mode, account balances exclude subaccounts, except for accounts at the depth limit
by a depth limit, which show their inclusive balances (as with hledger's balance command). (as with hledger's balance command).
`H` toggles between showing historical balances or period balances.
Historical balances (the default) are ending balances at the end of the report period,
taking into account all transactions before that date (filtered by the filter query if any),
including transactions before the start of the report period. In other words, historical
balances are what you would see on a bank statement for that account (unless disturbed by
a filter query). Period balances ignore transactions before the report start date, so they
show the change in balance during the report period. They are more useful eg when viewing a time log.
`C` toggles cleared mode, in which `C` toggles cleared mode, in which
[uncleared transactions and postings](/journal.html#transactions) are [uncleared transactions and postings](/journal.html#transactions) are
@ -166,32 +174,20 @@ Each line represents one transaction and shows:
- the overall change to the current account's balance; - the overall change to the current account's balance;
positive for an inflow to this account, negative for an outflow. positive for an inflow to this account, negative for an outflow.
- the current account's historic balance (if no query other than a date limit is in effect) - the running historical total or period total for the current account, after the transaction.
or the running total starting from zero (otherwise), after the transaction. This can be toggled with `H`.
Eg, these will show historic balances: Similar to the accounts screen, the historical total is affected by transactions
(filtered by the filter query) before the report start date, while the period total is not.
If the historical total is not disturbed by a filter query, it will be the
running historical balance you would see on a bank register for the current account.
``` If the accounts screen was in tree mode,
$ hledger-ui the register screen will include transactions from both the current account and its subaccounts.
$ hledger-ui --begin 'this month' If the accounts screen was in flat mode, and a non-depth-clipped account was selected,
$ hledger-ui --register checking date:2015/10 the register screen will exclude transactions from subaccounts.
``` In other words, the register always shows the transactions responsible for the period balance
shown on the accounts screen.
while these will show a running total, since the queries are not just date limits: As on the accounts screen, this can be toggled with `F`.
```
$ hledger-ui checking
$ hledger-ui --begin 'this month' desc:market
$ hledger-ui --register checking --cleared
```
The register screen normally shows transactions in the current account
and any of its subaccounts (inclusive mode).
If it was entered from the accounts screen in flat mode, where the
selected account was not depth-clipped and therefore was showing its
subaccount-excluding balance, the register too will omit the transactions
of subaccounts (exclusive mode). This means the register always shows
the transactions responsible for the balance being displayed on the
accounts screen.
`C` toggles cleared mode, in which `C` toggles cleared mode, in which
[uncleared transactions and postings](/journal.html#transactions) are [uncleared transactions and postings](/journal.html#transactions) are