cli, ui, web: make -NUM a shortcut for --depth NUM
This commit is contained in:
		
							parent
							
								
									4be996ba89
								
							
						
					
					
						commit
						fead7c5138
					
				| @ -141,8 +141,8 @@ m4_define({{_reportingoptions_}}, {{ | |||||||
| `-R --real` | `-R --real` | ||||||
| : include only non-virtual postings | : include only non-virtual postings | ||||||
| 
 | 
 | ||||||
| `--depth=N` | `-NUM --depth=NUM` | ||||||
| : hide accounts/postings deeper than N | : hide/aggregate accounts or postings more than NUM levels deep | ||||||
| 
 | 
 | ||||||
| `-E --empty` | `-E --empty` | ||||||
| : show items with zero amount, normally hidden | : show items with zero amount, normally hidden | ||||||
|  | |||||||
| @ -10,6 +10,7 @@ import Data.Default | |||||||
| import Data.Functor.Compat ((<$>)) | import Data.Functor.Compat ((<$>)) | ||||||
| #endif | #endif | ||||||
| import Data.List (intercalate) | import Data.List (intercalate) | ||||||
|  | import System.Environment | ||||||
| 
 | 
 | ||||||
| import Hledger.Cli hiding (progname,version,prognameandversion) | import Hledger.Cli hiding (progname,version,prognameandversion) | ||||||
| import Hledger.UI.Theme (themeNames) | import Hledger.UI.Theme (themeNames) | ||||||
| @ -94,6 +95,12 @@ checkUIOpts opts = | |||||||
|       Just t | not $ elem t themeNames -> Left $ "invalid theme name: "++t |       Just t | not $ elem t themeNames -> Left $ "invalid theme name: "++t | ||||||
|       _                                -> Right () |       _                                -> Right () | ||||||
| 
 | 
 | ||||||
|  | -- XXX some refactoring seems due | ||||||
| getHledgerUIOpts :: IO UIOpts | 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  | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -7,6 +7,7 @@ import Data.Default | |||||||
| import Data.Functor.Compat ((<$>)) | import Data.Functor.Compat ((<$>)) | ||||||
| #endif | #endif | ||||||
| import Data.Maybe | import Data.Maybe | ||||||
|  | import System.Environment | ||||||
| 
 | 
 | ||||||
| import Hledger.Cli hiding (progname,version,prognameandversion) | import Hledger.Cli hiding (progname,version,prognameandversion) | ||||||
| import Settings | import Settings | ||||||
| @ -92,5 +93,10 @@ checkWebOpts wopts = | |||||||
|     else Right () |     else Right () | ||||||
| 
 | 
 | ||||||
| getHledgerWebOpts :: IO WebOpts | 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  | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -51,6 +51,7 @@ module Hledger.Cli.CliOptions ( | |||||||
|   outputFormatFromOpts, |   outputFormatFromOpts, | ||||||
|   defaultWidth, |   defaultWidth, | ||||||
|   widthFromOpts, |   widthFromOpts, | ||||||
|  |   replaceNumericFlags, | ||||||
|   -- | For register: |   -- | For register: | ||||||
|   registerWidthsFromOpts, |   registerWidthsFromOpts, | ||||||
|   maybeAccountNameDrop, |   maybeAccountNameDrop, | ||||||
| @ -75,6 +76,7 @@ import Prelude () | |||||||
| import Prelude.Compat | import Prelude.Compat | ||||||
| import qualified Control.Exception as C | import qualified Control.Exception as C | ||||||
| import Control.Monad (when) | import Control.Monad (when) | ||||||
|  | import Data.Char | ||||||
| import Data.Default | import Data.Default | ||||||
| #if !MIN_VERSION_base(4,8,0) | #if !MIN_VERSION_base(4,8,0) | ||||||
| import Data.Functor.Compat ((<$>)) | import Data.Functor.Compat ((<$>)) | ||||||
| @ -149,7 +151,7 @@ reportflags = [ | |||||||
|  ,flagNone ["pending","P"]   (setboolopt "pending") "include only pending postings/txns" |  ,flagNone ["pending","P"]   (setboolopt "pending") "include only pending postings/txns" | ||||||
|  ,flagNone ["cleared","C"]   (setboolopt "cleared") "include only cleared postings/txns" |  ,flagNone ["cleared","C"]   (setboolopt "cleared") "include only cleared postings/txns" | ||||||
|  ,flagNone ["real","R"]      (setboolopt "real") "include only non-virtual postings" |  ,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 ["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 ["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)" |  ,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 :: Int | ||||||
| defaultWidth = 80 | 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. | -- | Parse raw option string values to the desired final data types. | ||||||
| -- Any relative smart dates will be converted to fixed dates based on | -- Any relative smart dates will be converted to fixed dates based on | ||||||
| -- today's date. Parsing failures will raise an error. | -- today's date. Parsing failures will raise an error. | ||||||
|  | |||||||
| @ -108,7 +108,7 @@ main = do | |||||||
|   -- some preliminary (imperfect) argument parsing to supplement cmdargs |   -- some preliminary (imperfect) argument parsing to supplement cmdargs | ||||||
|   args <- getArgs |   args <- getArgs | ||||||
|   let |   let | ||||||
|     args'                = moveFlagsAfterCommand args |     args'                = moveFlagsAfterCommand $ replaceNumericFlags args | ||||||
|     isFlag               = ("-" `isPrefixOf`) |     isFlag               = ("-" `isPrefixOf`) | ||||||
|     isNonEmptyNonFlag s  = not (isFlag s) && not (null s) |     isNonEmptyNonFlag s  = not (isFlag s) && not (null s) | ||||||
|     rawcmd               = headDef "" $ takeWhile isNonEmptyNonFlag args' |     rawcmd               = headDef "" $ takeWhile isNonEmptyNonFlag args' | ||||||
| @ -201,7 +201,7 @@ main = do | |||||||
| argsToCliOpts :: [String] -> [String] -> IO CliOpts | argsToCliOpts :: [String] -> [String] -> IO CliOpts | ||||||
| argsToCliOpts args addons = do | argsToCliOpts args addons = do | ||||||
|   let |   let | ||||||
|     args'        = moveFlagsAfterCommand args |     args'        = moveFlagsAfterCommand $ replaceNumericFlags args | ||||||
|     cmdargsopts  = either usageError id $ process (mainmode addons) args' |     cmdargsopts  = either usageError id $ process (mainmode addons) args' | ||||||
|     cmdargsopts' = decodeRawOpts cmdargsopts |     cmdargsopts' = decodeRawOpts cmdargsopts | ||||||
|   rawOptsToCliOpts cmdargsopts' |   rawOptsToCliOpts cmdargsopts' | ||||||
|  | |||||||
| @ -258,9 +258,11 @@ Group postings from start of wednesday to end of next tuesday (N is start date a | |||||||
| 
 | 
 | ||||||
| ## Depth limiting | ## 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 | 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. | 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 | ## Pivoting | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user