cli, ui, web: make -NUM a shortcut for --depth NUM

This commit is contained in:
Simon Michael 2017-09-22 08:50:13 -10:00
parent 4be996ba89
commit fead7c5138
6 changed files with 33 additions and 8 deletions

View File

@ -141,8 +141,8 @@ m4_define({{_reportingoptions_}}, {{
`-R --real`
: include only non-virtual postings
`--depth=N`
: hide accounts/postings deeper than N
`-NUM --depth=NUM`
: hide/aggregate accounts or postings more than NUM levels deep
`-E --empty`
: show items with zero amount, normally hidden

View File

@ -10,6 +10,7 @@ import Data.Default
import Data.Functor.Compat ((<$>))
#endif
import Data.List (intercalate)
import System.Environment
import Hledger.Cli hiding (progname,version,prognameandversion)
import Hledger.UI.Theme (themeNames)
@ -94,6 +95,12 @@ checkUIOpts opts =
Just t | not $ elem t themeNames -> Left $ "invalid theme name: "++t
_ -> Right ()
-- XXX some refactoring seems due
getHledgerUIOpts :: IO UIOpts
getHledgerUIOpts = processArgs uimode >>= return . decodeRawOpts >>= rawOptsToUIOpts
--getHledgerUIOpts = processArgs uimode >>= return . decodeRawOpts >>= rawOptsToUIOpts
getHledgerUIOpts = do
args <- getArgs
let args' = replaceNumericFlags args
let cmdargopts = either usageError id $ process uimode args'
rawOptsToUIOpts $ decodeRawOpts cmdargopts

View File

@ -7,6 +7,7 @@ import Data.Default
import Data.Functor.Compat ((<$>))
#endif
import Data.Maybe
import System.Environment
import Hledger.Cli hiding (progname,version,prognameandversion)
import Settings
@ -92,5 +93,10 @@ checkWebOpts wopts =
else Right ()
getHledgerWebOpts :: IO WebOpts
getHledgerWebOpts = processArgs webmode >>= return . decodeRawOpts >>= rawOptsToWebOpts
--getHledgerWebOpts = processArgs webmode >>= return . decodeRawOpts >>= rawOptsToWebOpts
getHledgerWebOpts = do
args <- getArgs
let args' = replaceNumericFlags args
let cmdargopts = either usageError id $ process webmode args'
rawOptsToWebOpts $ decodeRawOpts cmdargopts

View File

@ -51,6 +51,7 @@ module Hledger.Cli.CliOptions (
outputFormatFromOpts,
defaultWidth,
widthFromOpts,
replaceNumericFlags,
-- | For register:
registerWidthsFromOpts,
maybeAccountNameDrop,
@ -75,6 +76,7 @@ import Prelude ()
import Prelude.Compat
import qualified Control.Exception as C
import Control.Monad (when)
import Data.Char
import Data.Default
#if !MIN_VERSION_base(4,8,0)
import Data.Functor.Compat ((<$>))
@ -149,7 +151,7 @@ reportflags = [
,flagNone ["pending","P"] (setboolopt "pending") "include only pending postings/txns"
,flagNone ["cleared","C"] (setboolopt "cleared") "include only cleared postings/txns"
,flagNone ["real","R"] (setboolopt "real") "include only non-virtual postings"
,flagReq ["depth"] (\s opts -> Right $ setopt "depth" s opts) "N" "hide accounts/postings deeper than N"
,flagReq ["depth"] (\s opts -> Right $ setopt "depth" s opts) "NUM" "(or -NUM): hide accounts/postings deeper than this"
,flagNone ["empty","E"] (setboolopt "empty") "show items with zero amount, normally hidden"
,flagNone ["cost","B"] (setboolopt "cost") "convert amounts to their cost at transaction time (using the transaction price, if any)"
,flagNone ["value","V"] (setboolopt "value") "convert amounts to their market value on the report end date (using the most recent applicable market price, if any)"
@ -377,6 +379,14 @@ decodeRawOpts = map (\(name',val) -> (name', fromSystemString val))
defaultWidth :: Int
defaultWidth = 80
-- | Replace any numeric flags (eg -2) with their long form (--depth 2),
-- as I'm guessing cmdargs doesn't support this directly.
replaceNumericFlags :: [String] -> [String]
replaceNumericFlags = map replace
where
replace ('-':ds) | not (null ds) && all isDigit ds = "--depth="++ds
replace s = s
-- | Parse raw option string values to the desired final data types.
-- Any relative smart dates will be converted to fixed dates based on
-- today's date. Parsing failures will raise an error.

View File

@ -108,7 +108,7 @@ main = do
-- some preliminary (imperfect) argument parsing to supplement cmdargs
args <- getArgs
let
args' = moveFlagsAfterCommand args
args' = moveFlagsAfterCommand $ replaceNumericFlags args
isFlag = ("-" `isPrefixOf`)
isNonEmptyNonFlag s = not (isFlag s) && not (null s)
rawcmd = headDef "" $ takeWhile isNonEmptyNonFlag args'
@ -201,7 +201,7 @@ main = do
argsToCliOpts :: [String] -> [String] -> IO CliOpts
argsToCliOpts args addons = do
let
args' = moveFlagsAfterCommand args
args' = moveFlagsAfterCommand $ replaceNumericFlags args
cmdargsopts = either usageError id $ process (mainmode addons) args'
cmdargsopts' = decodeRawOpts cmdargsopts
rawOptsToCliOpts cmdargsopts'

View File

@ -258,9 +258,11 @@ Group postings from start of wednesday to end of next tuesday (N is start date a
## Depth limiting
With the `--depth N` option, commands like [account](#account), [balance](#balance)
With the `--depth N` option (short form: `-N`), commands like [account](#account), [balance](#balance)
and [register](#register) will show only the uppermost accounts in the account
tree, down to level N. Use this when you want a summary with less detail.
This flag has the same effect as a `depth:` query argument
(so `-2`, `--depth=2` or `depth:2` are basically equivalent).
## Pivoting