xmonad: add memo floating and navigation keys
This commit is contained in:
parent
3bc5ba3365
commit
1fae5c5366
3 changed files with 77 additions and 28 deletions
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
@ -440,7 +453,7 @@ startUp
|
||||||
--
|
--
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
xmonad $ withUrgencyHook (SpawnUrgencyHook "echo emit Urgency ") $
|
xmonad $ withUrgencyHook (SpawnUrgencyHook "echo emit Urgency ") $
|
||||||
dynamicProjects projects $
|
dynamicProjects projects $
|
||||||
-- debugManageHook $
|
-- debugManageHook $
|
||||||
defaults
|
defaults
|
||||||
|
@ -462,42 +475,40 @@ updateBoring = do focusUp
|
||||||
-- No need to modify this.
|
-- No need to modify this.
|
||||||
--
|
--
|
||||||
defaults =
|
defaults =
|
||||||
def
|
additionalNav2DKeysP
|
||||||
{ terminal = myTerm
|
("<Up>", "<Left>", "<Down>", "<Right>")
|
||||||
|
[("M-", windowGo), ("M-S-", windowSwap)]
|
||||||
|
False
|
||||||
|
def
|
||||||
|
{ 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")
|
||||||
-- mod4Mask ("windows key")
|
-- mod4Mask ("windows key")
|
||||||
, modMask = mod4Mask
|
, modMask = mod4Mask
|
||||||
, workspaces = nonRemovableWorkspaces
|
, workspaces = nonRemovableWorkspaces
|
||||||
-- 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}
|
||||||
|
|
||||||
|
|
37
system/desktop/home-manager/xmonad/Memo.hs
Normal file
37
system/desktop/home-manager/xmonad/Memo.hs
Normal 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)
|
Loading…
Reference in a new issue