xmonad: add memo floating and navigation keys

This commit is contained in:
Ingolf Wagner 2020-01-25 22:11:41 +13:00
parent 3bc5ba3365
commit 1fae5c5366
No known key found for this signature in database
GPG key ID: 76BF5F1928B9618B
3 changed files with 77 additions and 28 deletions

View file

@ -37,6 +37,7 @@ in {
home.file.".xmonad/lib/FloatKeys.hs".source = ./xmonad/FloatKeys.hs; home.file.".xmonad/lib/FloatKeys.hs".source = ./xmonad/FloatKeys.hs;
home.file.".xmonad/lib/TabbedFix.hs".source = ./xmonad/TabbedFix.hs; home.file.".xmonad/lib/TabbedFix.hs".source = ./xmonad/TabbedFix.hs;
home.file.".xmonad/lib/BoringWindows.hs".source = ./xmonad/BoringWindows.hs; home.file.".xmonad/lib/BoringWindows.hs".source = ./xmonad/BoringWindows.hs;
home.file.".xmonad/lib/Memo.hs".source = ./xmonad/Memo.hs;
home.file.".xmonad/lib/SubLayouts.hs".source = ./xmonad/SubLayouts.hs; home.file.".xmonad/lib/SubLayouts.hs".source = ./xmonad/SubLayouts.hs;
home.file.".xmonad/xmonad.cabal".source = ./xmonad/palos-xmonad.cabal; home.file.".xmonad/xmonad.cabal".source = ./xmonad/palos-xmonad.cabal;

View file

@ -10,6 +10,7 @@ import qualified Data.Map as M
import Data.Monoid (All, Endo) import Data.Monoid (All, Endo)
import Data.Ratio ((%)) import Data.Ratio ((%))
import FloatKeys (keysResizeWindow) import FloatKeys (keysResizeWindow)
import Memo (nextRectangle)
import NixCommands import NixCommands
import qualified SolarizedLight as Solarized import qualified SolarizedLight as Solarized
import System.Exit import System.Exit
@ -23,6 +24,8 @@ import XMonad.Actions.DynamicProjects (Project (..),
import XMonad.Actions.DynamicWorkspaces (addHiddenWorkspace, removeEmptyWorkspaceAfterExcept, import XMonad.Actions.DynamicWorkspaces (addHiddenWorkspace, removeEmptyWorkspaceAfterExcept,
renameWorkspace, renameWorkspace,
withWorkspace) withWorkspace)
import XMonad.Actions.Navigation2D (additionalNav2DKeysP,
windowGo, windowSwap)
import XMonad.Actions.UpdatePointer (updatePointer) import XMonad.Actions.UpdatePointer (updatePointer)
import XMonad.Actions.Warp (warpToScreen) import XMonad.Actions.Warp (warpToScreen)
import XMonad.Hooks.DynamicLog (dynamicLog) import XMonad.Hooks.DynamicLog (dynamicLog)
@ -45,6 +48,8 @@ import XMonad.Util.Scratchpad (scratchpadManageHook,
scratchpadSpawnAction) scratchpadSpawnAction)
import XMonad.Util.SpawnOnce (spawnOnce) import XMonad.Util.SpawnOnce (spawnOnce)
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- --
-- Layouts -- Layouts
@ -52,7 +57,7 @@ import XMonad.Util.SpawnOnce (spawnOnce)
------------------------------------------------------------------------ ------------------------------------------------------------------------
selectionColor :: String selectionColor :: String
selectionColor = Solarized.violet selectionColor = Solarized.magenta
nonSelectionColor :: String nonSelectionColor :: String
nonSelectionColor = Solarized.base02 nonSelectionColor = Solarized.base02
@ -63,7 +68,7 @@ myLayout = (windowConfiguration $ smartBorders $ boringWindows resizeableTall)
-- The default number of windows in the master pane -- The default number of windows in the master pane
nmaster = 1 nmaster = 1
-- Default proportion of screen occupied by master pane -- Default proportion of screen occupied by master pane
ratio = 12 / 20 ratio = 1 / 2
-- Percent of screen to increment by when resizing panes -- Percent of screen to increment by when resizing panes
delta = 3 / 100 delta = 3 / 100
@ -296,7 +301,15 @@ myAdditionaKeys
(do sendMessage MirrorShrink (do sendMessage MirrorShrink
sendMessage Reset)) sendMessage Reset))
-- Toggle window tiling/floating -- Toggle window tiling/floating
, ("t", withFocused $ toggleFloating (W.RationalRect 0.65 0.65 0.35 0.35)) , ("t", do
next <- nextRectangle
withFocused $ toggleFloating next)
, ("n", withFocused $ floatTileCommand
(do
position <- nextRectangle
withFocused (windows . (`W.float` position)))
(return ())
)
-- Increment the number of windows in the master area -- Increment the number of windows in the master area
, (",", sendMessage (IncMasterN 1)) , (",", sendMessage (IncMasterN 1))
-- Deincrement the number of windows in the master area -- Deincrement the number of windows in the master area
@ -462,19 +475,20 @@ updateBoring = do focusUp
-- No need to modify this. -- No need to modify this.
-- --
defaults = defaults =
additionalNav2DKeysP
("<Up>", "<Left>", "<Down>", "<Right>")
[("M-", windowGo), ("M-S-", windowSwap)]
False
def def
{ terminal = myTerm { terminal = myTerm
-- Whether focus follows the mouse pointer. -- Whether focus follows the mouse pointer.
, focusFollowsMouse = True , focusFollowsMouse = True
-- Whether clicking on a window to focus also passes the click to the window -- Whether clicking on a window to focus also passes the click to the window
, clickJustFocuses = False , clickJustFocuses = False
-- color configuration -- color configuration
, normalBorderColor = nonSelectionColor , normalBorderColor = nonSelectionColor
, focusedBorderColor = selectionColor , focusedBorderColor = selectionColor
, borderWidth = 1 , borderWidth = 1
-- modMask lets you specify which modkey you want to use. -- modMask lets you specify which modkey you want to use.
-- mod1Mask ("left alt"). -- mod1Mask ("left alt").
-- mod3Mask ("right alt") -- mod3Mask ("right alt")
@ -484,20 +498,17 @@ defaults =
-- key bindings -- key bindings
, keys = myKeys , keys = myKeys
, mouseBindings = mouse , mouseBindings = mouse
-- , layoutHook = focusTracking $ historyLayout myLayout -- , layoutHook = focusTracking $ historyLayout myLayout
, layoutHook = focusTracking myLayout , layoutHook = focusTracking myLayout
-- , logHook = myLogHook <> runAllPending -- , logHook = myLogHook <> runAllPending
, logHook = myLogHook , logHook = myLogHook
, startupHook = startUp , startupHook = startUp
, manageHook = myManageHook , manageHook = myManageHook
, handleEventHook = myEventHook , handleEventHook = myEventHook
} `additionalKeysP` } `additionalKeysP`
myAdditionaKeys myAdditionaKeys
autoXPConfig :: XPConfig autoXPConfig :: XPConfig
autoXPConfig = myXPConfig {autoComplete = Just 5000} autoXPConfig = myXPConfig {autoComplete = Just 5000}

