ui: add vi-style movement keys, use ? for help (#357)
This commit is contained in:
parent
529d55dd54
commit
dbeb4e3020
@ -186,7 +186,7 @@ asDraw UIState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ropts}}
|
||||
Minibuffer ed -> minibuffer ed
|
||||
_ -> quickhelp
|
||||
quickhelp = borderKeysStr [
|
||||
("h", "help")
|
||||
("?", "help")
|
||||
,("right", "register")
|
||||
,("F", "flat?")
|
||||
,("-+0123456789", "depth")
|
||||
@ -265,7 +265,7 @@ asHandle ui0@UIState{
|
||||
EvKey (KChar 'q') [] -> halt ui
|
||||
-- EvKey (KChar 'l') [MCtrl] -> do
|
||||
EvKey KEsc [] -> continue $ resetScreens d ui
|
||||
EvKey (KChar c) [] | c `elem` ['h','?'] -> continue $ setMode Help ui
|
||||
EvKey (KChar c) [] | c `elem` ['?'] -> continue $ setMode Help ui
|
||||
EvKey (KChar 'g') [] -> liftIO (uiReloadJournalIfChanged copts d j ui) >>= continue
|
||||
EvKey (KChar 'a') [] -> suspendAndResume $ clearScreen >> setCursorPosition 0 0 >> add copts j >> uiReloadJournalIfChanged copts d j ui
|
||||
EvKey (KChar 'E') [] -> suspendAndResume $ void (runEditor endPos (journalFilePath j)) >> uiReloadJournalIfChanged copts d j ui
|
||||
@ -289,14 +289,18 @@ asHandle ui0@UIState{
|
||||
EvKey (KChar 'R') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleReal ui)
|
||||
EvKey (KChar '/') [] -> continue $ regenerateScreens j d $ showMinibuffer ui
|
||||
EvKey k [] | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui)
|
||||
EvKey (KLeft) [] -> continue $ popScreen ui
|
||||
EvKey k [] | k `elem` [KRight, KEnter] -> scrollTopRegister >> continue (screenEnter d scr ui)
|
||||
EvKey k [] | k `elem` [KLeft, KChar 'h'] -> continue $ popScreen ui
|
||||
EvKey k [] | k `elem` [KRight, KChar 'l', KEnter] -> scrollTopRegister >> continue (screenEnter d scr ui)
|
||||
where
|
||||
scr = rsSetAccount selacct registerScreen
|
||||
|
||||
-- fall through to the list's event handler (handles up/down)
|
||||
ev -> do
|
||||
newitems <- handleEvent ev (scr ^. asList)
|
||||
let ev' = case ev of
|
||||
EvKey (KChar 'k') [] -> EvKey (KUp) []
|
||||
EvKey (KChar 'j') [] -> EvKey (KDown) []
|
||||
_ -> ev
|
||||
newitems <- handleEvent ev' (scr ^. asList)
|
||||
continue $ ui{aScreen=scr & asList .~ newitems
|
||||
& asSelectedAccount .~ selacct
|
||||
}
|
||||
|
||||
@ -186,7 +186,7 @@ rsDraw UIState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ropts}}
|
||||
Minibuffer ed -> minibuffer ed
|
||||
_ -> quickhelp
|
||||
quickhelp = borderKeysStr [
|
||||
("h", "help")
|
||||
("?", "help")
|
||||
,("left", "back")
|
||||
,("right", "transaction")
|
||||
,("/", "filter")
|
||||
@ -247,7 +247,7 @@ rsHandle ui@UIState{
|
||||
case ev of
|
||||
EvKey (KChar 'q') [] -> halt ui
|
||||
EvKey KEsc [] -> continue $ resetScreens d ui
|
||||
EvKey (KChar c) [] | c `elem` ['h','?'] -> continue $ setMode Help ui
|
||||
EvKey (KChar c) [] | c `elem` ['?'] -> continue $ setMode Help ui
|
||||
EvKey (KChar 'g') [] -> liftIO (uiReloadJournalIfChanged copts d j ui) >>= continue
|
||||
EvKey (KChar 'a') [] -> suspendAndResume $ clearScreen >> setCursorPosition 0 0 >> add copts j >> uiReloadJournalIfChanged copts d j ui
|
||||
EvKey (KChar 'E') [] -> suspendAndResume $ void (runEditor pos f) >> uiReloadJournalIfChanged copts d j ui
|
||||
@ -262,8 +262,8 @@ rsHandle ui@UIState{
|
||||
EvKey (KChar 'R') [] -> scrollTop >> (continue $ regenerateScreens j d $ toggleReal ui)
|
||||
EvKey (KChar '/') [] -> (continue $ regenerateScreens j d $ showMinibuffer ui)
|
||||
EvKey k [] | k `elem` [KBS, KDel] -> (continue $ regenerateScreens j d $ resetFilter ui)
|
||||
EvKey (KLeft) [] -> continue $ popScreen ui
|
||||
EvKey k [] | k `elem` [KRight, KEnter] -> do
|
||||
EvKey k [] | k `elem` [KLeft, KChar 'h'] -> continue $ popScreen ui
|
||||
EvKey k [] | k `elem` [KRight, KChar 'l', KEnter] -> do
|
||||
case listSelectedElement rsList of
|
||||
Just (_, RegisterScreenItem{rsItemTransaction=t}) ->
|
||||
let
|
||||
@ -276,7 +276,12 @@ rsHandle ui@UIState{
|
||||
,tsAccount=rsAccount} ui
|
||||
Nothing -> continue ui
|
||||
-- fall through to the list's event handler (handles [pg]up/down)
|
||||
ev -> do newitems <- handleEvent ev rsList
|
||||
ev -> do
|
||||
let ev' = case ev of
|
||||
EvKey (KChar 'k') [] -> EvKey (KUp) []
|
||||
EvKey (KChar 'j') [] -> EvKey (KDown) []
|
||||
_ -> ev
|
||||
newitems <- handleEvent ev' rsList
|
||||
continue ui{aScreen=s{rsList=newitems}}
|
||||
-- continue =<< handleEventLensed ui someLens ev
|
||||
where
|
||||
|
||||
@ -89,7 +89,7 @@ tsDraw UIState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ropts}}
|
||||
-- Minibuffer ed -> minibuffer ed
|
||||
_ -> quickhelp
|
||||
quickhelp = borderKeysStr [
|
||||
("h", "help")
|
||||
("?", "help")
|
||||
,("left", "back")
|
||||
,("up/down", "prev/next")
|
||||
--,("ESC", "cancel/top")
|
||||
@ -124,7 +124,7 @@ tsHandle ui@UIState{aScreen=s@TransactionScreen{tsTransaction=(i,t)
|
||||
case ev of
|
||||
EvKey (KChar 'q') [] -> halt ui
|
||||
EvKey KEsc [] -> continue $ resetScreens d ui
|
||||
EvKey (KChar c) [] | c `elem` ['h','?'] -> continue $ setMode Help ui
|
||||
EvKey (KChar c) [] | c `elem` ['?'] -> continue $ setMode Help ui
|
||||
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)
|
||||
@ -160,9 +160,9 @@ tsHandle ui@UIState{aScreen=s@TransactionScreen{tsTransaction=(i,t)
|
||||
-- EvKey (KChar 'E') [] -> continue $ regenerateScreens j d $ stToggleEmpty ui
|
||||
-- EvKey (KChar 'C') [] -> continue $ regenerateScreens j d $ stToggleCleared ui
|
||||
-- EvKey (KChar 'R') [] -> continue $ regenerateScreens j d $ stToggleReal ui
|
||||
EvKey KUp [] -> continue $ regenerateScreens j d ui{aScreen=s{tsTransaction=(iprev,tprev)}}
|
||||
EvKey KDown [] -> continue $ regenerateScreens j d ui{aScreen=s{tsTransaction=(inext,tnext)}}
|
||||
EvKey KLeft [] -> continue ui''
|
||||
EvKey k [] | k `elem` [KUp, KChar 'k'] -> continue $ regenerateScreens j d ui{aScreen=s{tsTransaction=(iprev,tprev)}}
|
||||
EvKey k [] | k `elem` [KDown, KChar 'j'] -> continue $ regenerateScreens j d ui{aScreen=s{tsTransaction=(inext,tnext)}}
|
||||
EvKey k [] | k `elem` [KLeft, KChar 'h'] -> continue ui''
|
||||
where
|
||||
ui'@UIState{aScreen=scr} = popScreen ui
|
||||
ui'' = ui'{aScreen=rsSelect (fromIntegral i) scr}
|
||||
|
||||
@ -34,25 +34,25 @@ helpDialog =
|
||||
Widget Fixed Fixed $ do
|
||||
c <- getContext
|
||||
render $
|
||||
renderDialog (dialog "help" (Just "Help (h/ESC to close)") Nothing (c^.availWidthL - 2)) $ -- (Just (0,[("ok",())]))
|
||||
renderDialog (dialog "help" (Just "Help (?/LEFT/ESC to close)") Nothing (c^.availWidthL - 2)) $ -- (Just (0,[("ok",())]))
|
||||
padTopBottom 1 $ padLeftRight 1 $
|
||||
vBox [
|
||||
hBox [
|
||||
padLeftRight 1 $
|
||||
vBox [
|
||||
str "MISC"
|
||||
,renderKey ("h", "toggle help")
|
||||
str "NAVIGATION"
|
||||
,renderKey ("UP/DOWN/k/j/PGUP/PGDN/HOME/END", "")
|
||||
,str " move selection"
|
||||
,renderKey ("RIGHT/l/ENTER", "drill down")
|
||||
,renderKey ("LEFT/h", "previous screen")
|
||||
,renderKey ("ESC", "cancel / reset")
|
||||
,str " "
|
||||
,str "MISC"
|
||||
,renderKey ("?", "toggle help")
|
||||
,renderKey ("a", "add transaction")
|
||||
,renderKey ("E", "open editor")
|
||||
,renderKey ("g", "reload data")
|
||||
,renderKey ("q", "quit")
|
||||
,str " "
|
||||
,str "NAVIGATION"
|
||||
,renderKey ("UP/DOWN/PGUP/PGDN/HOME/END", "")
|
||||
,str " move selection"
|
||||
,renderKey ("RIGHT/ENTER", "drill down")
|
||||
,renderKey ("LEFT", "previous screen")
|
||||
,renderKey ("ESC", "cancel / reset")
|
||||
]
|
||||
,padLeftRight 1 $
|
||||
vBox [
|
||||
@ -89,7 +89,7 @@ helpDialog =
|
||||
helpHandle :: UIState -> Event -> EventM (Next UIState)
|
||||
helpHandle ui ev =
|
||||
case ev of
|
||||
EvKey k [] | k `elem` [KEsc, KChar 'h', KChar '?'] -> continue $ setMode Normal ui
|
||||
EvKey k [] | k `elem` [KEsc, KLeft, KChar 'h', KChar '?'] -> continue $ setMode Normal ui
|
||||
EvKey (KChar 't') [] -> suspendAndResume $ runHelp >> return (setMode Normal ui)
|
||||
EvKey (KChar 'm') [] -> suspendAndResume $ runMan >> return (setMode Normal ui)
|
||||
EvKey (KChar 'i') [] -> suspendAndResume $ runInfo >> return (setMode Normal ui)
|
||||
|
||||
@ -217,15 +217,17 @@ be "TAG:multi:level:account:name".
|
||||
.RE
|
||||
.SH KEYS
|
||||
.PP
|
||||
\f[C]h\f[] shows a help dialog listing all keys.
|
||||
\f[C]?\f[] shows a help dialog listing all keys.
|
||||
(Some but not all of these also appear in the quick help at the bottom
|
||||
of each screen.) Press \f[C]h\f[] again (or \f[C]ESCAPE\f[]) to close
|
||||
it.
|
||||
of each screen.) Press \f[C]?\f[] again (or \f[C]ESCAPE\f[], or
|
||||
\f[C]LEFT\f[]) to close it.
|
||||
.PP
|
||||
The cursor keys navigate: \f[C]right\f[] (or \f[C]enter\f[]) goes
|
||||
deeper, \f[C]left\f[] returns to the previous screen,
|
||||
\f[C]up\f[]/\f[C]down\f[]/\f[C]page\ up\f[]/\f[C]page\ down\f[]/\f[C]home\f[]/\f[C]end\f[]
|
||||
move up and down through lists.
|
||||
Vi\-style \f[C]h\f[]/\f[C]j\f[]/\f[C]k\f[]/\f[C]l\f[] movement keys are
|
||||
also supported.
|
||||
.PP
|
||||
\f[C]/\f[] lets you set or change the filter query, which limits the
|
||||
data shown on most screens (in addition to the quick filters described
|
||||
|
||||
@ -152,13 +152,14 @@ File: hledger-ui.1.info, Node: KEYS, Next: SCREENS, Prev: OPTIONS, Up: Top
|
||||
2 KEYS
|
||||
******
|
||||
|
||||
`h' shows a help dialog listing all keys. (Some but not all of these
|
||||
also appear in the quick help at the bottom of each screen.) Press `h'
|
||||
again (or `ESCAPE') to close it.
|
||||
`?' shows a help dialog listing all keys. (Some but not all of these
|
||||
also appear in the quick help at the bottom of each screen.) Press `?'
|
||||
again (or `ESCAPE', or `LEFT') to close it.
|
||||
|
||||
The cursor keys navigate: `right' (or `enter') goes deeper, `left'
|
||||
returns to the previous screen, `up'/`down'/`page up'/`page
|
||||
down'/`home'/`end' move up and down through lists.
|
||||
down'/`home'/`end' move up and down through lists. Vi-style
|
||||
`h'/`j'/`k'/`l' movement keys are also supported.
|
||||
|
||||
`/' lets you set or change the filter query, which limits the data
|
||||
shown on most screens (in addition to the quick filters described
|
||||
@ -334,15 +335,15 @@ Node: OPTIONS825
|
||||
Ref: #options924
|
||||
Node: KEYS3800
|
||||
Ref: #keys3897
|
||||
Node: SCREENS5391
|
||||
Ref: #screens5478
|
||||
Node: Accounts screen5568
|
||||
Ref: #accounts-screen5698
|
||||
Node: Register screen7003
|
||||
Ref: #register-screen7160
|
||||
Node: Transaction screen8981
|
||||
Ref: #transaction-screen9141
|
||||
Node: Error screen10008
|
||||
Ref: #error-screen10132
|
||||
Node: SCREENS5461
|
||||
Ref: #screens5548
|
||||
Node: Accounts screen5638
|
||||
Ref: #accounts-screen5768
|
||||
Node: Register screen7073
|
||||
Ref: #register-screen7230
|
||||
Node: Transaction screen9051
|
||||
Ref: #transaction-screen9211
|
||||
Node: Error screen10078
|
||||
Ref: #error-screen10202
|
||||
|
||||
End Tag Table
|
||||
|
||||
@ -75,14 +75,15 @@ _reportingoptions_
|
||||
|
||||
# KEYS
|
||||
|
||||
`h` shows a help dialog listing all keys.
|
||||
`?` shows a help dialog listing all keys.
|
||||
(Some but not all of these also appear in the quick help at the bottom of each screen.)
|
||||
Press `h` again (or `ESCAPE`) to close it.
|
||||
Press `?` again (or `ESCAPE`, or `LEFT`) to close it.
|
||||
|
||||
The cursor keys navigate:
|
||||
`right` (or `enter`) goes deeper,
|
||||
`left` returns to the previous screen,
|
||||
`up`/`down`/`page up`/`page down`/`home`/`end` move up and down through lists.
|
||||
Vi-style `h`/`j`/`k`/`l` movement keys are also supported.
|
||||
|
||||
`/` lets you set or change the [filter query](/hledger.html#queries),
|
||||
which limits the data shown on most screens (in addition to the quick
|
||||
|
||||
@ -141,13 +141,13 @@ OPTIONS
|
||||
name will be "TAG:multi:level:account:name".
|
||||
|
||||
KEYS
|
||||
h shows a help dialog listing all keys. (Some but not all of these
|
||||
also appear in the quick help at the bottom of each screen.) Press h
|
||||
again (or ESCAPE) to close it.
|
||||
? shows a help dialog listing all keys. (Some but not all of these
|
||||
also appear in the quick help at the bottom of each screen.) Press ?
|
||||
again (or ESCAPE, or LEFT) to close it.
|
||||
|
||||
The cursor keys navigate: right (or enter) goes deeper, left returns to
|
||||
the previous screen, up/down/page up/page down/home/end move up and
|
||||
down through lists.
|
||||
down through lists. Vi-style h/j/k/l movement keys are also supported.
|
||||
|
||||
/ lets you set or change the filter query, which limits the data shown
|
||||
on most screens (in addition to the quick filters described below).
|
||||
|
||||
Loading…
Reference in New Issue
Block a user