diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,56 @@
-User-visible changes in hledger-ui. See also hledger, hledger-lib.
+User-visible changes in hledger-ui.
+See also the hledger changelog.
+
+
+# 1.12 (2018/12/02)
+
+* fix "Any" build error with GHC < 8.4
+
+* error screen: always show error position properly (#904) (Mykola Orliuk)
+
+* accounts screen: show correct balances when there's only periodic transactions
+
+* drop the --status-toggles flag
+
+* periodic transactions and transaction modifiers are always enabled.
+  Rule-based transactions and postings are always generated
+  (--forecast and --auto are always on).
+  Experimental.
+
+* escape key resets to flat mode.
+  Flat mode is the default at startup. Probably it should reset to tree
+  mode if --tree was used at startup.
+
+* tree mode tweaks: add --tree/-T/-F flags, make flat mode the default,  
+  toggle tree mode with T, ensure a visible effect on register screen
+
+* hide future txns by default, add --future flag, toggle with F.
+  You may have transactions dated later than today, perhaps piped from
+  print --forecast or recorded in the journal, which you don't want to
+  see except when forecasting.
+
+  By default, we now hide future transactions, showing "today's balance".
+  This can be toggled with the F key, which is easier than setting a
+  date query. --present and --future flags have been added to set the
+  initial mode.
+
+  (Experimental. Interactions with date queries have not been explored.)
+
+* quick help tweaks; try to show most useful info first
+
+* reorganise help dialog, fit content into 80x25 again
+
+* styling tweaks; cyan/blue -> white/yellow
+
+* less noisy styling in horizontal borders (#838)
+
+* register screen: positive amounts: green -> black
+  The green/red scheme helped distinguish the changes column from the
+  black/red balance column, but the default green is hard to read on
+  the pale background in some terminals. Also the changes column is
+  non-bold now.
+
+* use hledger 1.12
 
 
 # 1.11.1 (2018/10/06)
diff --git a/Hledger/UI/AccountsScreen.hs b/Hledger/UI/AccountsScreen.hs
--- a/Hledger/UI/AccountsScreen.hs
+++ b/Hledger/UI/AccountsScreen.hs
@@ -14,16 +14,15 @@
 import Brick
 import Brick.Widgets.List
 import Brick.Widgets.Edit
-import Brick.Widgets.Border (borderAttr)
 import Control.Monad
 import Control.Monad.IO.Class (liftIO)
 import Data.List
 import Data.Maybe
 #if !(MIN_VERSION_base(4,11,0))
-import Data.Monoid
+import Data.Monoid ((<>))
 #endif
 import qualified Data.Text as T
-import Data.Time.Calendar (Day)
+import Data.Time.Calendar (Day, addDays)
 import qualified Data.Vector as V
 import Graphics.Vty (Event(..),Key(..),Modifier(..))
 import Lens.Micro.Platform
@@ -80,13 +79,19 @@
                         as = map asItemAccountName displayitems
 
     uopts' = uopts{cliopts_=copts{reportopts_=ropts'}}
-    ropts' = ropts{accountlistmode_=if flat_ ropts then ALFlat else ALTree}
+    ropts' = ropts{accountlistmode_=if tree_ ropts then ALTree else ALFlat}
 
-    q = queryFromOpts d ropts
+    -- Add a date:-tomorrow to the query to exclude future txns, by default.
+    -- XXX this necessitates special handling in multiBalanceReport, at least
+    pfq | presentorfuture_ uopts == PFFuture = Any
+        | otherwise                          = Date $ DateSpan Nothing (Just $ addDays 1 d)
+    q = And [queryFromOpts d ropts, pfq]
+        
 
     -- run the report
     (items,_total) = report ropts' q j
       where
+                 -- XXX in historical mode, --forecast throws off the starting balances
         report | balancetype_ ropts == HistoricalBalance = balanceReportFromMultiBalanceReport
                | otherwise                               = balanceReport
                     -- still using the old balanceReport for change reports as it
@@ -97,7 +102,7 @@
     displayitem (fullacct, shortacct, indent, bal) =
       AccountsScreenItem{asItemIndentLevel        = indent
                         ,asItemAccountName        = fullacct
-                        ,asItemDisplayAccountName = replaceHiddenAccountsNameWith "All" $ if flat_ ropts' then fullacct else shortacct
+                        ,asItemDisplayAccountName = replaceHiddenAccountsNameWith "All" $ if tree_ ropts' then shortacct else fullacct 
                         ,asItemRenderedAmounts    = map showAmountWithoutPrice amts -- like showMixedAmountOneLineWithoutPrice
                         }
       where
@@ -116,7 +121,7 @@
 asInit _ _ _ = error "init function called with wrong screen type, should not happen"
 
 asDraw :: UIState -> [Widget Name]
-asDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
+asDraw UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
                            ,ajournal=j
                            ,aScreen=s@AccountsScreen{}
                            ,aMode=mode
@@ -167,8 +172,8 @@
         ishistorical = balancetype_ ropts == HistoricalBalance
 
         toplabel =
-              files
-          -- <+> withAttr (borderAttr <> "query") (str (if flat_ ropts then " flat" else ""))
+              withAttr ("border" <> "filename") files
+          -- <+> withAttr ("border" <> "query") (str (if flat_ ropts then " flat" else ""))
           <+> nonzero
           <+> str (if ishistorical then " accounts" else " account changes")
           -- <+> str (if ishistorical then " balances" else " changes")
@@ -182,12 +187,12 @@
           <+> total
           <+> str ")"
           <+> (if ignore_assertions_ $ inputopts_ copts
-               then withAttr (borderAttr <> "query") (str " ignoring balance assertions")
+               then withAttr ("border" <> "query") (str " ignoring balance assertions")
                else str "")
           where
             files = case journalFilePaths j of
                            [] -> str ""
-                           f:_ -> withAttr ("border" <> "bold") $ str $ takeFileName f
+                           f:_ -> str $ takeFileName f
                            -- [f,_:[]] -> (withAttr ("border" <> "bold") $ str $ takeFileName f) <+> str " (& 1 included file)"
                            -- f:fs  -> (withAttr ("border" <> "bold") $ str $ takeFileName f) <+> str (" (& " ++ show (length fs) ++ " included files)")
             querystr = query_ ropts
@@ -198,9 +203,9 @@
                   ,if real_ ropts then ["real"] else []
                   ] of
                 [] -> str ""
-                fs -> str " from " <+> withAttr (borderAttr <> "query") (str $ intercalate ", " fs) <+> str " txns"
+                fs -> str " from " <+> withAttr ("border" <> "query") (str $ intercalate ", " fs) <+> str " txns"
             nonzero | empty_ ropts = str ""
-                    | otherwise    = withAttr (borderAttr <> "query") (str " nonzero")
+                    | otherwise    = withAttr ("border" <> "query") (str " nonzero")
             cur = str (case _asList s ^. listSelectedL of
                         Nothing -> "-"
                         Just i -> show (i + 1))
@@ -211,19 +216,13 @@
                         Minibuffer ed -> minibuffer ed
                         _             -> quickhelp
           where
-            selectedstr = withAttr (borderAttr <> "query") . str
             quickhelp = borderKeysStr' [
                ("?", str "help")
-              ,("right", str "register")
-              ,("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")
+--              ,("RIGHT", str "register")
               ,("-+", str "depth")
+              ,("T", renderToggle (tree_ ropts) "flat" "tree")
+              ,("H", renderToggle (not ishistorical) "end-bals" "changes")
+              ,("F", renderToggle (presentorfuture_ uopts == PFFuture) "present" "future") 
               --,("/", "filter")
               --,("DEL", "unfilter")
               --,("ESC", "cancel/top")
