| xmonad-contrib-0.8.1: Third party extensions for xmonad | Source code | Contents | Index

XMonad.Actions.CopyWindow

Portability | unportable
Stability | unstable
Maintainer | ???

Contents

Usage

Description
Provides a binding to duplicate a window on multiple workspaces, providing dwm-like tagging functionality.
Synopsis

copy :: (Eq s, Eq i, Eq a) => i -> StackSet i l a s sd -> StackSet i l a s sd
copyToAll :: (Eq s, Eq i, Eq a) => StackSet i l a s sd -> StackSet i l a s sd
copyWindow :: (Eq a, Eq i, Eq s) => a -> i -> StackSet i l a s sd -> StackSet i l a s sd
killAllOtherCopies :: X ()
kill1 :: X ()

Usage

You can use this module with the following in your `~/.xmonad/xmonad.hs` file:

     import XMonad.Actions.CopyWindow

Then add something like this to your keybindings:

     -- mod-[1..9] @@ Switch to workspace N
     -- mod-shift-[1..9] @@ Move client to workspace N
     -- mod-control-shift-[1..9] @@ Copy client to workspace N
     [((m .|. modMask x, k), windows $ f i)
         | (i, k) <- zip (workspaces x) [xK_1 ..]
         , (f, m) <- [(W.view, 0), (W.shift, shiftMask), (copy, shiftMask .|. controlMask)]]

To use the above key bindings you need also to import XMonad.StackSet:

     import qualified XMonad.StackSet as W

You may also wish to redefine the binding to kill a window so it only removes it from the current workspace, if it's present elsewhere:

      , ((modMask x .|. shiftMask, xK_c     ), kill1) -- @@ Close the focused window

Another possibility which this extension provides is 'making window always visible' (i.e. always on current workspace), similar to corresponding metacity functionality. This behaviour is emulated through copying given window to all the workspaces and then removing it when it's unneeded on all workspaces any more.

Here is the example of keybindings which provide these actions:

      , ((modMask x, xK_v )", windows copyToAll) -- @@ Make focused window always visible
      , ((modMask x .|. shiftMask, xK_v ),  killAllOtherCopies) -- @@ Toggle window state back

For detailed instructions on editing your key bindings, see XMonad.Doc.Extending.

copy :: (Eq s, Eq i, Eq a) => i -> StackSet i l a s sd -> StackSet i l a s sd | Source

copy. Copy the focussed window to a new workspace.

copyToAll :: (Eq s, Eq i, Eq a) => StackSet i l a s sd -> StackSet i l a s sd | Source

copyToAll. Copy the focused window to all of workspaces.

copyWindow :: (Eq a, Eq i, Eq s) => a -> i -> StackSet i l a s sd -> StackSet i l a s sd | Source

copyWindow. Copy a window to a new workspace

killAllOtherCopies :: X () | Source

Kill all other copies of focused window (if they're present) 'All other' means here 'copies, which are not on current workspace' Consider calling this function after copyToAll

kill1 :: X () | Source

Remove the focused window from this workspace. If it's present in no other workspace, then kill it instead. If we do kill it, we'll get a delete notify back from X. There are two ways to delete a window. Either just kill it, or if it supports the delete protocol, send a delete event (e.g. firefox)
Produced by Haddock version 2.4.2