View file

@ -0,0 +1,37 @@
{-# LANGUAGE DeriveDataTypeable #-}
{-| A hacky module to cycle through a list of
rectangles, I'm using this to place a floating window somehwere
when it is in my way -}
module Memo where
import XMonad.Config.Prime
import qualified XMonad.StackSet as W
import qualified XMonad.Util.ExtensibleState as ES
newtype MemoStorage =
MemoStorage [W.RationalRect]
deriving (Typeable)
-- (RationalRect x y height width)
instance ExtensionClass MemoStorage where
initialValue =
MemoStorage
(cycle
[ (W.RationalRect 0.0 0.0 0.4 0.4) -- oben links
, (W.RationalRect 0.6 0.6 0.4 0.4) -- unten rechts
, (W.RationalRect 0.6 0.0 0.4 0.4) -- oben rechts
, (W.RationalRect 0.0 0.6 0.4 0.4) -- unten links
, (W.RationalRect 0.25 0.00 0.4 0.4) -- oben mitte
, (W.RationalRect 0.25 0.60 0.4 0.4) -- unten mitte
, (W.RationalRect 0.00 0.25 0.4 0.4) -- links mitte
, (W.RationalRect 0.60 0.25 0.4 0.4) -- rechts mitte
])
nextRectangle :: X W.RationalRect
nextRectangle = do
MemoStorage next <- ES.get :: X MemoStorage
ES.modify (\(MemoStorage (_:xs)) -> MemoStorage xs)
return (head next)