mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-07-26 09:41:52 -07:00
X.A.EasyMotion: Small nits
Superficial simplifications for certain functions
This commit is contained in:
@@ -43,8 +43,9 @@ import XMonad.Util.Font (releaseXMF, initXMF, Align(AlignCente
|
||||
import XMonad.Util.XUtils (fi, createNewWindow, paintAndWrite, deleteWindow, showWindow)
|
||||
import Control.Monad (replicateM)
|
||||
import Control.Arrow ((&&&))
|
||||
import Data.Maybe (isJust)
|
||||
import qualified Data.Map.Strict as M (Map, map, foldr, mapWithKey)
|
||||
import Data.Functor (($>))
|
||||
import Data.Maybe (isJust, listToMaybe)
|
||||
import qualified Data.Map.Strict as M (Map, map, mapWithKey, elems)
|
||||
import Data.Set (toList)
|
||||
import Graphics.X11.Xlib.Extras (getWindowAttributes, getEvent)
|
||||
import qualified Data.List as L (filter, partition, find, nub)
|
||||
@@ -268,11 +269,11 @@ handleSelectWindow c = do
|
||||
PerScreenKeys m ->
|
||||
fmap concat
|
||||
$ sequence
|
||||
$ M.foldr (:) []
|
||||
$ M.elems
|
||||
$ M.mapWithKey (\sid ks -> buildOverlays ks <$> sortedOverlayWindows sid) m
|
||||
where
|
||||
screenById :: ScreenId -> Maybe (W.Screen WorkspaceId (Layout Window) Window ScreenId ScreenDetail)
|
||||
screenById sid = L.find ((== sid) . screen) (W.current ws : W.visible ws)
|
||||
screenById sid = L.find ((== sid) . screen) (W.screens ws)
|
||||
visibleWindowsOnScreen :: ScreenId -> [Window]
|
||||
visibleWindowsOnScreen sid = L.filter (`elem` toList mappedWins) $ W.integrate' $ screenById sid >>= W.stack . W.workspace
|
||||
sortedOverlayWindows :: ScreenId -> X [OverlayWindow]
|
||||
@@ -289,12 +290,12 @@ handleSelectWindow c = do
|
||||
-- focus the selected window
|
||||
Selected o -> return . Just . win . overlayWin $ o
|
||||
-- return focus correctly
|
||||
_ -> whenJust (W.peek ws) (windows . W.focusWindow) >> return Nothing
|
||||
else releaseXMF f >> return Nothing
|
||||
_ -> whenJust (W.peek ws) (windows . W.focusWindow) $> Nothing
|
||||
else releaseXMF f $> Nothing
|
||||
where
|
||||
allKeys :: ChordKeys -> [KeySym]
|
||||
allKeys (AnyKeys ks) = ks
|
||||
allKeys (PerScreenKeys m) = concat $ M.foldr (:) [] m
|
||||
allKeys (PerScreenKeys m) = concat $ M.elems m
|
||||
|
||||
buildOverlays :: [KeySym] -> [OverlayWindow] -> [Overlay]
|
||||
buildOverlays ks = appendChords (maxChordLen c) ks
|
||||
@@ -326,7 +327,7 @@ selectWindow :: EasyMotionConfig -> X (Maybe Window)
|
||||
selectWindow conf =
|
||||
handleSelectWindow conf { sKeys = sanitiseKeys (sKeys conf) }
|
||||
where
|
||||
-- make sure the key lists don't contain: backspace, or duplicates
|
||||
-- make sure the key lists don't contain: backspace, our cancel key, or duplicates
|
||||
sanitise :: [KeySym] -> [KeySym]
|
||||
sanitise = L.nub . L.filter (`notElem` [xK_BackSpace, cancelKey conf])
|
||||
sanitiseKeys :: ChordKeys -> ChordKeys
|
||||
@@ -339,7 +340,7 @@ selectWindow conf =
|
||||
appendChords :: Int -> [KeySym] -> [OverlayWindow] -> [Overlay]
|
||||
appendChords _ [] _ = []
|
||||
appendChords maxUserSelectedLen ks overlayWins =
|
||||
zipWith (\ow c -> Overlay { overlayWin=ow, chord=c }) overlayWins chords
|
||||
zipWith Overlay overlayWins chords
|
||||
where
|
||||
chords = replicateM chordLen ks
|
||||
-- the minimum necessary chord length to assign a unique chord to each visible window
|
||||
@@ -368,6 +369,7 @@ handleKeyboard dpy drawFn cancel selected deselected = do
|
||||
| isNextOverlayKey s -> handleNextOverlayKey s
|
||||
| otherwise -> handleKeyboard dpy drawFn cancel selected deselected
|
||||
| ev_event_type ev == buttonPress -> do
|
||||
-- See XMonad.Prompt Note [Allow ButtonEvents]
|
||||
io $ allowEvents dpy replayPointer currentTime
|
||||
handleKeyboard dpy drawFn cancel selected deselected
|
||||
| otherwise -> handleKeyboard dpy drawFn cancel selected deselected
|
||||
@@ -377,12 +379,12 @@ handleKeyboard dpy drawFn cancel selected deselected = do
|
||||
case x of
|
||||
Backspace -> redraw >> handleKeyboard dpy drawFn cancel selected deselected
|
||||
_ -> return x
|
||||
isNextOverlayKey keySym = isJust (L.find ((== keySym) . head .chord) selected)
|
||||
isNextOverlayKey keySym = isJust (L.find ((== Just keySym) . listToMaybe .chord) selected)
|
||||
handleNextOverlayKey keySym =
|
||||
case fg of
|
||||
[x] -> return $ Selected x
|
||||
_ -> handleKeyboard dpy drawFn cancel (trim fg) (clear bg) >>= retryBackspace
|
||||
where
|
||||
(fg, bg) = L.partition ((== keySym) . head . chord) selected
|
||||
(fg, bg) = L.partition ((== Just keySym) . listToMaybe . chord) selected
|
||||
trim = map (\o -> o { chord = tail $ chord o })
|
||||
clear = map (\o -> o { chord = [] })
|
||||
|
Reference in New Issue
Block a user