ledger 2.6-style account name eliding
This commit is contained in:
parent
7dea3bc201
commit
529393ae49
@ -75,3 +75,27 @@ accountNameTreeFrom accts =
|
|||||||
accountsFrom as = [Node a (accountsFrom $ subs a) | a <- as]
|
accountsFrom as = [Node a (accountsFrom $ subs a) | a <- as]
|
||||||
subs = (subAccountNamesFrom accts)
|
subs = (subAccountNamesFrom accts)
|
||||||
|
|
||||||
|
-- | Elide an account name to fit in the specified width.
|
||||||
|
-- From the ledger 2.6 news:
|
||||||
|
--
|
||||||
|
-- @
|
||||||
|
-- What Ledger now does is that if an account name is too long, it will
|
||||||
|
-- start abbreviating the first parts of the account name down to two
|
||||||
|
-- letters in length. If this results in a string that is still too
|
||||||
|
-- long, the front will be elided -- not the end. For example:
|
||||||
|
--
|
||||||
|
-- Expenses:Cash ; OK, not too long
|
||||||
|
-- Ex:Wednesday:Cash ; "Expenses" was abbreviated to fit
|
||||||
|
-- Ex:We:Afternoon:Cash ; "Expenses" and "Wednesday" abbreviated
|
||||||
|
-- ; Expenses:Wednesday:Afternoon:Lunch:Snack:Candy:Chocolate:Cash
|
||||||
|
-- ..:Af:Lu:Sn:Ca:Ch:Cash ; Abbreviated and elided!
|
||||||
|
-- @
|
||||||
|
elideAccountName :: Int -> AccountName -> AccountName
|
||||||
|
elideAccountName width s =
|
||||||
|
elideLeft width $ accountNameFromComponents $ elideparts width [] $ accountNameComponents s
|
||||||
|
where
|
||||||
|
elideparts :: Int -> [String] -> [String] -> [String]
|
||||||
|
elideparts width done ss
|
||||||
|
| (length $ accountNameFromComponents $ done++ss) <= width = done++ss
|
||||||
|
| length ss > 1 = elideparts width (done++[take 2 $ head ss]) (tail ss)
|
||||||
|
| otherwise = done++ss
|
||||||
|
|||||||
@ -10,6 +10,7 @@ where
|
|||||||
import Ledger.Utils
|
import Ledger.Utils
|
||||||
import Ledger.Types
|
import Ledger.Types
|
||||||
import Ledger.Amount
|
import Ledger.Amount
|
||||||
|
import Ledger.AccountName
|
||||||
|
|
||||||
|
|
||||||
instance Show RawTransaction where show = showLedgerTransaction
|
instance Show RawTransaction where show = showLedgerTransaction
|
||||||
@ -17,14 +18,9 @@ instance Show RawTransaction where show = showLedgerTransaction
|
|||||||
showLedgerTransaction :: RawTransaction -> String
|
showLedgerTransaction :: RawTransaction -> String
|
||||||
showLedgerTransaction t = (showaccountname $ taccount t) ++ " " ++ (showamount $ tamount t)
|
showLedgerTransaction t = (showaccountname $ taccount t) ++ " " ++ (showamount $ tamount t)
|
||||||
where
|
where
|
||||||
showaccountname = printf "%-22s" . elideRight 22
|
showaccountname = printf "%-22s" . elideAccountName 22
|
||||||
showamount = printf "%12s" . showAmountOrZero
|
showamount = printf "%12s" . showAmountOrZero
|
||||||
|
|
||||||
elideRight width s =
|
|
||||||
case length s > width of
|
|
||||||
True -> take (width - 2) s ++ ".."
|
|
||||||
False -> s
|
|
||||||
|
|
||||||
autofillTransactions :: [RawTransaction] -> [RawTransaction]
|
autofillTransactions :: [RawTransaction] -> [RawTransaction]
|
||||||
autofillTransactions ts =
|
autofillTransactions ts =
|
||||||
case (length blanks) of
|
case (length blanks) of
|
||||||
|
|||||||
@ -15,8 +15,7 @@ import Ledger.Amount
|
|||||||
|
|
||||||
|
|
||||||
instance Show Transaction where
|
instance Show Transaction where
|
||||||
show (Transaction eno d desc a amt) =
|
show (Transaction eno d desc a amt) = unwords [d,desc,a,show amt]
|
||||||
unwords [d,desc,a,show amt]
|
|
||||||
|
|
||||||
-- | Convert a 'Entry' to two or more 'Transaction's. An id number
|
-- | Convert a 'Entry' to two or more 'Transaction's. An id number
|
||||||
-- is attached to the transactions to preserve their grouping - it should
|
-- is attached to the transactions to preserve their grouping - it should
|
||||||
|
|||||||
@ -40,6 +40,16 @@ import Text.Regex
|
|||||||
import Text.ParserCombinators.Parsec (parse)
|
import Text.ParserCombinators.Parsec (parse)
|
||||||
|
|
||||||
|
|
||||||
|
elideLeft width s =
|
||||||
|
case length s > width of
|
||||||
|
True -> ".." ++ (reverse $ take (width - 2) $ reverse s)
|
||||||
|
False -> s
|
||||||
|
|
||||||
|
elideRight width s =
|
||||||
|
case length s > width of
|
||||||
|
True -> take (width - 2) s ++ ".."
|
||||||
|
False -> s
|
||||||
|
|
||||||
-- regexps
|
-- regexps
|
||||||
|
|
||||||
instance Show Regex where show r = "a Regex"
|
instance Show Regex where show r = "a Regex"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user