ui: probably more effective redraw when pressing Ctrl-l

Now uses vtyRefresh.
This commit is contained in:
Simon Michael 2019-01-18 16:25:26 -08:00
parent faa5b0fba7
commit bb5d6c47c6
3 changed files with 11 additions and 3 deletions

View File

@ -337,7 +337,7 @@ asHandle ui0@UIState{
VtyEvent (EvKey (KChar '/') []) -> continue $ regenerateScreens j d $ showMinibuffer ui
VtyEvent (EvKey k []) | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui)
VtyEvent e | e `elem` moveLeftEvents -> continue $ popScreen ui
VtyEvent (EvKey (KChar 'l') [MCtrl]) -> scrollSelectionToMiddle _asList >> invalidateCache >> continue ui
VtyEvent (EvKey (KChar 'l') [MCtrl]) -> scrollSelectionToMiddle _asList >> redraw ui
-- enter register screen for selected account (if there is one),
-- centering its selected transaction if possible

View File

@ -333,7 +333,7 @@ rsHandle ui@UIState{
VtyEvent (EvKey (KLeft) [MShift]) -> continue $ regenerateScreens j d $ previousReportPeriod journalspan ui
VtyEvent (EvKey k []) | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui)
VtyEvent e | e `elem` moveLeftEvents -> continue $ popScreen ui
VtyEvent (EvKey (KChar 'l') [MCtrl]) -> scrollSelectionToMiddle rsList >> invalidateCache >> continue ui
VtyEvent (EvKey (KChar 'l') [MCtrl]) -> scrollSelectionToMiddle rsList >> redraw ui
-- enter transaction screen for selected transaction
VtyEvent e | e `elem` moveRightEvents -> do

View File

@ -21,6 +21,7 @@ module Hledger.UI.UIUtils (
,renderToggle
,replaceHiddenAccountsNameWith
,scrollSelectionToMiddle
,redraw
)
where
@ -36,7 +37,10 @@ import Data.Maybe
#if !(MIN_VERSION_base(4,11,0))
import Data.Monoid
#endif
import Graphics.Vty (Event(..),Key(..),Modifier(..),Color,Attr,currentAttr)
import Graphics.Vty
(Event(..),Key(..),Modifier(..),Vty(..),Color,Attr,currentAttr,refresh
-- ,Output(displayBounds,mkDisplayContext),DisplayContext(..)
)
import Lens.Micro.Platform
import System.Environment
@ -47,6 +51,10 @@ import Hledger.UI.UITypes
import Hledger.UI.UIState
-- | Tell vty to redraw the whole screen, and continue.
redraw :: s -> EventM a (Next s)
redraw ui = getVtyHandle >>= liftIO . refresh >> continue ui
-- ui
-- | Wrap a widget in the default hledger-ui screen layout.