| ||||||||||||||||||||||
| ||||||||||||||||||||||
| ||||||||||||||||||||||
Description | ||||||||||||||||||||||
GridSelect displays items(e.g. the opened windows) in a 2D grid and lets the user select from it with the cursor/hjkl keys or the mouse. | ||||||||||||||||||||||
Synopsis | ||||||||||||||||||||||
Usage | ||||||||||||||||||||||
You can use this module with the following in your ~/.xmonad/xmonad.hs: import XMonad.Actions.GridSelect Then add a keybinding, e.g. , ((modm, xK_g), goToSelected defaultGSConfig) This module also supports displaying arbitrary information in a grid and letting the user select from it. E.g. to spawn an application from a given list, you can use the following: , ((modm, xK_s), spawnSelected defaultGSConfig ["xterm","gmplayer","gvim"]) | ||||||||||||||||||||||
Customizing | ||||||||||||||||||||||
Using a common GSConfig | ||||||||||||||||||||||
It is possible to bind a gsconfig at top-level in your configuration. Like so: -- the top of your config {-# LANGUAGE NoMonomorphismRestriction #-} import XMonad ... gsconfig1 = defaultGSConfig { gs_cellheight = 30, gs_cellWidth = 100 } An example where buildDefaultGSConfig is used instead of defaultGSConfig in order to specify a custom colorizer is gsconfig2 (found in XMonad.Actions.GridSelect): gsconfig2 colorizer = (buildDefaultGSConfig colorizer) { gs_cellheight = 30, gs_cellWidth = 100 } -- | A green monochrome colorizer based on window class greenColorizer = colorRangeFromClassName black -- lowest inactive bg (0x70,0xFF,0x70) -- highest inactive bg black -- active bg white -- inactive fg white -- active fg where black = minBound white = maxBound Then you can bind to: ,((modm, xK_g), goToSelected $ gsconfig2 myWinColorizer) ,((modm, xK_p), spawnSelected $ spawnSelected defaultColorizer) | ||||||||||||||||||||||
Custom keybindings | ||||||||||||||||||||||
Adding more keybindings for gridselect to listen to is similar: At the top of your config: {-# LANGAUGE NoMonomorphismRestriction #-} import XMonad import qualified Data.Map as M Then define gsconfig3 which may be used in exactly the same manner as gsconfig1: gsconfig3 = defaultGSConfig { gs_cellheight = 30 , gs_cellwidth = 100 , gs_navigate = M.unions [reset ,nethackKeys ,gs_navigate -- get the default navigation bindings $ defaultGSConfig `asTypeOf` gsconfig3 -- needed to fix an ambiguous type variable ] } where addPair (a,b) (x,y) = (a+x,b+y) nethackKeys = M.map addPair $ M.fromList [((0,xK_y),(-1,-1)) ,((0,xK_i),(1,-1)) ,((0,xK_n),(-1,1)) ,((0,xK_m),(1,1)) ] -- jump back to the center with the spacebar, regardless of the current position. reset = M.singleton (0,xK_space) (const (0,0)) | ||||||||||||||||||||||
Configuration | ||||||||||||||||||||||
data GSConfig a | ||||||||||||||||||||||
| ||||||||||||||||||||||
defaultGSConfig :: HasColorizer a => GSConfig a | ||||||||||||||||||||||
A basic configuration for gridselect, with the colorizer chosen based on the type. If you want to replace the gs_colorizer field, use buildDefaultGSConfig instead, to avoid ambiguous type variables. | ||||||||||||||||||||||
type NavigateMap = Map (KeyMask, KeySym) (TwoDPosition -> TwoDPosition) | ||||||||||||||||||||||
type TwoDPosition = (Integer, Integer) | ||||||||||||||||||||||
buildDefaultGSConfig :: (a -> Bool -> X (String, String)) -> GSConfig a | ||||||||||||||||||||||
Builds a default gs config from a colorizer function. | ||||||||||||||||||||||
Variations on gridselect | ||||||||||||||||||||||
gridselect :: GSConfig a -> [(String, a)] -> X (Maybe a) | ||||||||||||||||||||||
Brings up a 2D grid of elements in the center of the screen, and one can select an element with cursors keys. The selected element is returned. | ||||||||||||||||||||||
gridselectWindow :: GSConfig Window -> X (Maybe Window) | ||||||||||||||||||||||
Like gridSelect but with the current windows and their titles as elements | ||||||||||||||||||||||
withSelectedWindow :: (Window -> X ()) -> GSConfig Window -> X () | ||||||||||||||||||||||
Brings up a 2D grid of windows in the center of the screen, and one can select a window with cursors keys. The selected window is then passed to a callback function. | ||||||||||||||||||||||
bringSelected :: GSConfig Window -> X () | ||||||||||||||||||||||
Brings selected window to the current workspace. | ||||||||||||||||||||||
goToSelected :: GSConfig Window -> X () | ||||||||||||||||||||||
Switches to selected window's workspace and focuses that window. | ||||||||||||||||||||||
spawnSelected :: GSConfig String -> [String] -> X () | ||||||||||||||||||||||
Select an application to spawn from a given list | ||||||||||||||||||||||
runSelectedAction :: GSConfig (X ()) -> [(String, X ())] -> X () | ||||||||||||||||||||||
Select an action and run it in the X monad | ||||||||||||||||||||||
Colorizers | ||||||||||||||||||||||
class HasColorizer a where | ||||||||||||||||||||||
| ||||||||||||||||||||||
fromClassName :: Window -> Bool -> X (String, String) | ||||||||||||||||||||||
Colorize a window depending on it's className. | ||||||||||||||||||||||
stringColorizer :: String -> Bool -> X (String, String) | ||||||||||||||||||||||
Default colorizer for Strings | ||||||||||||||||||||||
colorRangeFromClassName | ||||||||||||||||||||||
| ||||||||||||||||||||||
Screenshots | ||||||||||||||||||||||
Selecting a workspace:
Selecting a window by title:
| ||||||||||||||||||||||
Produced by Haddock version 2.5.0 |