rename "uncleared" status to "unmarked" and --uncleared to --unmarked (#564)

See the issue and linked mail list discussion. Ambiguity between the
uncleared state, and the "not cleared" --uncleared flag causes confusion
and friction. At this point it seems best to break with Ledger and
past hledger, pick a new name and drop --uncleared to put an end to it.
This commit is contained in:
Simon Michael 2017-06-15 16:25:37 -07:00
parent 794647780d
commit e119941648
24 changed files with 97 additions and 91 deletions

View File

@ -13,7 +13,7 @@
```
Usage: hledger-check [-f|--file FILE] [--alias OLD=NEW] [--ignore-assertions]
[-b|--begin DATE] [-e|--end DATE] [-C|--cleared]
[--pending] [-U|--uncleared] [-R|--real] [--sunday]
[--pending] [-U|--unmarked] [-R|--real] [--sunday]
[-D|--daily ASSERT] [-W|--weekly ASSERT]
[-M|--monthly ASSERT] [-Q|--quarterly ASSERT]
[-Y|--yearly ASSERT] [ASSERT]
@ -27,8 +27,8 @@ Available options:
-b,--begin DATE include postings/txns on or after this date
-e,--end DATE include postings/txns before this date
-C,--cleared include only cleared postings/txns
--pending include only pending postings/txns
-U,--uncleared include only uncleared (and pending) postings/txns
-P,--pending include only pending postings/txns
-U,--unmarked include only unmarked postings/txns
-R,--real include only non-virtual postings
--sunday weeks start on Sunday
-D,--daily ASSERT assertions that must hold at the end of the day
@ -228,10 +228,10 @@ inAssertion account = inAssertion'
fixupJournal :: Opts -> H.Journal -> IO (H.Journal, [(H.AccountName, H.MixedAmount)])
fixupJournal opts j = do
today <- H.getCurrentDay
let j' = (if cleared opts then H.filterJournalTransactions (H.Status H.Cleared) else id)
. (if pending opts then H.filterJournalTransactions (H.Status H.Pending) else id)
. (if uncleared opts then H.filterJournalTransactions (H.Status H.Uncleared) else id)
. (if real opts then H.filterJournalTransactions (H.Real True) else id)
let j' = (if cleared opts then H.filterJournalTransactions (H.Status H.Cleared) else id)
. (if pending opts then H.filterJournalTransactions (H.Status H.Pending) else id)
. (if unmarked opts then H.filterJournalTransactions (H.Status H.Unmarked) else id)
. (if real opts then H.filterJournalTransactions (H.Real True) else id)
$ H.journalApplyAliases (aliases opts) j
let starting = case begin opts of
Just _ ->
@ -319,8 +319,8 @@ data Opts = Opts
-- ^ Include only cleared postings/txns.
, pending :: Bool
-- ^ Include only pending postings/txns.
, uncleared :: Bool
-- ^ Include only uncleared (and pending) postings/txns.
, unmarked :: Bool
-- ^ Include only unmarked postings/txns.
, real :: Bool
-- ^ Include only non-virtual postings.
, sunday :: Bool
@ -362,7 +362,7 @@ args = info (helper <*> parser) $ mconcat
<*> switch
(arg' "pending" "include only pending postings/txns")
<*> switch
(arg 'U' "uncleared" "include only uncleared (and pending) postings/txns")
(arg 'U' "unmarked" "include only unmarked postings/txns")
<*> switch
(arg 'R' "real" "include only non-virtual postings")
<*> switch

View File

@ -143,7 +143,7 @@ m4_define({{_reportingoptions_}}, {{
`-P --pending`
: include only pending postings/txns
`-U --uncleared`
`-U --unmarked`
: include only unmarked postings/txns
`-R --real`

View File

@ -1,4 +1,4 @@
1/1 uncleared
1/1 unmarked
(a) 1
(b) 1

View File

@ -941,7 +941,7 @@ Right samplejournal = journalBalanceTransactions False $
tsourcepos=nullsourcepos,
tdate=parsedate "2008/01/01",
tdate2=Nothing,
tstatus=Uncleared,
tstatus=Unmarked,
tcode="",
tdescription="income",
tcomment="",
@ -958,7 +958,7 @@ Right samplejournal = journalBalanceTransactions False $
tsourcepos=nullsourcepos,
tdate=parsedate "2008/06/01",
tdate2=Nothing,
tstatus=Uncleared,
tstatus=Unmarked,
tcode="",
tdescription="gift",
tcomment="",
@ -975,7 +975,7 @@ Right samplejournal = journalBalanceTransactions False $
tsourcepos=nullsourcepos,
tdate=parsedate "2008/06/02",
tdate2=Nothing,
tstatus=Uncleared,
tstatus=Unmarked,
tcode="",
tdescription="save",
tcomment="",
@ -1009,7 +1009,7 @@ Right samplejournal = journalBalanceTransactions False $
tsourcepos=nullsourcepos,
tdate=parsedate "2008/12/31",
tdate2=Nothing,
tstatus=Uncleared,
tstatus=Unmarked,
tcode="",
tdescription="pay off",
tcomment="",

View File

@ -81,7 +81,7 @@ nullposting, posting :: Posting
nullposting = Posting
{pdate=Nothing
,pdate2=Nothing
,pstatus=Uncleared
,pstatus=Unmarked
,paccount=""
,pamount=nullmixedamt
,pcomment=""
@ -164,14 +164,15 @@ postingDate2 p = headDef nulldate $ catMaybes dates
,maybe Nothing (Just . tdate) $ ptransaction p
]
-- | Get a posting's cleared status: cleared or pending if those are
-- explicitly set, otherwise the cleared status of its parent
-- transaction, or uncleared if there is no parent transaction. (Note
-- Uncleared's ambiguity, it can mean "uncleared" or "don't know".
-- | Get a posting's status. This is cleared or pending if those are
-- explicitly set on the posting, otherwise the status of its parent
-- transaction, or unmarked if there is no parent transaction. (Note
-- the ambiguity, unmarked can mean "posting and transaction are both
-- unmarked" or "posting is unmarked and don't know about the transaction".
postingStatus :: Posting -> ClearedStatus
postingStatus Posting{pstatus=s, ptransaction=mt}
| s == Uncleared = case mt of Just t -> tstatus t
Nothing -> Uncleared
| s == Unmarked = case mt of Just t -> tstatus t
Nothing -> Unmarked
| otherwise = s
-- | Implicit tags for this transaction.

View File

@ -95,7 +95,7 @@ nulltransaction = Transaction {
tsourcepos=nullsourcepos,
tdate=nulldate,
tdate2=Nothing,
tstatus=Uncleared,
tstatus=Unmarked,
tcode="",
tdescription="",
tcomment="",
@ -133,7 +133,7 @@ tests_showTransactionUnelided = [
nulltransaction{
tdate=parsedate "2012/05/14",
tdate2=Just $ parsedate "2012/05/15",
tstatus=Uncleared,
tstatus=Unmarked,
tcode="code",
tdescription="desc",
tcomment="tcomment1\ntcomment2\n",
@ -543,7 +543,7 @@ tests_Hledger_Data_Transaction = TestList $ concat [
," assets:checking"
,""
])
(let t = Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Uncleared "" "coopportunity" "" []
(let t = Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Unmarked "" "coopportunity" "" []
[posting{paccount="expenses:food:groceries", pamount=Mixed [usd 47.18], ptransaction=Just t}
,posting{paccount="assets:checking", pamount=Mixed [usd (-47.18)], ptransaction=Just t}
] ""
@ -557,7 +557,7 @@ tests_Hledger_Data_Transaction = TestList $ concat [
," assets:checking $-47.18"
,""
])
(let t = Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Uncleared "" "coopportunity" "" []
(let t = Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Unmarked "" "coopportunity" "" []
[posting{paccount="expenses:food:groceries", pamount=Mixed [usd 47.18], ptransaction=Just t}
,posting{paccount="assets:checking", pamount=Mixed [usd (-47.18)], ptransaction=Just t}
] ""
@ -573,7 +573,7 @@ tests_Hledger_Data_Transaction = TestList $ concat [
,""
])
(showTransaction
(txnTieKnot $ Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Uncleared "" "coopportunity" "" []
(txnTieKnot $ Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Unmarked "" "coopportunity" "" []
[posting{paccount="expenses:food:groceries", pamount=Mixed [usd 47.18]}
,posting{paccount="assets:checking", pamount=Mixed [usd (-47.19)]}
] ""))
@ -586,7 +586,7 @@ tests_Hledger_Data_Transaction = TestList $ concat [
,""
])
(showTransaction
(txnTieKnot $ Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Uncleared "" "coopportunity" "" []
(txnTieKnot $ Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Unmarked "" "coopportunity" "" []
[posting{paccount="expenses:food:groceries", pamount=Mixed [usd 47.18]}
] ""))
@ -598,7 +598,7 @@ tests_Hledger_Data_Transaction = TestList $ concat [
,""
])
(showTransaction
(txnTieKnot $ Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Uncleared "" "coopportunity" "" []
(txnTieKnot $ Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Unmarked "" "coopportunity" "" []
[posting{paccount="expenses:food:groceries", pamount=missingmixedamt}
] ""))
@ -611,7 +611,7 @@ tests_Hledger_Data_Transaction = TestList $ concat [
,""
])
(showTransaction
(txnTieKnot $ Transaction 0 nullsourcepos (parsedate "2010/01/01") Nothing Uncleared "" "x" "" []
(txnTieKnot $ Transaction 0 nullsourcepos (parsedate "2010/01/01") Nothing Unmarked "" "x" "" []
[posting{paccount="a", pamount=Mixed [num 1 `at` (usd 2 `withPrecision` 0)]}
,posting{paccount="b", pamount= missingmixedamt}
] ""))
@ -619,19 +619,19 @@ tests_Hledger_Data_Transaction = TestList $ concat [
,"balanceTransaction" ~: do
assertBool "detect unbalanced entry, sign error"
(isLeft $ balanceTransaction Nothing
(Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Uncleared "" "test" "" []
(Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Unmarked "" "test" "" []
[posting{paccount="a", pamount=Mixed [usd 1]}
,posting{paccount="b", pamount=Mixed [usd 1]}
] ""))
assertBool "detect unbalanced entry, multiple missing amounts"
(isLeft $ balanceTransaction Nothing
(Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Uncleared "" "test" "" []
(Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Unmarked "" "test" "" []
[posting{paccount="a", pamount=missingmixedamt}
,posting{paccount="b", pamount=missingmixedamt}
] ""))
let e = balanceTransaction Nothing (Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Uncleared "" "" "" []
let e = balanceTransaction Nothing (Transaction 0 nullsourcepos (parsedate "2007/01/28") Nothing Unmarked "" "" "" []
[posting{paccount="a", pamount=Mixed [usd 1]}
,posting{paccount="b", pamount=missingmixedamt}
] "")
@ -642,7 +642,7 @@ tests_Hledger_Data_Transaction = TestList $ concat [
Right e' -> (pamount $ last $ tpostings e')
Left _ -> error' "should not happen")
let e = balanceTransaction Nothing (Transaction 0 nullsourcepos (parsedate "2011/01/01") Nothing Uncleared "" "" "" []
let e = balanceTransaction Nothing (Transaction 0 nullsourcepos (parsedate "2011/01/01") Nothing Unmarked "" "" "" []
[posting{paccount="a", pamount=Mixed [usd 1.35]}
,posting{paccount="b", pamount=Mixed [eur (-1)]}
] "")
@ -654,49 +654,49 @@ tests_Hledger_Data_Transaction = TestList $ concat [
Left _ -> error' "should not happen")
assertBool "balanceTransaction balances based on cost if there are unit prices" (isRight $
balanceTransaction Nothing (Transaction 0 nullsourcepos (parsedate "2011/01/01") Nothing Uncleared "" "" "" []
balanceTransaction Nothing (Transaction 0 nullsourcepos (parsedate "2011/01/01") Nothing Unmarked "" "" "" []
[posting{paccount="a", pamount=Mixed [usd 1 `at` eur 2]}
,posting{paccount="a", pamount=Mixed [usd (-2) `at` eur 1]}
] ""))
assertBool "balanceTransaction balances based on cost if there are total prices" (isRight $
balanceTransaction Nothing (Transaction 0 nullsourcepos (parsedate "2011/01/01") Nothing Uncleared "" "" "" []
balanceTransaction Nothing (Transaction 0 nullsourcepos (parsedate "2011/01/01") Nothing Unmarked "" "" "" []
[posting{paccount="a", pamount=Mixed [usd 1 @@ eur 1]}
,posting{paccount="a", pamount=Mixed [usd (-2) @@ eur 1]}
] ""))
,"isTransactionBalanced" ~: do
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Uncleared "" "a" "" []
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Unmarked "" "a" "" []
[posting{paccount="b", pamount=Mixed [usd 1.00], ptransaction=Just t}
,posting{paccount="c", pamount=Mixed [usd (-1.00)], ptransaction=Just t}
] ""
assertBool "detect balanced" (isTransactionBalanced Nothing t)
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Uncleared "" "a" "" []
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Unmarked "" "a" "" []
[posting{paccount="b", pamount=Mixed [usd 1.00], ptransaction=Just t}
,posting{paccount="c", pamount=Mixed [usd (-1.01)], ptransaction=Just t}
] ""
assertBool "detect unbalanced" (not $ isTransactionBalanced Nothing t)
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Uncleared "" "a" "" []
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Unmarked "" "a" "" []
[posting{paccount="b", pamount=Mixed [usd 1.00], ptransaction=Just t}
] ""
assertBool "detect unbalanced, one posting" (not $ isTransactionBalanced Nothing t)
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Uncleared "" "a" "" []
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Unmarked "" "a" "" []
[posting{paccount="b", pamount=Mixed [usd 0], ptransaction=Just t}
] ""
assertBool "one zero posting is considered balanced for now" (isTransactionBalanced Nothing t)
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Uncleared "" "a" "" []
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Unmarked "" "a" "" []
[posting{paccount="b", pamount=Mixed [usd 1.00], ptransaction=Just t}
,posting{paccount="c", pamount=Mixed [usd (-1.00)], ptransaction=Just t}
,posting{paccount="d", pamount=Mixed [usd 100], ptype=VirtualPosting, ptransaction=Just t}
] ""
assertBool "virtual postings don't need to balance" (isTransactionBalanced Nothing t)
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Uncleared "" "a" "" []
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Unmarked "" "a" "" []
[posting{paccount="b", pamount=Mixed [usd 1.00], ptransaction=Just t}
,posting{paccount="c", pamount=Mixed [usd (-1.00)], ptransaction=Just t}
,posting{paccount="d", pamount=Mixed [usd 100], ptype=BalancedVirtualPosting, ptransaction=Just t}
] ""
assertBool "balanced virtual postings need to balance among themselves" (not $ isTransactionBalanced Nothing t)
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Uncleared "" "a" "" []
let t = Transaction 0 nullsourcepos (parsedate "2009/01/01") Nothing Unmarked "" "a" "" []
[posting{paccount="b", pamount=Mixed [usd 1.00], ptransaction=Just t}
,posting{paccount="c", pamount=Mixed [usd (-1.00)], ptransaction=Just t}
,posting{paccount="d", pamount=Mixed [usd 100], ptype=BalancedVirtualPosting, ptransaction=Just t}

View File

@ -182,17 +182,17 @@ type Tag = (TagName, TagValue) -- ^ A tag name and (possibly empty) value.
-- | The status of a transaction or posting, recorded with a status mark
-- (nothing, !, or *). What these mean is ultimately user defined.
-- Calling the unmarked state "Uncleared" creates some ambiguity
-- Calling the unmarked state "Unmarked" creates some ambiguity
-- but is traditional in Ledger/hledger so we keep it (#564).
-- Calling the type "Cleared..." might also be confusing, just Status
-- would be better but that's currently used as a Query constructor.
data ClearedStatus = Uncleared | Pending | Cleared
data ClearedStatus = Unmarked | Pending | Cleared
deriving (Eq,Ord,Typeable,Data,Generic)
instance NFData ClearedStatus
instance Show ClearedStatus where -- custom show.. bad idea.. don't do it..
show Uncleared = ""
show Unmarked = ""
show Pending = "!"
show Cleared = "*"

View File

@ -293,8 +293,8 @@ tests_parseQueryTerm = [
"status:1" `gives` (Left $ Status Cleared)
"status:*" `gives` (Left $ Status Cleared)
"status:!" `gives` (Left $ Status Pending)
"status:0" `gives` (Left $ Status Uncleared)
"status:" `gives` (Left $ Status Uncleared)
"status:0" `gives` (Left $ Status Unmarked)
"status:" `gives` (Left $ Status Unmarked)
"real:1" `gives` (Left $ Real True)
"date:2008" `gives` (Left $ Date $ DateSpan (Just $ parsedate "2008/01/01") (Just $ parsedate "2009/01/01"))
"date:from 2012/5/17" `gives` (Left $ Date $ DateSpan (Just $ parsedate "2012/05/17") Nothing)
@ -367,7 +367,7 @@ parseTag s | "=" `T.isInfixOf` s = (T.unpack n, Just $ tail $ T.unpack v)
parseStatus :: T.Text -> Either String ClearedStatus
parseStatus s | s `elem` ["*","1"] = Right Cleared
| s `elem` ["!"] = Right Pending
| s `elem` ["","0"] = Right Uncleared
| s `elem` ["","0"] = Right Unmarked
| otherwise = Left $ "could not parse "++show s++" as a status (should be *, ! or empty)"
-- | Parse the boolean value part of a "status:" query. "1" means true,
@ -695,12 +695,12 @@ tests_matchesPosting = [
(Status Cleared) `matchesPosting` nullposting{pstatus=Cleared}
assertBool "negative match on cleared posting status" $
not $ (Not $ Status Cleared) `matchesPosting` nullposting{pstatus=Cleared}
assertBool "positive match on uncleared posting status" $
(Status Uncleared) `matchesPosting` nullposting{pstatus=Uncleared}
assertBool "negative match on unclered posting status" $
not $ (Not $ Status Uncleared) `matchesPosting` nullposting{pstatus=Uncleared}
assertBool "positive match on unmarked posting status" $
(Status Unmarked) `matchesPosting` nullposting{pstatus=Unmarked}
assertBool "negative match on unmarked posting status" $
not $ (Not $ Status Unmarked) `matchesPosting` nullposting{pstatus=Unmarked}
assertBool "positive match on true posting status acquired from transaction" $
(Status Cleared) `matchesPosting` nullposting{pstatus=Uncleared,ptransaction=Just nulltransaction{tstatus=Cleared}}
(Status Cleared) `matchesPosting` nullposting{pstatus=Unmarked,ptransaction=Just nulltransaction{tstatus=Cleared}}
assertBool "real:1 on real posting" $ (Real True) `matchesPosting` nullposting{ptype=RegularPosting}
assertBool "real:1 on virtual posting fails" $ not $ (Real True) `matchesPosting` nullposting{ptype=VirtualPosting}
assertBool "real:1 on balanced virtual posting fails" $ not $ (Real True) `matchesPosting` nullposting{ptype=BalancedVirtualPosting}

View File

@ -174,7 +174,7 @@ statusp =
choice'
[ many spacenonewline >> char '*' >> return Cleared
, many spacenonewline >> char '!' >> return Pending
, return Uncleared
, return Unmarked
]
<?> "cleared status"

View File

@ -627,7 +627,7 @@ transactionFromCsvRecord sourcepos rules record = t
]
status =
case mfieldtemplate "status" of
Nothing -> Uncleared
Nothing -> Unmarked
Just str -> either statuserror id .
runParser (statusp <* eof) "" .
T.pack $ render str

View File

@ -470,7 +470,7 @@ test_transactionp = do
nulltransaction{
tdate=parsedate "2012/05/14",
tdate2=Just $ parsedate "2012/05/15",
tstatus=Uncleared,
tstatus=Unmarked,
tcode="code",
tdescription="desc",
tcomment=" tcomment1\n tcomment2\n ttag1: val1\n",

View File

@ -407,7 +407,7 @@ Right samplejournal2 =
tsourcepos=nullsourcepos,
tdate=parsedate "2008/01/01",
tdate2=Just $ parsedate "2009/01/01",
tstatus=Uncleared,
tstatus=Unmarked,
tcode="",
tdescription="income",
tcomment="",

View File

@ -264,7 +264,7 @@ intervalFromRawOpts = lastDef NoInterval . catMaybes . map intervalfromrawopt
| otherwise = Nothing
-- | Get any cleared statuses to be matched, as specified by -C/--cleared,
-- -P/--pending, -U/--uncleared options. -UPC is equivalent to no flags,
-- -P/--pending, -U/--unmarked options. -UPC is equivalent to no flags,
-- so this returns a list of 0-2 unique statuses.
clearedStatusFromRawOpts :: RawOpts -> [ClearedStatus]
clearedStatusFromRawOpts = simplify . nub . sort . catMaybes . map clearedstatusfromrawopt
@ -272,7 +272,7 @@ clearedStatusFromRawOpts = simplify . nub . sort . catMaybes . map clearedstatus
clearedstatusfromrawopt (n,_)
| n == "cleared" = Just Cleared
| n == "pending" = Just Pending
| n == "uncleared" = Just Uncleared
| n == "unmarked" = Just Unmarked
| otherwise = Nothing
simplify l = if length l == 3 then [] else l -- TODO: (maxBound :: ClearedStatus) or something

View File

@ -192,17 +192,18 @@ separated from it by a space, indicating one of three statuses:
mark &nbsp; | status
:-----------|:-------------------
&nbsp; | uncleared (no mark)
&nbsp; | unmarked
`!` | pending
`*` | cleared
When reporting, you can filter by status with
the `-U/--uncleared`, `-P/--pending`, and `-C/--cleared` flags;
the `-U/--unmarked`, `-P/--pending`, and `-C/--cleared` flags;
or the `status:`, `status:!`, and `status:*` [queries](/manual.html#queries);
or the U, P, C keys in hledger-ui.
Note, in Ledger and in older versions of hledger, the "unmarked" state is called
"uncleared". As of hledger 1.3 we have renamed it to unmarked for clarity.
Note from hledger 1.3 onwards, -U/--uncleared matches the uncleared (unmarked) status only.
To replicate Ledger and old hledger's behaviour of also matching pending, combine -U and -P.
Status marks are optional, but can be helpful eg for reconciling with real-world accounts.

View File

@ -320,7 +320,7 @@ asHandle ui0@UIState{
VtyEvent (EvKey (KChar 'Z') []) -> scrollTop >> (continue $ regenerateScreens j d $ toggleEmpty ui)
VtyEvent (EvKey (KChar 'C') []) -> scrollTop >> (continue $ regenerateScreens j d $ toggleCleared ui)
VtyEvent (EvKey (KChar 'P') []) -> scrollTop >> (continue $ regenerateScreens j d $ togglePending ui)
VtyEvent (EvKey (KChar 'U') []) -> scrollTop >> (continue $ regenerateScreens j d $ toggleUncleared ui)
VtyEvent (EvKey (KChar 'U') []) -> scrollTop >> (continue $ regenerateScreens j d $ toggleUnmarked ui)
VtyEvent (EvKey (KChar 'R') []) -> scrollTop >> (continue $ regenerateScreens j d $ toggleReal ui)
VtyEvent (EvKey (KDown) [MShift]) -> continue $ regenerateScreens j d $ shrinkReportPeriod d ui
VtyEvent (EvKey (KUp) [MShift]) -> continue $ regenerateScreens j d $ growReportPeriod d ui

View File

@ -290,7 +290,7 @@ rsHandle ui@UIState{
VtyEvent (EvKey (KChar 'Z') []) -> scrollTop >> (continue $ regenerateScreens j d $ toggleEmpty ui)
VtyEvent (EvKey (KChar 'C') []) -> scrollTop >> (continue $ regenerateScreens j d $ toggleCleared ui)
VtyEvent (EvKey (KChar 'P') []) -> scrollTop >> (continue $ regenerateScreens j d $ togglePending ui)
VtyEvent (EvKey (KChar 'U') []) -> scrollTop >> (continue $ regenerateScreens j d $ toggleUncleared ui)
VtyEvent (EvKey (KChar 'U') []) -> scrollTop >> (continue $ regenerateScreens j d $ toggleUnmarked ui)
VtyEvent (EvKey (KChar 'R') []) -> scrollTop >> (continue $ regenerateScreens j d $ toggleReal ui)
VtyEvent (EvKey (KChar '/') []) -> (continue $ regenerateScreens j d $ showMinibuffer ui)
VtyEvent (EvKey (KDown) [MShift]) -> continue $ regenerateScreens j d $ shrinkReportPeriod d ui

View File

@ -27,10 +27,10 @@ togglePending :: UIState -> UIState
togglePending ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
ui{aopts=uopts{cliopts_=copts{reportopts_=reportOptsToggleStatus Pending ropts}}}
-- | Toggle between showing only uncleared items or all items.
toggleUncleared :: UIState -> UIState
toggleUncleared ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
ui{aopts=uopts{cliopts_=copts{reportopts_=reportOptsToggleStatus Uncleared ropts}}}
-- | Toggle between showing only unmarked items or all items.
toggleUnmarked :: UIState -> UIState
toggleUnmarked ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
ui{aopts=uopts{cliopts_=copts{reportopts_=reportOptsToggleStatus Unmarked ropts}}}
reportOptsToggleStatus s ropts
| clearedstatus_ ropts == [s] = ropts{clearedstatus_=[]}

View File

@ -32,7 +32,7 @@ uiShowClearedStatus = map showstatus
where
showstatus Cleared = "cleared"
showstatus Pending = "pending"
showstatus Uncleared = "uncleared"
showstatus Unmarked = "unmarked"
-- | Draw the help dialog, called when help mode is active.
helpDialog :: Widget Name
@ -78,7 +78,7 @@ helpDialog =
,renderKey ("/", "set a filter query")
,renderKey ("C", "toggle cleared/all")
,renderKey ("P", "toggle pending/all")
,renderKey ("U", "toggle uncleared/all")
,renderKey ("U", "toggle unmarked/all")
,renderKey ("R", "toggle real/all")
,renderKey ("Z", "toggle nonzero/all")
,renderKey ("DEL/BS", "remove filters")

View File

@ -344,7 +344,7 @@ journal7 = nulljournal {jtxns =
tsourcepos=nullsourcepos,
tdate=parsedate "2007/01/01",
tdate2=Nothing,
tstatus=Uncleared,
tstatus=Unmarked,
tcode="*",
tdescription="opening balance",
tcomment="",
@ -361,7 +361,7 @@ journal7 = nulljournal {jtxns =
tsourcepos=nullsourcepos,
tdate=parsedate "2007/02/01",
tdate2=Nothing,
tstatus=Uncleared,
tstatus=Unmarked,
tcode="*",
tdescription="ayres suites",
tcomment="",
@ -378,7 +378,7 @@ journal7 = nulljournal {jtxns =
tsourcepos=nullsourcepos,
tdate=parsedate "2007/01/02",
tdate2=Nothing,
tstatus=Uncleared,
tstatus=Unmarked,
tcode="*",
tdescription="auto transfer to savings",
tcomment="",
@ -395,7 +395,7 @@ journal7 = nulljournal {jtxns =
tsourcepos=nullsourcepos,
tdate=parsedate "2007/01/03",
tdate2=Nothing,
tstatus=Uncleared,
tstatus=Unmarked,
tcode="*",
tdescription="poquito mas",
tcomment="",
@ -412,7 +412,7 @@ journal7 = nulljournal {jtxns =
tsourcepos=nullsourcepos,
tdate=parsedate "2007/01/03",
tdate2=Nothing,
tstatus=Uncleared,
tstatus=Unmarked,
tcode="*",
tdescription="verizon",
tcomment="",
@ -429,7 +429,7 @@ journal7 = nulljournal {jtxns =
tsourcepos=nullsourcepos,
tdate=parsedate "2007/01/03",
tdate2=Nothing,
tstatus=Uncleared,
tstatus=Unmarked,
tcode="*",
tdescription="discover",
tcomment="",

View File

@ -153,7 +153,7 @@ transactionWizard es@EntryState{..} = do
balancedPostingsWizard = do
ps <- postingsWizard es2{esPostings=[]}
let t = nulltransaction{tdate=date
,tstatus=Uncleared
,tstatus=Unmarked
,tcode=code
,tdescription=desc
,tcomment=comment

View File

@ -141,7 +141,7 @@ reportflags = [
,flagNone ["cleared","C"] (setboolopt "cleared") "include only cleared postings/txns"
,flagNone ["pending","P"] (setboolopt "pending") "include only pending postings/txns"
,flagNone ["uncleared","U"] (setboolopt "uncleared") "include only unmarked postings/txns"
,flagNone ["unmarked","U"] (setboolopt "unmarked") "include only unmarked 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"
,flagNone ["empty","E"] (setboolopt "empty") "show items with zero amount, normally hidden"

View File

@ -74,7 +74,7 @@ showLedgerStats l today span =
,("Accounts", printf "%d (depth %d)" acctnum acctdepth)
,("Commodities", printf "%s (%s)" (show $ length cs) (T.intercalate ", " cs))
-- Transactions this month : %(monthtxns)s (last month in the same period: %(lastmonthtxns)s)
-- Uncleared transactions : %(uncleared)s
-- Unmarked transactions : %(unmarked)s
-- Days since reconciliation : %(reconcileelapsed)s
-- Days since last transaction : %(recentelapsed)s
]

View File

@ -178,7 +178,11 @@ or [balance assertions](manual.html#assertions-and-ordering).
With hledger you can also specify start and/or end dates with a query argument,
date:START-END, which probably doesn't combine perfectly with the options.
- in hledger version 1.3 onward, -U/--uncleared does not match pending things.
- in hledger version 1.3 onward,
the "uncleared" status has been renamed to "unmarked",
it is matched by the -U/--unmarked flag.
Also, the --unmarked/--pending/--cleared flags can be combined,
so eg -UP matches unmarked and pending, similar to Ledger's --uncleared flag.
(#564)
- hledger's -P flag is short for --pending. Ledger uses it for grouping by payee.

View File

@ -3,7 +3,7 @@
# 1. transactions and postings have status marks which are nothing, ! or *
hledger -fstatus.journal print
>>>
2017/01/01 uncleared
2017/01/01 unmarked
(a) 1
(b) 1
@ -46,26 +46,26 @@ hledger -fstatus.journal print --pending
>>>=0
# 5. --uncleared matches everything but *
hledger -fstatus.journal print --uncleared
# 5. --unmarked matches no status mark only
hledger -fstatus.journal print --unmarked
>>>
2017/01/01 uncleared
2017/01/01 unmarked
(a) 1
(b) 1
>>>=0
# 6. these flags can be combined
hledger -fstatus.journal register --uncleared --pending
hledger -fstatus.journal register --unmarked --pending
>>>
2017/01/01 uncleared (a) 1 1
2017/01/01 unmarked (a) 1 1
(b) 1 2
2017/01/02 pending (a) 1 3
(b) 1 4
>>>= 0
# 7. these flags work with other commands
hledger -fstatus.journal balance -N --uncleared
hledger -fstatus.journal balance -N --unmarked
>>>
1 a
1 b
@ -94,7 +94,7 @@ hledger -fstatus.journal print status:!
# 10. status: matches unmarked only
hledger -fstatus.journal print status:
>>>
2017/01/01 uncleared
2017/01/01 unmarked
(a) 1
(b) 1
@ -103,7 +103,7 @@ hledger -fstatus.journal print status:
# 11. multiple status: queries are OR'd
hledger -fstatus.journal print status: status:!
>>>
2017/01/01 uncleared
2017/01/01 unmarked
(a) 1
(b) 1