@@ -332,12 +331,13 @@
 
         -- display mode/query toggles
         VtyEvent (EvKey (KChar 'H') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleHistorical ui
-        VtyEvent (EvKey (KChar 'F') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleFlat ui
+        VtyEvent (EvKey (KChar 'T') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleTree ui
         VtyEvent (EvKey (KChar 'Z') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleEmpty ui
         VtyEvent (EvKey (KChar 'R') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleReal ui
         VtyEvent (EvKey (KChar 'U') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleUnmarked ui
         VtyEvent (EvKey (KChar 'P') []) -> asCenterAndContinue $ regenerateScreens j d $ togglePending ui
         VtyEvent (EvKey (KChar 'C') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleCleared ui
+        VtyEvent (EvKey (KChar 'F') []) -> asCenterAndContinue $ regenerateScreens j d $ toggleFuture ui
 
         VtyEvent (EvKey (KDown)     [MShift]) -> continue $ regenerateScreens j d $ shrinkReportPeriod d ui
         VtyEvent (EvKey (KUp)       [MShift]) -> continue $ regenerateScreens j d $ growReportPeriod d ui
diff --git a/Hledger/UI/ErrorScreen.hs b/Hledger/UI/ErrorScreen.hs
--- a/Hledger/UI/ErrorScreen.hs
+++ b/Hledger/UI/ErrorScreen.hs
@@ -12,7 +12,7 @@
 where
 
 import Brick
--- import Brick.Widgets.Border (borderAttr)
+-- import Brick.Widgets.Border ("border")
 import Control.Monad
 import Control.Monad.IO.Class (liftIO)
 #if !(MIN_VERSION_base(4,11,0))
@@ -57,7 +57,7 @@
       where
         toplabel =
               withAttr ("border" <> "bold") (str "Oops. Please fix this problem then press g to reload")
-              -- <+> (if ignore_assertions_ copts then withAttr (borderAttr <> "query") (str " ignoring") else str " not ignoring")
+              -- <+> (if ignore_assertions_ copts then withAttr ("border" <> "query") (str " ignoring") else str " not ignoring")
 
         bottomlabel = case mode of
                         -- Minibuffer ed -> minibuffer ed
@@ -110,15 +110,27 @@
 
 -- | Parse the file name, line and column number from a hledger parse error message, if possible.
 -- Temporary, we should keep the original parse error location. XXX
+-- Keep in sync with 'Hledger.Data.Transaction.showGenericSourcePos'
 hledgerparseerrorpositionp :: ParsecT Void String t (String, Int, Int)
 hledgerparseerrorpositionp = do
-  anyChar `manyTill` char '"'
-  f <- anyChar `manyTill` (oneOf ['"','\n'])
-  string " (line "
-  l <- read <$> some digitChar
-  string ", column "
-  c <- read <$> some digitChar
-  return (f, l, c)
+  anySingle `manyTill` char '"'
+  f <- anySingle `manyTill` (oneOf ['"','\n'])
+  choice [
+      do
+          string " (line "
+          l <- read <$> some digitChar
+          string ", column "
+          c <- read <$> some digitChar
+          return (f, l, c),
+      do
+          string " (lines "
+          l <- read <$> some digitChar
+          char '-'
+          some digitChar
+          char ')'
+          return (f, l, 1)
+      ]
+
 
 -- Unconditionally reload the journal, regenerating the current screen
 -- and all previous screens in the history.
diff --git a/Hledger/UI/Main.hs b/Hledger/UI/Main.hs
--- a/Hledger/UI/Main.hs
+++ b/Hledger/UI/Main.hs
@@ -71,19 +71,21 @@
         | otherwise                                                = withJournalDoUICommand opts runBrickUi
 
 -- TODO fix nasty duplication of withJournalDo
+-- | hledger-ui's version of withJournalDo. Enables --auto and --forecast.
 withJournalDoUICommand :: UIOpts -> (UIOpts -> Journal -> IO ()) -> IO ()
-withJournalDoUICommand uopts@UIOpts{cliopts_=copts} cmd = do
-  journalpath <- journalFilePathFromOpts copts
-  ej <- readJournalFiles (inputopts_ copts) journalpath
+withJournalDoUICommand uopts@UIOpts{cliopts_=copts@CliOpts{inputopts_=iopts,reportopts_=ropts}} cmd = do
+  let copts' = copts{inputopts_=iopts{auto_=True}, reportopts_=ropts{forecast_=True}}
+  journalpath <- journalFilePathFromOpts copts'
+  ej <- readJournalFiles (inputopts_ copts') journalpath
   let fn = cmd uopts
-         . pivotByOpts copts
-         . anonymiseByOpts copts
-       <=< journalApplyValue (reportopts_ copts)
-       <=< journalAddForecast copts
+         . pivotByOpts copts'
+         . anonymiseByOpts copts'
+       <=< journalApplyValue (reportopts_ copts')
+       <=< journalAddForecast copts'
   either error' fn ej
 
 runBrickUi :: UIOpts -> Journal -> IO ()
-runBrickUi uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}} j = do
+runBrickUi uopts@UIOpts{cliopts_=copts@CliOpts{inputopts_=_iopts,reportopts_=ropts}} j = do
   d <- getCurrentDay
 
   let
@@ -168,6 +170,8 @@
       , appDraw         = \ui    -> sDraw   (aScreen ui) ui
       }
 
+  -- print (length (show ui)) >> exitSuccess  -- show any debug output to this point & quit
+  
   if not (watch_ uopts')
   then
     void $ defaultMain brickapp ui
diff --git a/Hledger/UI/RegisterScreen.hs b/Hledger/UI/RegisterScreen.hs
--- a/Hledger/UI/RegisterScreen.hs
+++ b/Hledger/UI/RegisterScreen.hs
@@ -16,7 +16,7 @@
 import Data.List
 import Data.List.Split (splitOn)
 #if !(MIN_VERSION_base(4,11,0))
-import Data.Monoid
+import Data.Monoid ((<>))
 #endif
 import Data.Maybe
 import qualified Data.Text as T
@@ -26,7 +26,6 @@
 import Brick
 import Brick.Widgets.List
 import Brick.Widgets.Edit
-import Brick.Widgets.Border (borderAttr)
 import Lens.Micro.Platform
 import Safe
 import System.Console.ANSI
@@ -59,17 +58,19 @@
 rsSetAccount _ _ scr = scr
 
 rsInit :: Day -> Bool -> UIState -> UIState
-rsInit d reset ui@UIState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ropts}}, ajournal=j, aScreen=s@RegisterScreen{..}} =
+rsInit d reset ui@UIState{aopts=uopts@UIOpts{cliopts_=CliOpts{reportopts_=ropts}}, ajournal=j, aScreen=s@RegisterScreen{..}} =
   ui{aScreen=s{rsList=newitems'}}
   where
     -- gather arguments and queries
     -- XXX temp
-    inclusive = not (flat_ ropts) || rsForceInclusive
+    inclusive = tree_ ropts || rsForceInclusive
     thisacctq = Acct $ (if inclusive then accountNameToAccountRegex else accountNameToAccountOnlyRegex) rsAccount
     ropts' = ropts{
                depth_=Nothing
               }
-    q = queryFromOpts d ropts'
+    pfq | presentorfuture_ uopts == PFFuture = Any
+        | otherwise                          = Date $ DateSpan Nothing (Just $ addDays 1 d)
+    q = And [queryFromOpts d ropts', pfq]
 --    reportq = filterQuery (not . queryIsDepth) q
 
     (_label,items) = accountTransactionsReport ropts' j q thisacctq
@@ -131,7 +132,7 @@
 rsInit _ _ _ = error "init function called with wrong screen type, should not happen"
 
 rsDraw :: UIState -> [Widget Name]
-rsDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
+rsDraw UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}
                             ,aScreen=RegisterScreen{..}
                             ,aMode=mode
                             } =
@@ -186,11 +187,11 @@
 
       where
         ishistorical = balancetype_ ropts == HistoricalBalance
-        inclusive = not (flat_ ropts) || rsForceInclusive
+        -- inclusive = tree_ ropts || rsForceInclusive
 
         toplabel =
               withAttr ("border" <> "bold") (str $ T.unpack $ replaceHiddenAccountsNameWith "All" rsAccount)
---           <+> withAttr (borderAttr <> "query") (str $ if inclusive then "" else " exclusive")
+--           <+> withAttr ("border" <> "query") (str $ if inclusive then "" else " exclusive")
           <+> togglefilters
           <+> str " transactions"
           -- <+> str (if ishistorical then " historical total" else " period total")
@@ -202,7 +203,7 @@
           <+> str "/"
           <+> total
           <+> str ")"
-          <+> (if ignore_assertions_ $ inputopts_ copts then withAttr (borderAttr <> "query") (str " ignoring balance assertions") else str "")
+          <+> (if ignore_assertions_ $ inputopts_ copts then withAttr ("border" <> "query") (str " ignoring balance assertions") else str "")
           where
             togglefilters =
               case concat [
@@ -211,7 +212,7 @@
                   ,if empty_ ropts then [] else ["nonzero"]
                   ] of
                 [] -> str ""
-                fs -> withAttr (borderAttr <> "query") (str $ " " ++ intercalate ", " fs)
+                fs -> withAttr ("border" <> "query") (str $ " " ++ intercalate ", " fs)
             cur = str $ case rsList ^. listSelectedL of
                          Nothing -> "-"
                          Just i -> show (i + 1)
@@ -224,19 +225,13 @@
                         Minibuffer ed -> minibuffer ed
                         _             -> quickhelp
           where
-            selectedstr = withAttr (borderAttr <> "query") . str
             quickhelp = borderKeysStr' [
                ("?", str "help")
-              ,("left", str "back")
-              ,("right", str "transaction")
-              ,("H"
-               ,if ishistorical
-                then selectedstr "historical" <+> str "/period"
-                else str "historical/" <+> selectedstr "period")
-              ,("F"
-               ,if inclusive
-                then selectedstr "inclusive" <+> str "/exclusive"
-                else str "inclusive/" <+> selectedstr "exclusive")
+              ,("LEFT", str "back")
+--              ,("RIGHT", str "transaction")
+              ,("T", renderToggle (tree_ ropts) "flat(-subs)" "tree(+subs)") -- rsForceInclusive may override, but use tree_ to ensure a visible toggle effect
+              ,("H", renderToggle (not ishistorical) "historical" "period")
+              ,("F", renderToggle (presentorfuture_ uopts == PFFuture) "present" "future") 
 --               ,("a", "add")
 --               ,("g", "reload")
 --               ,("q", "quit")
@@ -323,12 +318,13 @@
 
         -- display mode/query toggles
         VtyEvent (EvKey (KChar 'H') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleHistorical ui
-        VtyEvent (EvKey (KChar 'F') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleFlat ui
+        VtyEvent (EvKey (KChar 'T') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleTree ui
         VtyEvent (EvKey (KChar 'Z') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleEmpty ui
         VtyEvent (EvKey (KChar 'R') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleReal ui
         VtyEvent (EvKey (KChar 'U') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleUnmarked ui
         VtyEvent (EvKey (KChar 'P') []) -> rsCenterAndContinue $ regenerateScreens j d $ togglePending ui
         VtyEvent (EvKey (KChar 'C') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleCleared ui
+        VtyEvent (EvKey (KChar 'F') []) -> rsCenterAndContinue $ regenerateScreens j d $ toggleFuture ui
 
         VtyEvent (EvKey (KChar '/') []) -> continue $ regenerateScreens j d $ showMinibuffer ui
         VtyEvent (EvKey (KDown)     [MShift]) -> continue $ regenerateScreens j d $ shrinkReportPeriod d ui
diff --git a/Hledger/UI/Theme.hs b/Hledger/UI/Theme.hs
--- a/Hledger/UI/Theme.hs
+++ b/Hledger/UI/Theme.hs
@@ -7,16 +7,16 @@
 -- http://hackage.haskell.org/package/brick-0.1/docs/Brick-Widgets-Core.html#g:5
 -- http://hackage.haskell.org/package/brick-0.1/docs/Brick-Widgets-Border.html
 
-
-{-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE OverloadedStrings #-}
 
 module Hledger.UI.Theme (
    defaultTheme
   ,getTheme
   ,themes
   ,themeNames
- ) where
+)
+where
 
 import qualified Data.Map as M
 import Data.Maybe
@@ -25,8 +25,6 @@
 #endif
 import Graphics.Vty
 import Brick
-import Brick.Widgets.Border
-import Brick.Widgets.List
 
 defaultTheme :: AttrMap
 defaultTheme = fromMaybe (snd $ head themesList) $ getTheme "white"
@@ -64,53 +62,50 @@
 themeNames = map fst themesList
 
 (&) = withStyle
+active = fg brightWhite & bold
+selectbg = yellow
+select = black `on` selectbg
 
 themesList :: [(String, AttrMap)]
 themesList = [
-  ("default", attrMap
-            (black `on` white & bold) [ -- default style for this theme
-              ("error", currentAttr `withForeColor` red),
-              (borderAttr       , white `on` black & dim),
-              (borderAttr <> "bold", white `on` black & bold),
-              (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
-              -- ("list" <> "selected"     , black `on` brightYellow),
-              -- ("list" <> "accounts"  , white `on` brightGreen),
-              ("list" <> "amount" <> "increase", currentAttr `withForeColor` green),
-              ("list" <> "amount" <> "decrease", currentAttr `withForeColor` red),
-              ("list" <> "balance" <> "positive",  currentAttr `withForeColor` black),
-              ("list" <> "balance" <> "negative", currentAttr `withForeColor` red),
-              ("list" <> "amount" <> "increase" <> "selected", brightGreen `on` blue & bold),
-              ("list" <> "amount" <> "decrease" <> "selected", brightRed `on` blue & bold),
-              ("list" <> "balance" <> "positive" <> "selected",  white `on` blue & bold),
-              ("list" <> "balance" <> "negative" <> "selected", brightRed `on` blue & bold)
-              ]),
+   ("default", attrMap (black `on` white) [
+     ("border"                                        , white `on` black & dim)
+    ,("border" <> "bold"                              , currentAttr & bold)
+    ,("border" <> "depth"                             , active)
+    ,("border" <> "filename"                          , currentAttr)
+    ,("border" <> "key"                               , active)  
+    ,("border" <> "minibuffer"                        , white `on` black & bold)
+    ,("border" <> "query"                             , active)
+    ,("border" <> "selected"                          , active)
+    ,("error"                                         , fg red)
+    ,("help"                                          , white `on` black & dim)
+    ,("help" <> "heading"                             , fg yellow)
+    ,("help" <> "key"                                 , active)
+    -- ,("list"                                          , black `on` white)
+    -- ,("list" <> "amount"                              , currentAttr)
+    ,("list" <> "amount" <> "decrease"                , fg red)
+    -- ,("list" <> "amount" <> "increase"                , fg green)
+    ,("list" <> "amount" <> "decrease" <> "selected"  , red `on` selectbg & bold)
+    -- ,("list" <> "amount" <> "increase" <> "selected"  , green `on` selectbg & bold)
+    ,("list" <> "balance"                             , currentAttr & bold)
+    ,("list" <> "balance" <> "negative"               , fg red)
+    ,("list" <> "balance" <> "positive"               , fg black)
+    ,("list" <> "balance" <> "negative" <> "selected" , red `on` selectbg & bold)
+    ,("list" <> "balance" <> "positive" <> "selected" , select & bold)
+    ,("list" <> "selected"                            , select)
+    -- ,("list" <> "accounts"                         , white `on` brightGreen)
+    -- ,("list" <> "selected"                         , black `on` brightYellow)
+  ])
 
-  ("terminal", attrMap
-            defAttr [  -- use the current terminal's default style
-              (borderAttr       , white `on` black),
-              -- ("normal"         , defAttr),
-              (listAttr         , defAttr),
-              (listSelectedAttr , defAttr & reverseVideo & bold)
-              -- ("status"         , defAttr & reverseVideo)
-              ]),
+  ,("greenterm", attrMap (green `on` black) [
+    ("list" <> "selected"                             , black `on` green)
+  ])
 
-  ("greenterm", attrMap
-            (green `on` black) [
-              -- (listAttr                  , green `on` black),
-              (listSelectedAttr          , black `on` green & bold)
-              ])
-  -- ("colorful", attrMap
-  --           defAttr [
-  --             (listAttr         , defAttr & reverseVideo),
-  --             (listSelectedAttr , defAttr `withForeColor` white `withBackColor` red)
-  --             -- ("status"         , defAttr `withForeColor` black `withBackColor` green)
-  --             ])
+  ,("terminal", attrMap defAttr [
+    ("border"                                         , white `on` black),
+    ("list"                                           , defAttr),
+    ("list" <> "selected"                             , defAttr & reverseVideo)
+  ])
 
   ]
 
@@ -120,4 +115,3 @@
 -- greenattr = defAttr `withForeColor` green
 -- reverseredattr = defAttr & reverseVideo `withForeColor` red
 -- reversegreenattr= defAttr & reverseVideo `withForeColor` green
-
diff --git a/Hledger/UI/TransactionScreen.hs b/Hledger/UI/TransactionScreen.hs
--- a/Hledger/UI/TransactionScreen.hs
+++ b/Hledger/UI/TransactionScreen.hs
@@ -20,7 +20,6 @@
 import Graphics.Vty (Event(..),Key(..))
 import Brick
 import Brick.Widgets.List (listMoveTo)
-import Brick.Widgets.Border (borderAttr)
 
 import Hledger
 import Hledger.Cli hiding (progname,prognameandversion)
@@ -77,7 +76,7 @@
           <+> togglefilters
           <+> borderQueryStr (query_ ropts)
           <+> str (" in "++T.unpack (replaceHiddenAccountsNameWith "All" acct)++")")
-          <+> (if ignore_assertions_ $ inputopts_ copts then withAttr (borderAttr <> "query") (str " ignoring balance assertions") else str "")
+          <+> (if ignore_assertions_ $ inputopts_ copts then withAttr ("border" <> "query") (str " ignoring balance assertions") else str "")
           where
             togglefilters =
               case concat [
@@ -86,7 +85,7 @@
                   ,if empty_ ropts then [] else ["nonzero"]
                   ] of
                 [] -> str ""
-                fs -> withAttr (borderAttr <> "query") (str $ " " ++ intercalate ", " fs)
+                fs -> withAttr ("border" <> "query") (str $ " " ++ intercalate ", " fs)
 
         bottomlabel = case mode of
                         -- Minibuffer ed -> minibuffer ed
@@ -94,8 +93,8 @@
           where
             quickhelp = borderKeysStr [
                ("?", "help")
-              ,("left", "back")
-              ,("up/down", "prev/next")
+              ,("LEFT", "back")
+              ,("UP/DOWN", "prev/next")
               --,("ESC", "cancel/top")
               -- ,("a", "add")
               ,("E", "editor")
diff --git a/Hledger/UI/UIOptions.hs b/Hledger/UI/UIOptions.hs
--- a/Hledger/UI/UIOptions.hs
+++ b/Hledger/UI/UIOptions.hs
@@ -1,11 +1,14 @@
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE DeriveDataTypeable #-}
 {-|
 
 -}
 
 module Hledger.UI.UIOptions
 where
+import Data.Data (Data)
 import Data.Default
+import Data.Typeable (Typeable)
 import Data.List (intercalate)
 import System.Environment
 
@@ -33,19 +36,13 @@
   --   "show balance change accumulated across periods (in multicolumn reports)"
   -- ,flagNone ["historical","H"] (\opts -> setboolopt "historical" opts)
   --   "show historical ending balance in each period (includes postings before report start date)\n "
-  ,flagNone ["flat"] (\opts -> setboolopt "flat" opts) "show full account names, unindented"
+  ,flagNone ["flat","F"] (\opts -> setboolopt "flat" opts) "show accounts as a list (default)"
+  ,flagNone ["tree","T"] (\opts -> setboolopt "tree" opts) "show accounts as a tree"
+--  ,flagNone ["present"] (\opts -> setboolopt "present" opts) "exclude transactions dated later than today (default)"
+  ,flagNone ["future"] (\opts -> setboolopt "future" opts) "show transactions dated later than today (normally hidden)"
   -- ,flagReq ["drop"] (\s opts -> Right $ setopt "drop" s opts) "N" "with --flat, omit this many leading account name components"
   -- ,flagReq  ["format"] (\s opts -> Right $ setopt "format" s opts) "FORMATSTR" "use this custom line format"
   -- ,flagNone ["no-elide"] (\opts -> setboolopt "no-elide" opts) "don't compress empty parent accounts on one line"
-  ,flagReq  ["status-toggles"] (\s opts -> Right $ setopt "status-toggles" s opts) "N"
-    (intercalate "\n"
-      ["choose how status toggles work:"
-      ," 1 UPC toggles X/all"
-      ," 2 UPC cycles X/not-X/all"
-      ," 3 UPC toggles each X"
---      ," 4 upc sets X, UPC sets not-X"
---      ," 5 upc toggles X, UPC toggles not-X"
-      ])
  ]
 
 --uimode :: Mode [([Char], [Char])]
@@ -66,6 +63,7 @@
 data UIOpts = UIOpts {
      watch_   :: Bool
     ,change_  :: Bool
+    ,presentorfuture_  :: PresentOrFutureOpt
     ,cliopts_ :: CliOpts
  } deriving (Show)
 
@@ -73,6 +71,7 @@
     def
     def
     def
+    def
 
 -- instance Default CliOpts where def = defcliopts
 
@@ -82,8 +81,21 @@
   return defuiopts {
               watch_   = boolopt "watch" rawopts
              ,change_  = boolopt "change" rawopts
+             ,presentorfuture_ = presentorfutureopt rawopts
              ,cliopts_ = cliopts
              }
+
+-- | Should transactions dated later than today be included ? 
+-- Like flat/tree mode, there are three states, and the meaning of default can vary by command.
+data PresentOrFutureOpt = PFDefault | PFPresent | PFFuture deriving (Eq, Show, Data, Typeable)
+instance Default PresentOrFutureOpt where def = PFDefault
+
+presentorfutureopt :: RawOpts -> PresentOrFutureOpt
+presentorfutureopt rawopts =
+  case reverse $ filter (`elem` ["present","future"]) $ map fst rawopts of
+    ("present":_) -> PFPresent
+    ("future":_)  -> PFFuture
+    _             -> PFDefault
 
 checkUIOpts :: UIOpts -> UIOpts
 checkUIOpts opts =
diff --git a/Hledger/UI/UIState.hs b/Hledger/UI/UIState.hs
--- a/Hledger/UI/UIState.hs
+++ b/Hledger/UI/UIState.hs
@@ -108,13 +108,14 @@
   where
     toggleEmpty ropts = ropts{empty_=not $ empty_ ropts}
 
--- | Toggle between flat and tree mode. If in the third "default" mode, go to flat mode.
-toggleFlat :: UIState -> UIState
-toggleFlat ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
-  ui{aopts=uopts{cliopts_=copts{reportopts_=toggleFlatMode ropts}}}
+-- | Toggle between flat and tree mode. If current mode is unspecified/default, assume it's flat.
+toggleTree :: UIState -> UIState
+toggleTree ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
+  ui{aopts=uopts{cliopts_=copts{reportopts_=toggleTreeMode ropts}}}
   where
-    toggleFlatMode ropts@ReportOpts{accountlistmode_=ALFlat} = ropts{accountlistmode_=ALTree}
-    toggleFlatMode ropts = ropts{accountlistmode_=ALFlat}
+    toggleTreeMode ropts
+      | accountlistmode_ ropts == ALTree = ropts{accountlistmode_=ALFlat}
+      | otherwise                        = ropts{accountlistmode_=ALTree}
 
 -- | Toggle between historical balances and period balances.
 toggleHistorical :: UIState -> UIState
@@ -124,6 +125,14 @@
     b | balancetype_ ropts == HistoricalBalance = PeriodChange
       | otherwise                               = HistoricalBalance
 
+-- | Toggle between including and excluding transactions dated later than today.
+toggleFuture :: UIState -> UIState
+toggleFuture ui@UIState{aopts=uopts@UIOpts{presentorfuture_=pf}} =
+  ui{aopts=uopts{presentorfuture_=pf'}}
+  where
+    pf' | pf == PFFuture = PFPresent
+        | otherwise      = PFFuture
+
 -- | Toggle between showing all and showing only real (non-virtual) items.
 toggleReal :: UIState -> UIState
 toggleReal ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
@@ -183,7 +192,7 @@
 resetFilter :: UIState -> UIState
 resetFilter ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
   ui{aopts=uopts{cliopts_=copts{reportopts_=ropts{
-     accountlistmode_=ALTree
+     accountlistmode_=ALFlat
     ,empty_=True
     ,statuses_=[]
     ,real_=False
diff --git a/Hledger/UI/UIUtils.hs b/Hledger/UI/UIUtils.hs
--- a/Hledger/UI/UIUtils.hs
+++ b/Hledger/UI/UIUtils.hs
@@ -1,16 +1,32 @@
-{-# LANGUAGE CPP #-}
 {- | Rendering & misc. helpers. -}
 
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE CPP #-}
 
-module Hledger.UI.UIUtils
+module Hledger.UI.UIUtils (
+   borderDepthStr
+  ,borderKeysStr
+  ,borderKeysStr'
+  ,borderPeriodStr
+  ,borderQueryStr
+  ,defaultLayout
+  ,helpDialog
+  ,helpHandle
+  ,minibuffer
+  ,moveDownEvents
+  ,moveLeftEvents
+  ,moveRightEvents
+  ,moveUpEvents
+  ,normaliseMovementKeys
+  ,renderToggle
+  ,replaceHiddenAccountsNameWith
+  ,scrollSelectionToMiddle
+)
 where
 
 import Brick
 import Brick.Widgets.Border
 import Brick.Widgets.Border.Style
--- import Brick.Widgets.Center
 import Brick.Widgets.Dialog
 import Brick.Widgets.Edit
 import Brick.Widgets.List
@@ -25,7 +41,7 @@
 import System.Environment
 
 import Hledger hiding (Color)
-import Hledger.Cli (CliOpts(rawopts_))
+import Hledger.Cli (CliOpts)
 import Hledger.Cli.DocFiles
 import Hledger.UI.UITypes
 import Hledger.UI.UIState
@@ -33,77 +49,72 @@
 
 -- ui
 
+-- | Wrap a widget in the default hledger-ui screen layout.
+defaultLayout :: Widget Name -> Widget Name -> Widget Name -> Widget Name
+defaultLayout toplabel bottomlabel =
+  topBottomBorderWithLabels (str " "<+>toplabel<+>str " ") (str " "<+>bottomlabel<+>str " ") .
+  margin 1 0 Nothing
+  -- topBottomBorderWithLabel2 label .
+  -- padLeftRight 1 -- XXX should reduce inner widget's width by 2, but doesn't
+                    -- "the layout adjusts... if you use the core combinators"
+
 -- | Draw the help dialog, called when help mode is active.
 helpDialog :: CliOpts -> Widget Name
-helpDialog copts =
+helpDialog _copts =
   Widget Fixed Fixed $ do
     c <- getContext
     render $
+      withDefAttr "help" $
       renderDialog (dialog (Just "Help (?/LEFT/ESC to close)") Nothing (c^.availWidthL)) $ -- (Just (0,[("ok",())]))
-      padTopBottom 1 $ padLeftRight 1 $
+      padAll 1 $
         vBox [
            hBox [
-              padLeftRight 1 $
+              padRight (Pad 1) $
                 vBox [
-                   str "NAVIGATION"
-                  ,renderKey ("UP/DOWN/PGUP/PGDN/HOME/END", "")
-                  ,str "  move selection"
-                  ,renderKey ("RIGHT", "more detail")
-                  ,renderKey ("LEFT", "previous screen")
-                  ,str "  (or vi/emacs movement keys)"
-                  ,renderKey ("ESC", "cancel / reset to top")
+                   withAttr ("help" <> "heading") $ str "Navigation"
+                  ,renderKey ("UP/DOWN/PUP/PDN/HOME/END/emacs/vi keys", "")
+                  ,str "      move selection"
+                  ,renderKey ("RIGHT", "show account txns, txn detail")
+                  ,renderKey ("LEFT ", "go back")
+                  ,renderKey ("ESC  ", "cancel or reset")
                   ,str " "
-                  ,str "MISC"
-                  ,renderKey ("?", "toggle help")
-                  ,renderKey ("a", "add transaction (hledger add)")
-                  ,renderKey ("A", "add transaction (hledger-iadd)")
-                  ,renderKey ("E", "open editor")
-                  ,renderKey ("I", "toggle balance assertions")
-                  ,renderKey ("CTRL-l", "redraw & recenter")
-                  ,renderKey ("g", "reload data")
-                  ,renderKey ("q", "quit")
+                  ,withAttr ("help" <> "heading") $ str "Report period"
+                  ,renderKey ("S-DOWN /S-UP  ", "shrink/grow period")
+                  ,renderKey ("S-RIGHT/S-LEFT", "next/previous period")
+                  ,renderKey ("t             ", "set period to today")
                   ,str " "
-                  ,str "MANUAL"
-                  ,str "choose format:"
-                  ,renderKey ("p", "pager")
-                  ,renderKey ("m", "man")
-                  ,renderKey ("i", "info")
+                  ,withAttr ("help" <> "heading") $ str "Accounts screen"
+                  ,renderKey ("-+0123456789 ", "set depth limit")
+                  ,renderKey ("T ", "toggle tree/flat mode")
+                  ,renderKey ("H ", "historical end balance/period change")
+                  ,str " "
+                  ,withAttr ("help" <> "heading") $ str "Register screen"
+                  ,renderKey ("T ", "toggle subaccount txns\n(and accounts screen tree/flat mode)")
+                  ,renderKey ("H ", "show historical total/period total")
+                  ,str " "
                 ]
-             ,padLeftRight 1 $
+             ,padLeft (Pad 1) $ padRight (Pad 0) $
                 vBox [
-                   str "FILTERING"
-                  ,renderKey ("SHIFT-DOWN/UP", "shrink/grow report period")
-                  ,renderKey ("SHIFT-RIGHT/LEFT", "next/previous report period")
-                  ,renderKey ("t", "set report period to today")
-                  ,str " "
-                  ,renderKey ("/", "set a filter query")
-                  ,renderKey ("U", 
-                    ["toggle unmarked/all"
-                    ,"cycle unmarked/not unmarked/all"
-                    ,"toggle unmarked filter"
-                    ] !! (statusstyle-1))
-                  ,renderKey ("P",
-                    ["toggle pending/all"
-                    ,"cycle pending/not pending/all"
-                    ,"toggle pending filter"
-                    ] !! (statusstyle-1))
-                  ,renderKey ("C",
-                    ["toggle cleared/all"
-                    ,"cycle cleared/not cleared/all"
-                    ,"toggle cleared filter"
-                    ] !! (statusstyle-1))
-                  ,renderKey ("R", "toggle real/all")
-                  ,renderKey ("Z", "toggle nonzero/all")
-                  ,renderKey ("DEL/BS", "remove filters")
+                   withAttr ("help" <> "heading") $ str "Filtering"
+                  ,renderKey ("/   ", "set a filter query")
+                  ,renderKey ("UPC ", "show unmarked/pending/cleared") 
+                  ,renderKey ("F   ", "show future/present txns")
+                  ,renderKey ("R   ", "show real/all postings")
+                  ,renderKey ("Z   ", "show nonzero/all amounts")
+                  ,renderKey ("DEL ", "remove filters")
                   ,str " "
-                  ,str "accounts screen:"
-                  ,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)")
+                  ,withAttr ("help" <> "heading") $ str "Help"
+                  ,renderKey ("?   ", "toggle this help")
+                  ,renderKey ("pmi ", "(with this help open)\nshow manual in pager/man/info")
                   ,str " "
-                  ,str "register screen:"
-                  ,renderKey ("H", "toggle period or historical total")
-                  ,renderKey ("F", "toggle subaccount transaction inclusion\n(and tree/flat mode)")
+                  ,withAttr ("help" <> "heading") $ str "Other"
+                  ,renderKey ("a   ", "add transaction (hledger add)")
+                  ,renderKey ("A   ", "add transaction (hledger-iadd)")
+                  ,renderKey ("E   ", "open editor")
+                  ,renderKey ("I   ", "toggle balance assertions")
+                  ,renderKey ("C-l ", "redraw & recenter")
+                  ,renderKey ("g   ", "reload data")
+                  ,renderKey ("q   ", "quit")
                 ]
              ]
 --           ,vBox [
@@ -121,8 +132,7 @@
 --             ]
           ]
   where
-    renderKey (key,desc) = withAttr (borderAttr <> "keys") (str key) <+> str " " <+> str desc
-    statusstyle = min 3 $ fromMaybe 1 $ maybeintopt "status-toggles" $ rawopts_ copts 
+    renderKey (key,desc) = withAttr ("help" <> "key") (str key) <+> str " " <+> str desc
 
 -- | Event handler used when help mode is active.
 -- May invoke $PAGER, less, man or info, which is likely to fail on MS Windows, TODO.
@@ -141,7 +151,7 @@
 -- | Draw the minibuffer.
 minibuffer :: Editor String Name -> Widget Name
 minibuffer ed =
-  forceAttr (borderAttr <> "minibuffer") $
+  forceAttr ("border" <> "minibuffer") $
   hBox $
 #if MIN_VERSION_brick(0,19,0)
   [txt "filter: ", renderEditor (str . unlines) True ed]
@@ -149,26 +159,17 @@
   [txt "filter: ", renderEditor True ed]
 #endif
 
--- | Wrap a widget in the default hledger-ui screen layout.
-defaultLayout :: Widget Name -> Widget Name -> Widget Name -> Widget Name
-defaultLayout toplabel bottomlabel =
-  topBottomBorderWithLabels (str " "<+>toplabel<+>str " ") (str " "<+>bottomlabel<+>str " ") .
-  margin 1 0 Nothing
-  -- topBottomBorderWithLabel2 label .
-  -- padLeftRight 1 -- XXX should reduce inner widget's width by 2, but doesn't
-                    -- "the layout adjusts... if you use the core combinators"
-
 borderQueryStr :: String -> Widget Name
 borderQueryStr ""  = str ""
-borderQueryStr qry = str " matching " <+> withAttr (borderAttr <> "query") (str qry)
+borderQueryStr qry = str " matching " <+> withAttr ("border" <> "query") (str qry)
 
 borderDepthStr :: Maybe Int -> Widget Name
 borderDepthStr Nothing  = str ""
-borderDepthStr (Just d) = str " to " <+> withAttr (borderAttr <> "query") (str $ "depth "++show d)
+borderDepthStr (Just d) = str " to " <+> withAttr ("border" <> "query") (str $ "depth "++show d)
 
 borderPeriodStr :: String -> Period -> Widget Name
 borderPeriodStr _           PeriodAll = str ""
-borderPeriodStr preposition p         = str (" "++preposition++" ") <+> withAttr (borderAttr <> "query") (str $ showPeriod p)
+borderPeriodStr preposition p         = str (" "++preposition++" ") <+> withAttr ("border" <> "query") (str $ showPeriod p)
 
 borderKeysStr :: [(String,String)] -> Widget Name
 borderKeysStr = borderKeysStr' . map (\(a,b) -> (a, str b))
@@ -177,11 +178,19 @@
 borderKeysStr' keydescs =
   hBox $
   intersperse sep $
-  [withAttr (borderAttr <> "keys") (str keys) <+> str ":" <+> desc | (keys, desc) <- keydescs]
+  [withAttr ("border" <> "key") (str keys) <+> str ":" <+> desc | (keys, desc) <- keydescs]
   where
     -- sep = str " | "
     sep = str " "
 
+-- | Render the two states of a toggle, highlighting the active one. 
+renderToggle :: Bool -> String -> String -> Widget Name
+renderToggle isright l r =
+  let bold = withAttr ("border" <> "selected") in
+  if isright
+  then str (l++"/") <+> bold (str r) 
+  else bold (str l) <+> str ("/"++r)
+
 -- temporary shenanigans:
 
 -- | Convert the special account name "*" (from balance report with depth limit 0) to something clearer.
@@ -194,49 +203,49 @@
 
 -- generic
 
-topBottomBorderWithLabel :: Widget Name -> Widget Name -> Widget Name
-topBottomBorderWithLabel label = \wrapped ->
-  Widget Greedy Greedy $ do
-    c <- getContext
-    let (_w,h) = (c^.availWidthL, c^.availHeightL)
-        h' = h - 2
-        wrapped' = vLimit (h') wrapped
-        debugmsg =
-          ""
-          -- "  debug: "++show (_w,h')
-    render $
-      hBorderWithLabel (label <+> str debugmsg)
-      <=>
-      wrapped'
-      <=>
-      hBorder
+--topBottomBorderWithLabel :: Widget Name -> Widget Name -> Widget Name
+--topBottomBorderWithLabel label = \wrapped ->
+--  Widget Greedy Greedy $ do
+--    c <- getContext
+--    let (_w,h) = (c^.availWidthL, c^.availHeightL)
+--        h' = h - 2
+--        wrapped' = vLimit (h') wrapped
+--        debugmsg =
+--          ""
+--          -- "  debug: "++show (_w,h')
+--    render $
+--      hBorderWithLabel (label <+> str debugmsg)
+--      <=>
+--      wrapped'
+--      <=>
+--      hBorder
 
 topBottomBorderWithLabels :: Widget Name -> Widget Name -> Widget Name -> Widget Name
-topBottomBorderWithLabels toplabel bottomlabel = \wrapped ->
+topBottomBorderWithLabels toplabel bottomlabel body =
   Widget Greedy Greedy $ do
     c <- getContext
     let (_w,h) = (c^.availWidthL, c^.availHeightL)
         h' = h - 2
-        wrapped' = vLimit (h') wrapped
+        body' = vLimit (h') body
         debugmsg =
           ""
           -- "  debug: "++show (_w,h')
     render $
-      hBorderWithLabel (toplabel <+> str debugmsg)
+      hBorderWithLabel (withAttr "border" $ toplabel <+> str debugmsg)
       <=>
-      wrapped'
+      body'
       <=>
-      hBorderWithLabel bottomlabel
+      hBorderWithLabel (withAttr "border" bottomlabel)
 
--- XXX should be equivalent to the above, but isn't (page down goes offscreen)
-_topBottomBorderWithLabel2 :: Widget Name -> Widget Name -> Widget Name
-_topBottomBorderWithLabel2 label = \wrapped ->
- let debugmsg = ""
- in hBorderWithLabel (label <+> str debugmsg)
-    <=>
-    wrapped
-    <=>
-    hBorder
+---- XXX should be equivalent to the above, but isn't (page down goes offscreen)
+--_topBottomBorderWithLabel2 :: Widget Name -> Widget Name -> Widget Name
+--_topBottomBorderWithLabel2 label = \wrapped ->
+-- let debugmsg = ""
+-- in hBorderWithLabel (label <+> str debugmsg)
+--    <=>
+--    wrapped
+--    <=>
+--    hBorder
 
 -- XXX superseded by pad, in theory
 -- | Wrap a widget in a margin with the given horizontal and vertical
@@ -264,19 +273,19 @@
    -- applyN n border
 
 withBorderAttr :: Attr -> Widget Name -> Widget Name
-withBorderAttr attr = updateAttrMap (applyAttrMappings [(borderAttr, attr)])
+withBorderAttr attr = updateAttrMap (applyAttrMappings [("border", attr)])
 
--- | Like brick's continue, but first run some action to modify brick's state.
--- This action does not affect the app state, but might eg adjust a widget's scroll position.
-continueWith :: EventM n () -> ui -> EventM n (Next ui)
-continueWith brickaction ui = brickaction >> continue ui
+---- | Like brick's continue, but first run some action to modify brick's state.
+---- This action does not affect the app state, but might eg adjust a widget's scroll position.
+--continueWith :: EventM n () -> ui -> EventM n (Next ui)
+--continueWith brickaction ui = brickaction >> continue ui
 
--- | Scroll a list's viewport so that the selected item is centered in the
--- middle of the display area.
-scrollToTop :: List Name e -> EventM Name ()
-scrollToTop list = do
-  let vpname = list^.listNameL
-  setTop (viewportScroll vpname) 0 
+---- | Scroll a list's viewport so that the selected item is at the top
+---- of the display area.
+--scrollToTop :: List Name e -> EventM Name ()
+--scrollToTop list = do
+--  let vpname = list^.listNameL
+--  setTop (viewportScroll vpname) 0 
 
 -- | Scroll a list's viewport so that the selected item is centered in the
 -- middle of the display area.
diff --git a/hledger-ui.1 b/hledger-ui.1
--- a/hledger-ui.1
+++ b/hledger-ui.1
@@ -1,5 +1,5 @@
 
-.TH "hledger\-ui" "1" "September 2018" "hledger\-ui 1.11.1" "hledger User Manuals"
+.TH "hledger\-ui" "1" "December 2018" "hledger\-ui 1.12" "hledger User Manuals"
 
 
 
@@ -26,6 +26,13 @@
 It is easier than hledger's command\-line interface, and sometimes
 quicker and more convenient than the web interface.
 .PP
+Note hledger\-ui has some different defaults: \- it generates
+rule\-based transactions and postings by default (\[en]forecast and
+\[en]auto are always on).
+\- it hides transactions dated in the future by default (change this
+with \[en]future or the F key).
+Experimental.
+.PP
 Like hledger, it reads data from one or more files in hledger journal,
 timeclock, timedot, or CSV format specified with \f[C]\-f\f[], or
 \f[C]$LEDGER_FILE\f[], or \f[C]$HOME/.hledger.journal\f[] (on windows,
@@ -59,10 +66,20 @@
 .RS
 .RE
 .TP
-.B \f[C]\-\-flat\f[]
-show full account names, unindented
+.B \f[C]\-F\ \-\-flat\f[]
+show accounts as a list (default)
 .RS
 .RE
+.TP
+.B \f[C]\-T\ \-\-tree\f[]
+show accounts as a tree
+.RS
+.RE
+.TP
+.B \f[C]\-\-future\f[]
+show transactions dated later than today (normally hidden)
+.RS
+.RE
 .PP
 hledger input options:
 .TP
@@ -270,6 +287,14 @@
 \f[C]BACKSPACE\f[] or \f[C]DELETE\f[] removes all filters, showing all
 transactions.
 .PP
+As mentioned above, hledger\-ui shows auto\-generated periodic
+transactions, and hides future transactions (auto\-generated or not) by
+default.
+\f[C]F\f[] toggles showing and hiding these future transactions.
+This is similar to using a query like \f[C]date:\-tomorrow\f[], but more
+convenient.
+(experimental)
+.PP
 \f[C]ESCAPE\f[] removes all filters and jumps back to the top screen.
 Or, it cancels a minibuffer edit or help dialog in progress.
 .PP
@@ -314,21 +339,21 @@
 if you specify a query on the command line, it shows just the matched
 accounts and the balances from matched transactions.
 .PP
-Account names are normally indented to show the hierarchy (tree mode).
-To see less detail, set a depth limit by pressing a number key,
-\f[C]1\f[] to \f[C]9\f[].
+Account names are shown as a flat list by default.
+Press \f[C]T\f[] to toggle tree mode.
+In flat mode, account balances are exclusive of subaccounts, except
+where subaccounts are hidden by a depth limit (see below).
+In tree mode, all account balances are inclusive of subaccounts.
+.PP
+To see less detail, press a number key, \f[C]1\f[] to \f[C]9\f[], to set
+a depth limit.
+Or use \f[C]\-\f[] to decrease and \f[C]+\f[]/\f[C]=\f[] to increase the
+depth limit.
 \f[C]0\f[] shows even less detail, collapsing all accounts to a single
 total.
-\f[C]\-\f[] and \f[C]+\f[] (or \f[C]=\f[]) decrease and increase the
-depth limit.
 To remove the depth limit, set it higher than the maximum account depth,
 or press \f[C]ESCAPE\f[].
 .PP
-\f[C]F\f[] toggles flat mode, in which accounts are shown as a flat
-list, with their full names.
-In this mode, account balances exclude subaccounts, except for accounts
-at the depth limit (as with hledger's balance command).
-.PP
 \f[C]H\f[] toggles between showing historical balances or period
 balances.
 Historical balances (the default) are ending balances at the end of the
@@ -380,14 +405,16 @@
 the running historical balance you would see on a bank register for the
 current account.
 .PP
-If the accounts screen was in tree mode, the register screen will
-include transactions from both the current account and its subaccounts.
-If the accounts screen was in flat mode, and a non\-depth\-clipped
-account was selected, 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.
-As on the accounts screen, this can be toggled with \f[C]F\f[].
+Transactions affecting this account's subaccounts will be included in
+the register if the accounts screen is in tree mode, or if it's in flat
+mode but this account has subaccounts which are not shown due to a depth
+limit.
+In other words, the register always shows the transactions contributing
+to the balance shown on the accounts screen.
+.PD 0
+.P
+.PD
+Tree mode/flat mode can be toggled with \f[C]T\f[] here also.
 .PP
 \f[C]U\f[] toggles filtering by unmarked status, showing or hiding
 unmarked transactions.
diff --git a/hledger-ui.cabal b/hledger-ui.cabal
--- a/hledger-ui.cabal
+++ b/hledger-ui.cabal
@@ -1,11 +1,13 @@
--- This file has been generated from package.yaml by hpack version 0.28.2.
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.31.0.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: cf989a0be297a9338409ac4ccab5f308f53c6db6411dbfded3c21c41a02cce89
+-- hash: 1abfa4ed0acf79d9240fa75603c4070b640238aa22fa2895a8e3d6155c33a481
 
 name:           hledger-ui
-version:        1.11.1
+version:        1.12
 synopsis:       Curses-style user interface for the hledger accounting tool
 description:    This is hledger's curses-style interface.
                 It is simpler and more convenient for browsing data than the command-line interface,
@@ -27,13 +29,12 @@
 license-file:   LICENSE
 tested-with:    GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.3
 build-type:     Simple
-cabal-version:  >= 1.10
 extra-source-files:
     CHANGES
+    README
     hledger-ui.1
-    hledger-ui.info
     hledger-ui.txt
-    README
+    hledger-ui.info
 
 source-repository head
   type: git
@@ -63,11 +64,11 @@
   hs-source-dirs:
       ./.
   ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures -fno-warn-type-defaults -fno-warn-orphans
-  cpp-options: -DVERSION="1.11.1"
+  cpp-options: -DVERSION="1.12"
   build-depends:
       ansi-terminal >=0.6.2.3
     , async
-    , base >=4.8 && <4.12
+    , base >=4.8 && <4.13
     , base-compat-batteries >=0.10.1 && <0.11
     , cmdargs >=0.8
     , containers
@@ -75,9 +76,9 @@
     , directory
     , filepath
     , fsnotify >=0.2.1.2 && <0.4
-    , hledger >=1.11.1 && <1.12
-    , hledger-lib >=1.11.1 && <1.12
-    , megaparsec >=6.4.1 && <7
+    , hledger >=1.12 && <1.13
+    , hledger-lib >=1.12 && <1.13
+    , megaparsec >=7.0.0 && <8
     , microlens >=0.4
     , microlens-platform >=0.2.3.1
     , pretty-show >=1.6.4
diff --git a/hledger-ui.info b/hledger-ui.info
--- a/hledger-ui.info
+++ b/hledger-ui.info
@@ -3,8 +3,8 @@
 
 File: hledger-ui.info,  Node: Top,  Next: OPTIONS,  Up: (dir)
 
-hledger-ui(1) hledger-ui 1.11.1
-*******************************
+hledger-ui(1) hledger-ui 1.12
+*****************************
 
 hledger-ui is hledger's curses-style interface, providing an efficient
 full-window text UI for viewing accounts and transactions, and some
@@ -12,6 +12,11 @@
 interface, and sometimes quicker and more convenient than the web
 interface.
 
+   Note hledger-ui has some different defaults: - it generates
+rule-based transactions and postings by default (-forecast and -auto are
+always on).  - it hides transactions dated in the future by default
+(change this with -future or the F key).  Experimental.
+
    Like hledger, it reads data from one or more files in hledger
 journal, timeclock, timedot, or CSV format specified with '-f', or
 '$LEDGER_FILE', or '$HOME/.hledger.journal' (on windows, perhaps
@@ -48,10 +53,16 @@
 
      show period balances (changes) at startup instead of historical
      balances
-'--flat'
+'-F --flat'
 
-     show full account names, unindented
+     show accounts as a list (default)
+'-T --tree'
 
+     show accounts as a tree
+'--future'
+
+     show transactions dated later than today (normally hidden)
+
    hledger input options:
 
 '-f FILE --file=FILE'
@@ -201,6 +212,12 @@
 below).  'BACKSPACE' or 'DELETE' removes all filters, showing all
 transactions.
 
+   As mentioned above, hledger-ui shows auto-generated periodic
+transactions, and hides future transactions (auto-generated or not) by
+default.  'F' toggles showing and hiding these future transactions.
+This is similar to using a query like 'date:-tomorrow', but more
+convenient.  (experimental)
+
    'ESCAPE' removes all filters and jumps back to the top screen.  Or,
 it cancels a minibuffer edit or help dialog in progress.
 
@@ -257,17 +274,17 @@
 subaccounts).  if you specify a query on the command line, it shows just
 the matched accounts and the balances from matched transactions.
 
-   Account names are normally indented to show the hierarchy (tree
-mode).  To see less detail, set a depth limit by pressing a number key,
-'1' to '9'.  '0' shows even less detail, collapsing all accounts to a
-single total.  '-' and '+' (or '=') decrease and increase the depth
-limit.  To remove the depth limit, set it higher than the maximum
-account depth, or press 'ESCAPE'.
+   Account names are shown as a flat list by default.  Press 'T' to
+toggle tree mode.  In flat mode, account balances are exclusive of
+subaccounts, except where subaccounts are hidden by a depth limit (see
+below).  In tree mode, all account balances are inclusive of
+subaccounts.
 
-   'F' toggles flat mode, in which accounts are shown as a flat list,
-with their full names.  In this mode, account balances exclude
-subaccounts, except for accounts at the depth limit (as with hledger's
-balance command).
+   To see less detail, press a number key, '1' to '9', to set a depth
+limit.  Or use '-' to decrease and '+'/'=' to increase the depth limit.
+'0' shows even less detail, collapsing all accounts to a single total.
+To remove the depth limit, set it higher than the maximum account depth,
+or press 'ESCAPE'.
 
    'H' toggles between showing historical balances or period balances.
 Historical balances (the default) are ending balances at the end of the
@@ -318,13 +335,12 @@
      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, the register screen will
-include transactions from both the current account and its subaccounts.
-If the accounts screen was in flat mode, and a non-depth-clipped account
-was selected, 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.  As on
-the accounts screen, this can be toggled with 'F'.
+   Transactions affecting this account's subaccounts will be included in
+the register if the accounts screen is in tree mode, or if it's in flat
+mode but this account has subaccounts which are not shown due to a depth
+limit.  In other words, the register always shows the transactions
+contributing to the balance shown on the accounts screen.
+Tree mode/flat mode can be toggled with 'T' here also.
 
    'U' toggles filtering by unmarked status, showing or hiding unmarked
 transactions.  Similarly, 'P' toggles pending transactions, and 'C'
@@ -380,19 +396,19 @@
 
 Tag Table:
 Node: Top71
-Node: OPTIONS827
-Ref: #options924
-Node: KEYS4224
-Ref: #keys4319
-Node: SCREENS7278
-Ref: #screens7363
-Node: Accounts screen7453
-Ref: #accounts-screen7581
-Node: Register screen9811
-Ref: #register-screen9966
-Node: Transaction screen12040
-Ref: #transaction-screen12198
-Node: Error screen13068
-Ref: #error-screen13190
+Node: OPTIONS1084
+Ref: #options1181
+Node: KEYS4600
+Ref: #keys4695
+Node: SCREENS7951
+Ref: #screens8036
+Node: Accounts screen8126
+Ref: #accounts-screen8254
+Node: Register screen10470
+Ref: #register-screen10625
+Node: Transaction screen12622
+Ref: #transaction-screen12780
+Node: Error screen13650
+Ref: #error-screen13772
 
 End Tag Table
diff --git a/hledger-ui.txt b/hledger-ui.txt
--- a/hledger-ui.txt
+++ b/hledger-ui.txt
@@ -22,17 +22,22 @@
        mand-line interface, and sometimes quicker and more convenient than the
        web interface.
 
-       Like hledger, it reads data from one or more files in hledger  journal,
-       timeclock,  timedot,  or CSV format specified with -f, or $LEDGER_FILE,
-       or       $HOME/.hledger.journal       (on       windows,        perhaps
-       C:/Users/USER/.hledger.journal).   For  more about this see hledger(1),
+       Note hledger-ui has some different defaults: - it generates  rule-based
+       transactions  and  postings  by default (-forecast and -auto are always
+       on).  - it hides transactions dated in the future  by  default  (change
+       this with -future or the F key).  Experimental.
+
+       Like  hledger, it reads data from one or more files in hledger journal,
+       timeclock, timedot, or CSV format specified with -f,  or  $LEDGER_FILE,
+       or        $HOME/.hledger.journal       (on       windows,       perhaps
+       C:/Users/USER/.hledger.journal).  For more about this  see  hledger(1),
        hledger_journal(5) etc.
 
 OPTIONS
-       Note: if invoking hledger-ui as a hledger subcommand, write  --  before
+       Note:  if  invoking hledger-ui as a hledger subcommand, write -- before
        options as shown above.
 
-       Any  QUERYARGS  are interpreted as a hledger search query which filters
+       Any QUERYARGS are interpreted as a hledger search query  which  filters
        the data.
 
        --watch
@@ -45,11 +50,18 @@
               start in the (first) matched account's register screen
 
        --change
-              show period balances (changes) at startup instead of  historical
+              show  period balances (changes) at startup instead of historical
               balances
 
-       --flat show full account names, unindented
+       -F --flat
+              show accounts as a list (default)
 
+       -T --tree
+              show accounts as a tree
+
+       --future
+              show transactions dated later than today (normally hidden)
+
        hledger input options:
 
        -f FILE --file=FILE
@@ -57,7 +69,7 @@
               $LEDGER_FILE or $HOME/.hledger.journal)
 
        --rules-file=RULESFILE
-              Conversion  rules  file  to  use  when  reading  CSV   (default:
+              Conversion   rules  file  to  use  when  reading  CSV  (default:
               FILE.rules)
 
        --separator=CHAR
@@ -98,11 +110,11 @@
               multiperiod/multicolumn report by year
 
        -p --period=PERIODEXP
-              set  start date, end date, and/or reporting interval all at once
+              set start date, end date, and/or reporting interval all at  once
               using period expressions syntax (overrides the flags above)
 
        --date2
-              match the secondary date instead (see  command  help  for  other
+              match  the  secondary  date  instead (see command help for other
               effects)
 
        -U --unmarked
@@ -121,21 +133,21 @@
               hide/aggregate accounts or postings more than NUM levels deep
 
        -E --empty
-              show  items with zero amount, normally hidden (and vice-versa in
+              show items with zero amount, normally hidden (and vice-versa  in
               hledger-ui/hledger-web)
 
        -B --cost
-              convert amounts to their cost at  transaction  time  (using  the
+              convert  amounts  to  their  cost at transaction time (using the
               transaction price, if any)
 
        -V --value
-              convert  amounts  to  their  market value on the report end date
+              convert amounts to their market value on  the  report  end  date
               (using the most recent applicable market price, if any)
 
        --auto apply automated posting rules to modify transactions.
 
        --forecast
-              apply periodic transaction rules  to  generate  future  transac-
+              apply  periodic  transaction  rules  to generate future transac-
               tions, to 6 months from now or report end date.
 
        When a reporting option appears more than once in the command line, the
@@ -155,64 +167,70 @@
               show debug output (levels 1-9, default: 1)
 
        A @FILE argument will be expanded to the contents of FILE, which should
-       contain  one  command line option/argument per line.  (To prevent this,
+       contain one command line option/argument per line.  (To  prevent  this,
        insert a -- argument before.)
 
 KEYS
-       ? shows a help dialog listing all keys.  (Some of these also appear  in
+       ?  shows a help dialog listing all keys.  (Some of these also appear in
        the quick help at the bottom of each screen.) Press ? again (or ESCAPE,
        or LEFT) to close it.  The following keys work on most screens:
 
        The cursor keys navigate: right (or enter) goes deeper, left returns to
-       the  previous  screen,  up/down/page up/page down/home/end  move up and
-       down   through   lists.     Vi-style    (h/j/k/l)    and    Emacs-style
+       the previous screen,  up/down/page up/page down/home/end  move  up  and
+       down    through    lists.     Vi-style    (h/j/k/l)   and   Emacs-style
        (CTRL-p/CTRL-n/CTRL-f/CTRL-b) movement keys are also supported.  A tip:
-       movement speed is limited by your keyboard repeat rate, to move  faster
-       you  may  want to adjust it.  (If you're on a mac, the Karabiner app is
+       movement  speed is limited by your keyboard repeat rate, to move faster
+       you may want to adjust it.  (If you're on a mac, the Karabiner  app  is
        one way to do that.)
 
-       With shift pressed, the cursor keys adjust the report period,  limiting
-       the   transactions   to   be   shown   (by  default,  all  are  shown).
-       shift-down/up steps downward and upward through these  standard  report
+       With  shift pressed, the cursor keys adjust the report period, limiting
+       the  transactions  to  be  shown   (by   default,   all   are   shown).
+       shift-down/up  steps  downward and upward through these standard report
        period   durations:   year,   quarter,   month,   week,   day.    Then,
-       shift-left/right moves to the previous/next period.  t sets the  report
-       period  to  today.   With  the --watch option, when viewing a "current"
-       period (the current day, week, month, quarter,  or  year),  the  period
-       will  move automatically to track the current date.  To set a non-stan-
+       shift-left/right  moves to the previous/next period.  t sets the report
+       period to today.  With the --watch option,  when  viewing  a  "current"
+       period  (the  current  day,  week, month, quarter, or year), the period
+       will move automatically to track the current date.  To set a  non-stan-
        dard period, you can use / and a date: query.
 
-       / lets you set a general filter query limiting the  data  shown,  using
-       the  same query terms as in hledger and hledger-web.  While editing the
-       query, you can use CTRL-a/e/d/k, BS, cursor keys; press  ENTER  to  set
+       /  lets  you  set a general filter query limiting the data shown, using
+       the same query terms as in hledger and hledger-web.  While editing  the
+       query,  you  can  use CTRL-a/e/d/k, BS, cursor keys; press ENTER to set
        it, or ESCAPEto cancel.  There are also keys for quickly adjusting some
-       common filters like account depth and transaction status  (see  below).
+       common  filters  like account depth and transaction status (see below).
        BACKSPACE or DELETE removes all filters, showing all transactions.
 
-       ESCAPE  removes  all  filters and jumps back to the top screen.  Or, it
+       As mentioned above, hledger-ui shows auto-generated  periodic  transac-
+       tions,  and  hides  future  transactions  (auto-generated  or  not)  by
+       default.  F toggles showing and hiding these future transactions.  This
+       is  similar  to using a query like date:-tomorrow, but more convenient.
+       (experimental)
+
+       ESCAPE removes all filters and jumps back to the top  screen.   Or,  it
        cancels a minibuffer edit or help dialog in progress.
 
        CTRL-l redraws the screen and centers the selection if possible (selec-
-       tions  near  the top won't be centered, since we don't scroll above the
+       tions near the top won't be centered, since we don't scroll  above  the
        top).
 
-       g reloads from the data file(s) and updates the current screen and  any
-       previous  screens.   (With  large  files, this could cause a noticeable
+       g  reloads from the data file(s) and updates the current screen and any
+       previous screens.  (With large files, this  could  cause  a  noticeable
        pause.)
 
-       I toggles balance assertion  checking.   Disabling  balance  assertions
+       I  toggles  balance  assertion  checking.  Disabling balance assertions
        temporarily can be useful for troubleshooting.
 
-       a  runs  command-line  hledger's  add  command, and reloads the updated
+       a runs command-line hledger's add  command,  and  reloads  the  updated
        file.  This allows some basic data entry.
 
-       A is  like  a,  but  runs  the  hledger-iadd  tool,  which  provides  a
-       curses-style  interface.  This key will be available if hledger-iadd is
+       A  is  like  a,  but  runs  the  hledger-iadd  tool,  which  provides a
+       curses-style interface.  This key will be available if hledger-iadd  is
        installed in $PATH.
 
-       E  runs  $HLEDGER_UI_EDITOR,  or   $EDITOR,   or   a   default   (emac-
+       E   runs   $HLEDGER_UI_EDITOR,   or   $EDITOR,   or  a  default  (emac-
        sclient -a "" -nw) on the journal file.  With some editors (emacs, vi),
-       the cursor will be positioned at the current transaction  when  invoked
-       from  the  register  and transaction screens, and at the error location
+       the  cursor  will be positioned at the current transaction when invoked
+       from the register and transaction screens, and at  the  error  location
        (if possible) when invoked from the error screen.
 
        q quits the application.
@@ -221,44 +239,44 @@
 
 SCREENS
    Accounts screen
-       This is normally the first screen displayed.   It  lists  accounts  and
-       their  balances,  like hledger's balance command.  By default, it shows
-       all accounts and their latest ending balances (including  the  balances
-       of  subaccounts).  if you specify a query on the command line, it shows
+       This  is  normally  the  first screen displayed.  It lists accounts and
+       their balances, like hledger's balance command.  By default,  it  shows
+       all  accounts  and their latest ending balances (including the balances
+       of subaccounts).  if you specify a query on the command line, it  shows
        just the matched accounts and the balances from matched transactions.
 
-       Account names are normally indented to show the hierarchy (tree  mode).
-       To see less detail, set a depth limit by pressing a number key, 1 to 9.
-       0 shows even less detail, collapsing all accounts to a single total.  -
-       and  +  (or  =)  decrease  and increase the depth limit.  To remove the
+       Account  names  are shown as a flat list by default.  Press T to toggle
+       tree mode.  In flat mode, account  balances  are  exclusive  of  subac-
+       counts,  except  where  subaccounts  are  hidden  by a depth limit (see
+       below).  In tree mode, all account balances  are  inclusive  of  subac-
+       counts.
+
+       To  see  less detail, press a number key, 1 to 9, to set a depth limit.
+       Or use - to decrease and +/= to increase the depth limit.  0 shows even
+       less  detail, collapsing all accounts to a single total.  To remove the
        depth limit, set it higher than the maximum  account  depth,  or  press
        ESCAPE.
 
-       F  toggles  flat mode, in which accounts are shown as a flat list, with
-       their full names.  In this mode, account balances exclude  subaccounts,
-       except  for accounts at the depth limit (as with hledger's balance com-
-       mand).
-
        H toggles between showing historical balances or period balances.  His-
-       torical  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
+       torical 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.
 
        U toggles filtering by unmarked status, including or excluding unmarked
        postings in the balances.  Similarly, P toggles pending postings, and C
-       toggles cleared postings.  (By default, balances include all  postings;
-       if  you  activate  one  or  two status filters, only those postings are
+       toggles  cleared postings.  (By default, balances include all postings;
+       if you activate one or two status  filters,  only  those  postings  are
        included; and if you activate all three, the filter is removed.)
 
        R toggles real mode, in which virtual postings are ignored.
 
-       Z toggles nonzero mode, in which only accounts  with  nonzero  balances
-       are  shown (hledger-ui shows zero items by default, unlike command-line
+       Z  toggles  nonzero  mode, in which only accounts with nonzero balances
+       are shown (hledger-ui shows zero items by default, unlike  command-line
        hledger).
 
        Press right or enter to view an account's transactions register.
@@ -267,65 +285,64 @@
        This screen shows the transactions affecting a particular account, like
        a check register.  Each line represents one transaction and shows:
 
-       o the  other  account(s)  involved, in abbreviated form.  (If there are
-         both real and virtual postings, it shows only the  accounts  affected
+       o the other account(s) involved, in abbreviated form.   (If  there  are
+         both  real  and virtual postings, it shows only the accounts affected
          by real postings.)
 
-       o the  overall change to the current account's balance; positive for an
+       o the overall change to the current account's balance; positive for  an
          inflow to this account, negative for an outflow.
 
        o the running historical total or period total for the current account,
-         after  the  transaction.  This can be toggled with H.  Similar to the
-         accounts screen, the historical total  is  affected  by  transactions
-         (filtered  by  the  filter query) before the report start date, while
+         after the transaction.  This can be toggled with H.  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
+         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,  the  register  screen  will
-       include transactions from both the current account and its subaccounts.
-       If the accounts screen  was  in  flat  mode,  and  a  non-depth-clipped
-       account  was  selected,  the  register screen will exclude transactions
-       from subaccounts.  In other words, the register always shows the trans-
-       actions  responsible  for  the  period  balance  shown  on the accounts
-       screen.  As on the accounts screen, this can be toggled with F.
+       Transactions  affecting  this account's subaccounts will be included in
+       the register if the accounts screen is in tree mode, or if it's in flat
+       mode  but  this  account  has  subaccounts which are not shown due to a
+       depth limit.  In other words, the register always  shows  the  transac-
+       tions contributing to the balance shown on the accounts screen.
+       Tree mode/flat mode can be toggled with T here also.
 
-       U toggles filtering by unmarked  status,  showing  or  hiding  unmarked
+       U  toggles  filtering  by  unmarked  status, showing or hiding unmarked
        transactions.  Similarly, P toggles pending transactions, and C toggles
-       cleared transactions.  (By default, transactions with all statuses  are
-       shown;  if  you activate one or two status filters, only those transac-
-       tions are  shown;  and  if  you  activate  all  three,  the  filter  is
+       cleared  transactions.  (By default, transactions with all statuses are
+       shown; if you activate one or two status filters, only  those  transac-
+       tions  are  shown;  and  if  you  activate  all  three,  the  filter is
        removed.)q
 
        R toggles real mode, in which virtual postings are ignored.
 
-       Z  toggles  nonzero  mode, in which only transactions posting a nonzero
-       change are shown (hledger-ui shows zero items by default,  unlike  com-
+       Z toggles nonzero mode, in which only transactions  posting  a  nonzero
+       change  are  shown (hledger-ui shows zero items by default, unlike com-
        mand-line hledger).
 
        Press right (or enter) to view the selected transaction in detail.
 
    Transaction screen
-       This  screen  shows  a  single transaction, as a general journal entry,
-       similar to hledger's print command and  journal  format  (hledger_jour-
+       This screen shows a single transaction, as  a  general  journal  entry,
+       similar  to  hledger's  print command and journal format (hledger_jour-
        nal(5)).
 
-       The  transaction's  date(s)  and  any  cleared  flag, transaction code,
-       description, comments, along with  all  of  its  account  postings  are
-       shown.   Simple  transactions  have two postings, but there can be more
+       The transaction's date(s)  and  any  cleared  flag,  transaction  code,
+       description,  comments,  along  with  all  of  its account postings are
+       shown.  Simple transactions have two postings, but there  can  be  more
        (or in certain cases, fewer).
 
-       up and down will step through all transactions listed in  the  previous
-       account  register screen.  In the title bar, the numbers in parentheses
-       show your position  within  that  account  register.   They  will  vary
+       up  and  down will step through all transactions listed in the previous
+       account register screen.  In the title bar, the numbers in  parentheses
+       show  your  position  within  that  account  register.   They will vary
        depending on which account register you came from (remember most trans-
        actions appear in multiple account registers).  The #N number preceding
        them is the transaction's position within the complete unfiltered jour-
        nal, which is a more stable id (at least until the next reload).
 
    Error screen
-       This screen will appear if there is a problem, such as a  parse  error,
-       when  you  press g to reload.  Once you have fixed the problem, press g
+       This  screen  will appear if there is a problem, such as a parse error,
+       when you press g to reload.  Once you have fixed the problem,  press  g
        again to reload and resume normal operation.  (Or, you can press escape
        to cancel the reload attempt.)
 
@@ -333,17 +350,17 @@
        COLUMNS The screen width to use.  Default: the full terminal width.
 
        LEDGER_FILE The journal file path when not specified with -f.  Default:
-       ~/.hledger.journal (on  windows,  perhaps  C:/Users/USER/.hledger.jour-
+       ~/.hledger.journal  (on  windows,  perhaps C:/Users/USER/.hledger.jour-
        nal).
 
 FILES
-       Reads  data from one or more files in hledger journal, timeclock, time-
-       dot,  or  CSV  format  specified   with   -f,   or   $LEDGER_FILE,   or
-       $HOME/.hledger.journal           (on          windows,          perhaps
+       Reads data from one or more files in hledger journal, timeclock,  time-
+       dot,   or   CSV   format   specified   with  -f,  or  $LEDGER_FILE,  or
+       $HOME/.hledger.journal          (on          windows,           perhaps
        C:/Users/USER/.hledger.journal).
 
 BUGS
-       The need to precede options with -- when invoked from hledger  is  awk-
+       The  need  to precede options with -- when invoked from hledger is awk-
        ward.
 
        -f- doesn't work (hledger-ui can't read from stdin).
@@ -351,13 +368,13 @@
        -V affects only the accounts screen.
 
        When you press g, the current and all previous screens are regenerated,
-       which may cause a noticeable pause with large files.  Also there is  no
+       which  may cause a noticeable pause with large files.  Also there is no
        visual indication that this is in progress.
 
-       --watch  is  not yet fully robust.  It works well for normal usage, but
-       many file changes in a short time (eg  saving  the  file  thousands  of
-       times  with an editor macro) can cause problems at least on OSX.  Symp-
-       toms include: unresponsive UI, periodic resetting of the  cursor  posi-
+       --watch is not yet fully robust.  It works well for normal  usage,  but
+       many  file  changes  in  a  short time (eg saving the file thousands of
+       times with an editor macro) can cause problems at least on OSX.   Symp-
+       toms  include:  unresponsive UI, periodic resetting of the cursor posi-
        tion, momentary display of parse errors, high CPU usage eventually sub-
        siding, and possibly a small but persistent build-up of CPU usage until
        the program is restarted.
@@ -365,7 +382,7 @@
 
 
 REPORTING BUGS
-       Report  bugs at http://bugs.hledger.org (or on the #hledger IRC channel
+       Report bugs at http://bugs.hledger.org (or on the #hledger IRC  channel
        or hledger mail list)
 
 
@@ -379,7 +396,7 @@
 
 
 SEE ALSO
-       hledger(1),     hledger-ui(1),     hledger-web(1),      hledger-api(1),
+       hledger(1),      hledger-ui(1),     hledger-web(1),     hledger-api(1),
        hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time-
        dot(5), ledger(1)
 
@@ -387,4 +404,4 @@
 
 
 
-hledger-ui 1.11.1               September 2018                   hledger-ui(1)
+hledger-ui 1.12                  December 2018                   hledger-ui(1)
