diff --git a/hledger-ui/Hledger/UI/AccountsScreen.hs b/hledger-ui/Hledger/UI/AccountsScreen.hs index 28c4cd52f..98faa1ceb 100644 --- a/hledger-ui/Hledger/UI/AccountsScreen.hs +++ b/hledger-ui/Hledger/UI/AccountsScreen.hs @@ -192,7 +192,7 @@ asDraw AppState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ropts}} ("h", "help") ,("right", "register") ,("F", "flat?") - ,("-+=1234567890", "depth") + ,("-+0123456789", "depth") --,("/", "filter") --,("DEL", "unfilter") --,("ESC", "cancel/top") @@ -271,19 +271,19 @@ asHandle st'@AppState{ Vty.EvKey k [] | k `elem` [Vty.KChar 'h', Vty.KChar '?'] -> continue $ setMode Help st Vty.EvKey (Vty.KChar 'g') [] -> liftIO (stReloadJournalIfChanged copts d j st) >>= continue Vty.EvKey (Vty.KChar 'a') [] -> suspendAndResume $ clearScreen >> setCursorPosition 0 0 >> add copts j >> stReloadJournalIfChanged copts d j st + Vty.EvKey (Vty.KChar '0') [] -> continue $ regenerateScreens j d $ setDepth (Just 0) st + Vty.EvKey (Vty.KChar '1') [] -> continue $ regenerateScreens j d $ setDepth (Just 1) st + Vty.EvKey (Vty.KChar '2') [] -> continue $ regenerateScreens j d $ setDepth (Just 2) st + Vty.EvKey (Vty.KChar '3') [] -> continue $ regenerateScreens j d $ setDepth (Just 3) st + Vty.EvKey (Vty.KChar '4') [] -> continue $ regenerateScreens j d $ setDepth (Just 4) st + Vty.EvKey (Vty.KChar '5') [] -> continue $ regenerateScreens j d $ setDepth (Just 5) st + Vty.EvKey (Vty.KChar '6') [] -> continue $ regenerateScreens j d $ setDepth (Just 6) st + Vty.EvKey (Vty.KChar '7') [] -> continue $ regenerateScreens j d $ setDepth (Just 7) st + Vty.EvKey (Vty.KChar '8') [] -> continue $ regenerateScreens j d $ setDepth (Just 8) st + Vty.EvKey (Vty.KChar '9') [] -> continue $ regenerateScreens j d $ setDepth (Just 9) st Vty.EvKey (Vty.KChar '-') [] -> continue $ regenerateScreens j d $ decDepth st - Vty.EvKey (Vty.KChar '+') [] -> continue $ regenerateScreens j d $ incDepth st - Vty.EvKey (Vty.KChar '=') [] -> continue $ regenerateScreens j d $ incDepth st - Vty.EvKey (Vty.KChar '1') [] -> continue $ regenerateScreens j d $ setDepth 1 st - Vty.EvKey (Vty.KChar '2') [] -> continue $ regenerateScreens j d $ setDepth 2 st - Vty.EvKey (Vty.KChar '3') [] -> continue $ regenerateScreens j d $ setDepth 3 st - Vty.EvKey (Vty.KChar '4') [] -> continue $ regenerateScreens j d $ setDepth 4 st - Vty.EvKey (Vty.KChar '5') [] -> continue $ regenerateScreens j d $ setDepth 5 st - Vty.EvKey (Vty.KChar '6') [] -> continue $ regenerateScreens j d $ setDepth 6 st - Vty.EvKey (Vty.KChar '7') [] -> continue $ regenerateScreens j d $ setDepth 7 st - Vty.EvKey (Vty.KChar '8') [] -> continue $ regenerateScreens j d $ setDepth 8 st - Vty.EvKey (Vty.KChar '9') [] -> continue $ regenerateScreens j d $ setDepth 9 st - Vty.EvKey (Vty.KChar '0') [] -> continue $ regenerateScreens j d $ setDepth 0 st + Vty.EvKey (Vty.KChar '_') [] -> continue $ regenerateScreens j d $ decDepth st + Vty.EvKey k [] | k `elem` [Vty.KChar '+', Vty.KChar '='] -> continue $ regenerateScreens j d $ incDepth st Vty.EvKey (Vty.KChar 'F') [] -> continue $ regenerateScreens j d $ stToggleFlat st Vty.EvKey (Vty.KChar 'E') [] -> scrollTop >> (continue $ regenerateScreens j d $ stToggleEmpty st) Vty.EvKey (Vty.KChar 'C') [] -> scrollTop >> (continue $ regenerateScreens j d $ stToggleCleared st) diff --git a/hledger-ui/Hledger/UI/UIUtils.hs b/hledger-ui/Hledger/UI/UIUtils.hs index 8a1b2a562..c2e56bc14 100644 --- a/hledger-ui/Hledger/UI/UIUtils.hs +++ b/hledger-ui/Hledger/UI/UIUtils.hs @@ -113,8 +113,8 @@ stResetFilter st@AppState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_= ,query_="" }}}} -stResetDepth :: AppState -> AppState -stResetDepth st@AppState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} = +resetDepth :: AppState -> AppState +resetDepth st@AppState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} = st{aopts=uopts{cliopts_=copts{reportopts_=ropts{depth_=Nothing}}}} -- | Get the maximum account depth in the current journal. @@ -139,20 +139,19 @@ incDepth st@AppState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts inc (Just d) | d < (maxDepth st - 1) = Just $ d+1 inc _ = Nothing --- | Set the current depth limit to the specified depth, which should --- be a positive number. If it is zero, or equal to or greater than the --- current maximum account depth, the depth limit will be removed. --- (Slight inconsistency here: zero is currently a valid display depth --- which can be reached using the - key. But we need a key to remove --- the depth limit, and 0 is it.) -setDepth :: Int -> AppState -> AppState -setDepth depth st@AppState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} +-- | Set the current depth limit to the specified depth, or remove the depth limit. +-- Also remove the depth limit if the specified depth is greater than the current +-- maximum account depth. If the specified depth is negative, reset the depth limit +-- to whatever was specified at startup. +setDepth :: Maybe Int -> AppState -> AppState +setDepth mdepth st@AppState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} = st{aopts=uopts{cliopts_=copts{reportopts_=ropts{depth_=mdepth'}}}} where - mdepth' | depth < 0 = depth_ ropts - | depth == 0 = Nothing - | depth >= maxDepth st = Nothing - | otherwise = Just depth + mdepth' = case mdepth of + Nothing -> Nothing + Just d | d < 0 -> depth_ ropts + | d >= maxDepth st -> Nothing + | otherwise -> mdepth -- | Open the minibuffer, setting its content to the current query with the cursor at the end. stShowMinibuffer st = setMode (Minibuffer e) st @@ -192,7 +191,7 @@ popScreen st = st resetScreens :: Day -> AppState -> AppState resetScreens d st@AppState{aScreen=s,aPrevScreens=ss} = - (sInit topscreen) d True $ stResetDepth $ stResetFilter $ stCloseMinibuffer st{aScreen=topscreen, aPrevScreens=[]} + (sInit topscreen) d True $ resetDepth $ stResetFilter $ stCloseMinibuffer st{aScreen=topscreen, aPrevScreens=[]} where topscreen = case ss of _:_ -> last ss [] -> s @@ -243,8 +242,8 @@ helpDialog = ,str " " ,str "accounts screen:" ,renderKey ("F", "toggle flat mode") - ,renderKey ("-+=1234567890", "") - ,str " adjust/set/remove depth limit" + ,renderKey ("-+0123456789", "") + ,str " adjust/set depth limit" ] ) ] diff --git a/hledger-ui/doc/hledger-ui.1 b/hledger-ui/doc/hledger-ui.1 index 02301fe1b..678832391 100644 --- a/hledger-ui/doc/hledger-ui.1 +++ b/hledger-ui/doc/hledger-ui.1 @@ -267,9 +267,10 @@ When not in flat mode, indentation indicates the account hierarchy. By default, all subaccounts are displayed. To see less detail, set a depth limit by pressing a number key, \f[C]1\f[] to \f[C]9\f[]. -Or, adjust the depth limit by pressing \f[C]\-\f[] or \f[C]+\f[] -(\f[C]=\f[] also works). -\f[C]0\f[] removes 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[] decrease and increase the depth limit. +To remove the depth limit press \f[C]=\f[], or just keep increasing it. .PP \f[C]C\f[] toggles cleared mode, in which uncleared transactions and postings are not shown. diff --git a/hledger-ui/doc/hledger-ui.1.info b/hledger-ui/doc/hledger-ui.1.info index 8001d3693..131c311dd 100644 --- a/hledger-ui/doc/hledger-ui.1.info +++ b/hledger-ui/doc/hledger-ui.1.info @@ -212,9 +212,10 @@ matched transactions. `F' toggles flat mode on and off. By default, all subaccounts are displayed. To see less detail, set a -depth limit by pressing a number key, `1' to `9'. Or, adjust the depth -limit by pressing `-' or `+' (`=' also works). `0' removes the depth -limit. +depth limit by pressing a number key, `1' to `9'. `0' shows even less +detail, collapsing all accounts to a single total. `-' and `+' +decrease and increase the depth limit. To remove the depth limit press +`=', or just keep increasing it. `C' toggles cleared mode, in which uncleared transactions and postings are not shown. `U' toggles uncleared mode, in which only @@ -330,11 +331,11 @@ Node: SCREENS5098 Ref: #screens5185 Node: Accounts screen5275 Ref: #accounts-screen5405 -Node: Register screen6509 -Ref: #register-screen6666 -Node: Transaction screen8419 -Ref: #transaction-screen8579 -Node: Error screen9446 -Ref: #error-screen9570 +Node: Register screen6599 +Ref: #register-screen6756 +Node: Transaction screen8509 +Ref: #transaction-screen8669 +Node: Error screen9536 +Ref: #error-screen9660  End Tag Table diff --git a/hledger-ui/doc/hledger-ui.1.m4.md b/hledger-ui/doc/hledger-ui.1.m4.md index e1d85619c..2733dd9a3 100644 --- a/hledger-ui/doc/hledger-ui.1.m4.md +++ b/hledger-ui/doc/hledger-ui.1.m4.md @@ -118,8 +118,9 @@ When not in flat mode, indentation indicates the account hierarchy. `F` toggles By default, all subaccounts are displayed. To see less detail, set a depth limit by pressing a number key, `1` to `9`. -Or, adjust the depth limit by pressing `-` or `+` (`=` also works). -`0` removes the depth limit. +`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`. `C` toggles cleared mode, in which [uncleared transactions and postings](/journal.html#transactions) are diff --git a/hledger-ui/doc/hledger-ui.1.txt b/hledger-ui/doc/hledger-ui.1.txt index 7732d625c..e1759a247 100644 --- a/hledger-ui/doc/hledger-ui.1.txt +++ b/hledger-ui/doc/hledger-ui.1.txt @@ -183,8 +183,10 @@ SSCCRREEEENNSS toggles flat mode on and off. By default, all subaccounts are displayed. To see less detail, set a - depth limit by pressing a number key, 1 to 9. Or, adjust the depth - limit by pressing - or + (= also works). 0 removes the depth limit. + depth limit by pressing a number key, 1 to 9. 0 shows even less + detail, collapsing all accounts to a single total. - and + decrease + and increase the depth limit. To remove the depth limit press =, or + just keep increasing it. C toggles cleared mode, in which uncleared transactions and postings are not shown. U toggles uncleared mode, in which only uncleared