Skip to content

Commit 6a62ce3

Browse files
Key binds to resize dir/file columns. (#159)
1 parent a4d4f19 commit 6a62ce3

4 files changed

Lines changed: 29 additions & 13 deletions

File tree

Core.hs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module Core (
1212
forcePause, putMessage, clearMessage, playCursor, playCur,
1313
jumpToPlaying, jump, jumpRel, jumpRandom,
1414
upPage, downPage,
15-
seek, seekStart,
15+
seek, seekStart, adjFolderCol,
1616
blacklist,
1717
setsModal, closeModal, showHist,
1818
jumpToMatchDir, jumpToMatchFile,
@@ -89,6 +89,7 @@ start opts (Playlist folders music) = do
8989
, playHist = mempty
9090
, searchHist = []
9191
, searchFw = True
92+
, folderCol = 0.334
9293
, histSize = opts.histSize
9394
, miniFocused = False
9495
, status = Stopped
@@ -227,7 +228,7 @@ handleMsg (P t) = do
227228
modifyHS_ \st -> st
228229
{ status = t
229230
, clock = case st.clock of -- push stopped clock towards end
230-
Just fr | t == Stopped -> Just $ adjustFrame 0.1 fr
231+
Just fr | t == Stopped -> Just $ adjFrame 0.1 fr
231232
c -> c
232233
}
233234
when (t == Stopped) playNext
@@ -238,8 +239,8 @@ handleMsg (F f) = do
238239
------------------------------------------------------------------------
239240
-- Basic operations
240241

241-
adjustFrame :: Fixed E2 -> Frame -> Frame
242-
adjustFrame s fr = Frame { elapsed = fr.elapsed + s', left = fr.left - s' }
242+
adjFrame :: Fixed E2 -> Frame -> Frame
243+
adjFrame s fr = Frame { elapsed = fr.elapsed + s', left = fr.left - s' }
243244
where s' = (s `min` fr.left) `max` (- fr.elapsed)
244245

245246
seekStart :: IO ()
@@ -249,11 +250,18 @@ seekStart = seek $ fromIntegral $ minBound @Int
249250
seek :: Fixed E2 -> IO ()
250251
seek s = do
251252
mss <- modifyHS \st -> case st.clock of
252-
Just fr -> let fr' = adjustFrame s fr
253+
Just fr -> let fr' = adjFrame s fr
253254
in (st { clock = Just fr' }, Just fr'.elapsed)
254255
Nothing -> (st, Nothing)
255256
whenJust mss $ sendMpg . Jump
256257

258+
adjFolderCol :: Int -> IO ()
259+
adjFolderCol adj = do
260+
(_, sz) <- UI.screenSize
261+
modifyHS_ \st -> st { folderCol =
262+
let fc' = st.folderCol + fromIntegral adj / fromIntegral sz
263+
in (fc' `max` 0) `min` 1 }
264+
257265
------------------------------------------------------------------------
258266

259267
-- | Generic jump

Keymap.hs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@ mainMode = KeyMap \c -> getsHS (.modal) >>= \case
6565
forcePause *> setsModal (const $ Just ExitModal) $> mainMode
6666
| c `elem` ['H', ';'] ->
6767
showHist $> mainMode
68-
| c == unkey KeySLeft -> seek (-60) $> mainMode
69-
| c == unkey KeySRight -> seek 60 $> mainMode
7068
| c >= '1' && c <= '9' ->
7169
jumpRel (fromIntegral (fromEnum c - 48) / 10) $> mainMode
7270
| True -> sequence_ (M.lookup c keyMap) $> mainMode
@@ -133,10 +131,7 @@ keyTable =
133131
, ("Jump to start of list", [unkey KeyHome,'0'], jump 0)
134132
, ("Jump to end of list", [unkey KeyEnd,'G'], jump maxBound)
135133
, ("Jump to 10%, 20%, 30%, etc., point", ['1','2','3'], placeholder)
136-
, ("Seek left 10 seconds; shift for one minute",
137-
[unkey KeyLeft], seek (-10))
138-
, ("Seek right 10 seconds; shift for one minute",
139-
[unkey KeyRight], seek 10)
134+
, ("Seek 10 seconds; shift for one minute", [unkey KeyLeft, unkey KeyRight], placeholder)
140135
, ("Toggle pause", [' '], pause)
141136
, ("Play under cursor", ['p'], playCur)
142137
, ("Play from cursor", ['\n'], playCursor)
@@ -159,14 +154,26 @@ keyTable =
159154
, ("Search backwards for file", ['?'], placeholder)
160155
, ("Search for directory matching regex", ['\\'], placeholder)
161156
, ("Search backwards for directory", ['|'], placeholder)
157+
, ("Change size of folder and file columns", ['[', ']'], placeholder)
162158
, ("Load config file", ['l'], loadConfig)
163159
, ("Quit " <> UTF8.fromString package, ['q'], placeholder)
164160
]
165161
where placeholder = pure () -- handled separately
166162

163+
-- | Not shown in help menu (or grouped there).
164+
quietKeys :: [(Char, IO ())]
165+
quietKeys =
166+
[ (unkey KeyLeft, seek (-10))
167+
, (unkey KeyRight, seek 10)
168+
, (unkey KeySLeft, seek (-60))
169+
, (unkey KeySRight, seek 60)
170+
, ('[', adjFolderCol (-1))
171+
, (']', adjFolderCol 1)
172+
]
173+
167174
-- Compiled dispatch table for normal-mode single-key commands.
168175
keyMap :: M.Map Char (IO ())
169-
keyMap = M.fromList [ (c, a) | (_, cs, a) <- keyTable, c <- cs ]
176+
keyMap = M.fromList $ [ (c, a) | (_, cs, a) <- keyTable, c <- cs ] ++ quietKeys
170177

171178
keysHelp :: [KeysHelp]
172179
keysHelp = [ (keys, desc) | (desc, keys, _) <- keyTable ]

State.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ data HState = HState
4141
, minibuffer :: !Line -- contents of minibuffer
4242
, modal :: !(Maybe Modal) -- modal visible
4343
, miniFocused :: !Bool -- is the mini buffer focused?
44+
, folderCol :: Float -- portion of width for folders
4445
, mode :: !Mode
4546
, uptime :: !ByteString
4647
, searchFw :: !Bool -- active search direction

UI.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ playList buflen DD{ drawWidth=w, drawState=st } =
238238

239239
list = [ drawIt . color $ n | n <- zip visible' [0..] ]
240240

241-
indent = round $ (0.334 :: Float) * fromIntegral w :: Int
241+
indent = round $ st.folderCol * fromIntegral (w - 1) :: Int
242242

243243
(sty1, sty2, sty3) = (cs.selected, cs.cursors, cs.combined)
244244
where cs = st.uiStyle

0 commit comments

Comments
 (0)