# XMonad-screenshot
[](https://hackage.haskell.org/package/xmonad-screenshot)
[](https://travis-ci.org/supki/xmonad-screenshot)
[gtk][1]-based screen capturing utility for the [XMonad][2] window manager.
It's flexible enough to give a user options for comprehensive captured workspaces' filtering and post-capture processing.
By default it captures all existing workspaces and places resulting screenshot in `~/.xmonad/screenshot.png`
## Example screenshots
* [Horizontal][3] layout
* [Vertical][4] layout
## Caveats
### Installation
You may want to make sure you have [`gtk2hs-buildtools`][5] package installed and
its binaries are in `PATH` before installing `xmonad-screenshot`:
```
$ type gtk2hsC2hs
gtk2hsC2hs is /home/user/.cabal/bin/gtk2hsC2hs
```
If you do not see any encouraging output, try `cabal install gtk2hs-buildtools` and/or check
`PATH` contains `/home/user/.cabal/bin` directory
### Initialization
Due to gtk (and XMonad) constraints you need to initialize the capturing before using it.
Place call to `initCapturing` before you call `xmonad`:
```haskell
main :: IO ()
main = do
initCapturing
xmonad defaultConfig { ... }
```
## Usage examples
The most simple usage example:
```haskell
import XMonad.Util.WorkspaceScreenshot
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[ ...
, ((modm .|. shiftMask, xK_u), captureWorkspacesWhen defaultPredicate defaultHook horizontally)
, ...
]
```
You can filter some blacklisted workspaces from capturing using predicates:
```haskell
import XMonad.Util.WorkspaceScreenshot
predicate x = return $ x `notElem` ["blacklistedWorkspace1", "blacklistedWorkspace2"]
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[ ...
, ((modm .|. shiftMask, xK_u), captureWorkspacesWhen predicate defaultHook horizontally)
, ...
]
```
You can move screenshot file somewhere using post-processing hook:
```haskell
import Control.Monad.Trans
import System.FilePath
import System.Directory
import XMonad.Util.WorkspaceScreenshot
hook filepath =
do hd <- getHomeDirectory
renameFile filepath (hd </> "Pictures" </> filepath)
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[ ...
, ((modm .|. shiftMask, xK_u), captureWorkspacesWhen defaultPredicate hook horizontally)
, ...
]
```
[1]: https://hackage.haskell.org/package/gtk
[2]: http://xmonad.org
[3]: http://i.imgur.com/s9nbOaZ.png
[4]: https://vsegda.budueba.com/img/20dacff202bb7660bae3a16250e0b3e9.jpg
[5]: https://hackage.haskell.org/package/gtk2hs-buildtools