From e1199416486e8a22ede787be1c268784a9008709 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Thu, 15 Jun 2017 16:25:37 -0700 Subject: [PATCH] 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. --- bin/hledger-check.hs | 20 +++++----- doc/lib.m4 | 2 +- examples/status.journal | 2 +- hledger-lib/Hledger/Data/Journal.hs | 8 ++-- hledger-lib/Hledger/Data/Posting.hs | 15 +++---- hledger-lib/Hledger/Data/Transaction.hs | 42 ++++++++++---------- hledger-lib/Hledger/Data/Types.hs | 6 +-- hledger-lib/Hledger/Query.hs | 16 ++++---- hledger-lib/Hledger/Read/Common.hs | 2 +- hledger-lib/Hledger/Read/CsvReader.hs | 2 +- hledger-lib/Hledger/Read/JournalReader.hs | 2 +- hledger-lib/Hledger/Reports/BalanceReport.hs | 2 +- hledger-lib/Hledger/Reports/ReportOptions.hs | 4 +- hledger-lib/doc/hledger_journal.5.m4.md | 7 ++-- hledger-ui/Hledger/UI/AccountsScreen.hs | 2 +- hledger-ui/Hledger/UI/RegisterScreen.hs | 2 +- hledger-ui/Hledger/UI/UIState.hs | 8 ++-- hledger-ui/Hledger/UI/UIUtils.hs | 4 +- hledger/Hledger/Cli.hs | 12 +++--- hledger/Hledger/Cli/Add.hs | 2 +- hledger/Hledger/Cli/CliOptions.hs | 2 +- hledger/Hledger/Cli/Stats.hs | 2 +- site/faq.md | 6 ++- tests/journal/status.test | 18 ++++----- 24 files changed, 97 insertions(+), 91 deletions(-) diff --git a/bin/hledger-check.hs b/bin/hledger-check.hs index 82bbc0ea5..df8f7e220 100755 --- a/bin/hledger-check.hs +++ b/bin/hledger-check.hs @@ -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 diff --git a/doc/lib.m4 b/doc/lib.m4 index cd7b833b9..dd55794da 100644 --- a/doc/lib.m4 +++ b/doc/lib.m4 @@ -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` diff --git a/examples/status.journal b/examples/status.journal index 06c821230..3347cd038 100644 --- a/examples/status.journal +++ b/examples/status.journal @@ -1,4 +1,4 @@ -1/1 uncleared +1/1 unmarked (a) 1 (b) 1 diff --git a/hledger-lib/Hledger/Data/Journal.hs b/hledger-lib/Hledger/Data/Journal.hs index 82a2af098..727c4df30 100644 --- a/hledger-lib/Hledger/Data/Journal.hs +++ b/hledger-lib/Hledger/Data/Journal.hs @@ -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="", diff --git a/hledger-lib/Hledger/Data/Posting.hs b/hledger-lib/Hledger/Data/Posting.hs index 7758b5c5f..1a6bca4b1 100644 --- a/hledger-lib/Hledger/Data/Posting.hs +++ b/hledger-lib/Hledger/Data/Posting.hs @@ -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. diff --git a/hledger-lib/Hledger/Data/Transaction.hs b/hledger-lib/Hledger/Data/Transaction.hs index 68b8f4acd..7c75a1dac 100644 --- a/hledger-lib/Hledger/Data/Transaction.hs +++ b/hledger-lib/Hledger/Data/Transaction.hs @@ -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} diff --git a/hledger-lib/Hledger/Data/Types.hs b/hledger-lib/Hledger/Data/Types.hs index 4ab2a2ac0..db921806e 100644 --- a/hledger-lib/Hledger/Data/Types.hs +++ b/hledger-lib/Hledger/Data/Types.hs @@ -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 = "*" diff --git a/hledger-lib/Hledger/Query.hs b/hledger-lib/Hledger/Query.hs index d57081431..9cc09b990 100644 --- a/hledger-lib/Hledger/Query.hs +++ b/hledger-lib/Hledger/Query.hs @@ -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} diff --git a/hledger-lib/Hledger/Read/Common.hs b/hledger-lib/Hledger/Read/Common.hs index e0d1121a6..0cf787556 100644 --- a/hledger-lib/Hledger/Read/Common.hs +++ b/hledger-lib/Hledger/Read/Common.hs @@ -174,7 +174,7 @@ statusp = choice' [ many spacenonewline >> char '*' >> return Cleared , many spacenonewline >> char '!' >> return Pending - , return Uncleared + , return Unmarked ] "cleared status" diff --git a/hledger-lib/Hledger/Read/CsvReader.hs b/hledger-lib/Hledger/Read/CsvReader.hs index c3accaac5..b76fa7fe7 100644 --- a/hledger-lib/Hledger/Read/CsvReader.hs +++ b/hledger-lib/Hledger/Read/CsvReader.hs @@ -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 diff --git a/hledger-lib/Hledger/Read/JournalReader.hs b/hledger-lib/Hledger/Read/JournalReader.hs index 86865e15e..f20b2d3ad 100644 --- a/hledger-lib/Hledger/Read/JournalReader.hs +++ b/hledger-lib/Hledger/Read/JournalReader.hs @@ -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", diff --git a/hledger-lib/Hledger/Reports/BalanceReport.hs b/hledger-lib/Hledger/Reports/BalanceReport.hs index 5869472aa..7e65e866a 100644 --- a/hledger-lib/Hledger/Reports/BalanceReport.hs +++ b/hledger-lib/Hledger/Reports/BalanceReport.hs @@ -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="", diff --git a/hledger-lib/Hledger/Reports/ReportOptions.hs b/hledger-lib/Hledger/Reports/ReportOptions.hs index 5077f3344..b912a3bb3 100644 --- a/hledger-lib/Hledger/Reports/ReportOptions.hs +++ b/hledger-lib/Hledger/Reports/ReportOptions.hs @@ -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 diff --git a/hledger-lib/doc/hledger_journal.5.m4.md b/hledger-lib/doc/hledger_journal.5.m4.md index c2d958cf3..518c6ce18 100644 --- a/hledger-lib/doc/hledger_journal.5.m4.md +++ b/hledger-lib/doc/hledger_journal.5.m4.md @@ -192,17 +192,18 @@ separated from it by a space, indicating one of three statuses: mark   | status :-----------|:------------------- -  | uncleared (no mark) +  | 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. diff --git a/hledger-ui/Hledger/UI/AccountsScreen.hs b/hledger-ui/Hledger/UI/AccountsScreen.hs index 86f362467..5e1863dc0 100644 --- a/hledger-ui/Hledger/UI/AccountsScreen.hs +++ b/hledger-ui/Hledger/UI/AccountsScreen.hs @@ -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 diff --git a/hledger-ui/Hledger/UI/RegisterScreen.hs b/hledger-ui/Hledger/UI/RegisterScreen.hs index d79039c01..42f671e07 100644 --- a/hledger-ui/Hledger/UI/RegisterScreen.hs +++ b/hledger-ui/Hledger/UI/RegisterScreen.hs @@ -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 diff --git a/hledger-ui/Hledger/UI/UIState.hs b/hledger-ui/Hledger/UI/UIState.hs index 5a7b7d5f1..9962ab84c 100644 --- a/hledger-ui/Hledger/UI/UIState.hs +++ b/hledger-ui/Hledger/UI/UIState.hs @@ -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_=[]} diff --git a/hledger-ui/Hledger/UI/UIUtils.hs b/hledger-ui/Hledger/UI/UIUtils.hs index 36d8ad423..13bfef9fe 100644 --- a/hledger-ui/Hledger/UI/UIUtils.hs +++ b/hledger-ui/Hledger/UI/UIUtils.hs @@ -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") diff --git a/hledger/Hledger/Cli.hs b/hledger/Hledger/Cli.hs index 6469a85e0..8d8cd880e 100644 --- a/hledger/Hledger/Cli.hs +++ b/hledger/Hledger/Cli.hs @@ -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="", diff --git a/hledger/Hledger/Cli/Add.hs b/hledger/Hledger/Cli/Add.hs index 3a0ff9f6b..01317d5c3 100644 --- a/hledger/Hledger/Cli/Add.hs +++ b/hledger/Hledger/Cli/Add.hs @@ -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 diff --git a/hledger/Hledger/Cli/CliOptions.hs b/hledger/Hledger/Cli/CliOptions.hs index 100249ea2..348ca71bf 100644 --- a/hledger/Hledger/Cli/CliOptions.hs +++ b/hledger/Hledger/Cli/CliOptions.hs @@ -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" diff --git a/hledger/Hledger/Cli/Stats.hs b/hledger/Hledger/Cli/Stats.hs index 8e642dc8b..24145e78b 100644 --- a/hledger/Hledger/Cli/Stats.hs +++ b/hledger/Hledger/Cli/Stats.hs @@ -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 ] diff --git a/site/faq.md b/site/faq.md index 8e017d622..c658f4fcf 100644 --- a/site/faq.md +++ b/site/faq.md @@ -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. diff --git a/tests/journal/status.test b/tests/journal/status.test index dc141b260..6b4b74d34 100644 --- a/tests/journal/status.test +++ b/tests/journal/status.test @@ -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