mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-08 07:09:28 +03:00
ui: --watch: track date only when a standard period is in effect
This commit is contained in:
parent
6aeaee17f5
commit
3c4cb4eeeb
@ -118,6 +118,17 @@ isLastDayOfMonth y m d =
|
||||
12 -> d==31
|
||||
_ -> False
|
||||
|
||||
-- | Is this period a "standard" period, referencing a particular day, week, month, quarter, or year ?
|
||||
-- Periods of other durations, or infinite duration, or not starting on a standard period boundary, are not.
|
||||
isStandardPeriod = isStandardPeriod' . simplifyPeriod
|
||||
where
|
||||
isStandardPeriod' (DayPeriod _) = True
|
||||
isStandardPeriod' (WeekPeriod _) = True
|
||||
isStandardPeriod' (MonthPeriod _ _) = True
|
||||
isStandardPeriod' (QuarterPeriod _ _) = True
|
||||
isStandardPeriod' (YearPeriod _) = True
|
||||
isStandardPeriod' _ = False
|
||||
|
||||
-- | Render a period as a compact display string suitable for user output.
|
||||
--
|
||||
-- >>> showPeriod (WeekPeriod (fromGregorian 2016 7 25))
|
||||
@ -143,7 +154,7 @@ periodEnd p = me
|
||||
where
|
||||
DateSpan _ me = periodAsDateSpan p
|
||||
|
||||
-- | Move a standard period (day, week, month etc.) to the following period of same duration.
|
||||
-- | Move a standard period to the following period of same duration.
|
||||
-- Non-standard periods are unaffected.
|
||||
periodNext :: Period -> Period
|
||||
periodNext (DayPeriod b) = DayPeriod (addDays 1 b)
|
||||
@ -155,7 +166,7 @@ periodNext (QuarterPeriod y q) = QuarterPeriod y (q+1)
|
||||
periodNext (YearPeriod y) = YearPeriod (y+1)
|
||||
periodNext p = p
|
||||
|
||||
-- | Move a standard period (day, week, month etc.) to the preceding period of same duration.
|
||||
-- | Move a standard period to the preceding period of same duration.
|
||||
-- Non-standard periods are unaffected.
|
||||
periodPrevious :: Period -> Period
|
||||
periodPrevious (DayPeriod b) = DayPeriod (addDays (-1) b)
|
||||
|
@ -291,8 +291,10 @@ asHandle ui0@UIState{
|
||||
VtyEvent (EvKey (KChar c) []) | c `elem` ['?'] -> continue $ setMode Help ui
|
||||
-- XXX AppEvents currently handled only in Normal mode
|
||||
-- XXX be sure we don't leave unconsumed events piling up
|
||||
AppEvent (DateChange old _) | periodContainsDate (reportPeriod ui) old ->
|
||||
AppEvent (DateChange old _) | isStandardPeriod p && p `periodContainsDate` old ->
|
||||
continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
|
||||
where
|
||||
p = reportPeriod ui
|
||||
e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] ->
|
||||
liftIO (uiReloadJournal copts d ui) >>= continue
|
||||
VtyEvent (EvKey (KChar 'I') []) -> continue $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)
|
||||
|
@ -267,8 +267,10 @@ rsHandle ui@UIState{
|
||||
VtyEvent (EvKey (KChar 'q') []) -> halt ui
|
||||
VtyEvent (EvKey KEsc []) -> continue $ resetScreens d ui
|
||||
VtyEvent (EvKey (KChar c) []) | c `elem` ['?'] -> continue $ setMode Help ui
|
||||
AppEvent (DateChange old _) | periodContainsDate (reportPeriod ui) old ->
|
||||
AppEvent (DateChange old _) | isStandardPeriod p && p `periodContainsDate` old ->
|
||||
continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
|
||||
where
|
||||
p = reportPeriod ui
|
||||
e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] ->
|
||||
liftIO (uiReloadJournal copts d ui) >>= continue
|
||||
VtyEvent (EvKey (KChar 'I') []) -> continue $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)
|
||||
|
@ -129,8 +129,10 @@ tsHandle ui@UIState{aScreen=s@TransactionScreen{tsTransaction=(i,t)
|
||||
VtyEvent (EvKey (KChar 'E') []) -> suspendAndResume $ void (runEditor pos f) >> uiReloadJournalIfChanged copts d j ui
|
||||
where
|
||||
(pos,f) = let GenericSourcePos f l c = tsourcepos t in (Just (l, Just c),f)
|
||||
AppEvent (DateChange old _) | periodContainsDate (reportPeriod ui) old ->
|
||||
AppEvent (DateChange old _) | isStandardPeriod p && p `periodContainsDate` old ->
|
||||
continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
|
||||
where
|
||||
p = reportPeriod ui
|
||||
e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] -> do
|
||||
d <- liftIO getCurrentDay
|
||||
ej <- liftIO $ journalReload copts
|
||||
|
Loading…
Reference in New Issue
Block a user