Xmonad/Config archive/webframp's xmonad.hs
From HaskellWiki
(Difference between revisions)
(list comprehension for search bindings updated) |
(missing type signatures in several places) |
||
| Line 11: | Line 11: | ||
-- | -- | ||
-- customization for the xmonad window manager | -- customization for the xmonad window manager | ||
| + | -- Last Modified: 2008 Nov 04 Tue - 07:53:00 | ||
----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||
| - | |||
-- Imports {{{ | -- Imports {{{ | ||
| - | import XMonad | + | import XMonad |
-- Hooks | -- Hooks | ||
import XMonad.Hooks.DynamicLog hiding (xmobar, xmobarPP, xmobarColor, sjanssenPP, byorgeyPP) | import XMonad.Hooks.DynamicLog hiding (xmobar, xmobarPP, xmobarColor, sjanssenPP, byorgeyPP) | ||
| Line 22: | Line 22: | ||
-- Prompt | -- Prompt | ||
import XMonad.Prompt | import XMonad.Prompt | ||
| - | import XMonad.Prompt.RunOrRaise | + | import XMonad.Prompt.RunOrRaise (runOrRaisePrompt) |
| - | import XMonad.Prompt. | + | import XMonad.Prompt.Window (windowPromptGoto, windowPromptBring) |
| - | import XMonad.Prompt.Workspace | + | import XMonad.Prompt.Workspace (workspacePrompt) |
| - | import XMonad.Prompt.AppendFile | + | import XMonad.Prompt.AppendFile (appendFilePrompt) |
-- Actions | -- Actions | ||
import XMonad.Actions.CycleWS --(nextWS, prevWS, shiftToNext, shiftToPrev, nextScreen, prevScreen, shiftNextScreen, shiftPrevScreen, toggleWS) | import XMonad.Actions.CycleWS --(nextWS, prevWS, shiftToNext, shiftToPrev, nextScreen, prevScreen, shiftNextScreen, shiftPrevScreen, toggleWS) | ||
| - | import XMonad.Actions.WindowGo (title | + | import XMonad.Actions.WindowGo (title, raiseMaybe, runOrRaise, (=?)) |
import XMonad.Actions.UpdatePointer | import XMonad.Actions.UpdatePointer | ||
import qualified XMonad.Actions.Search as S | import qualified XMonad.Actions.Search as S | ||
-- Util | -- Util | ||
import XMonad.Util.Run (safeSpawn, unsafeSpawn, runInTerm, spawnPipe) | import XMonad.Util.Run (safeSpawn, unsafeSpawn, runInTerm, spawnPipe) | ||
| - | import XMonad.Util.Scratchpad (scratchpadSpawnAction, scratchpadManageHook) | + | import XMonad.Util.Scratchpad (scratchpadSpawnAction, scratchpadManageHook) --, scratchpadFilterOutWorkspace) |
import XMonad.Util.XSelection (safePromptSelection) | import XMonad.Util.XSelection (safePromptSelection) | ||
import XMonad.Util.EZConfig hiding (additionalMouseBindings, removeMouseBindings) | import XMonad.Util.EZConfig hiding (additionalMouseBindings, removeMouseBindings) | ||
| Line 40: | Line 40: | ||
import XMonad.Layout.ResizableTile (ResizableTall(..)) | import XMonad.Layout.ResizableTile (ResizableTall(..)) | ||
import System.IO (hPutStrLn) | import System.IO (hPutStrLn) | ||
| + | import Data.Char (isSpace) | ||
import qualified XMonad.StackSet as W | import qualified XMonad.StackSet as W | ||
| - | |||
--}}} | --}}} | ||
-- Main {{{ | -- Main {{{ | ||
| + | main :: IO () | ||
main = do | main = do | ||
dzpipe <- spawnPipe statusBarCmd | dzpipe <- spawnPipe statusBarCmd | ||
| Line 61: | Line 62: | ||
, startupHook = return () >> checkKeymap defaultConfig lacKeys | , startupHook = return () >> checkKeymap defaultConfig lacKeys | ||
} | } | ||
| - | + | `additionalKeysP` lacKeys | |
| - | + | `additionalKeys` | |
| - | -- Mediakeys on the Latitude D830 | + | -- Mediakeys on the Latitude D830 |
[ ((0 ,0x1008ff11 ), unsafeSpawn "amixer -q set Master 2dB-" ) -- XF86AudioLowerVolume | [ ((0 ,0x1008ff11 ), unsafeSpawn "amixer -q set Master 2dB-" ) -- XF86AudioLowerVolume | ||
, ((0 ,0x1008ff12 ), unsafeSpawn "amixer -q set Master toggle") -- XF86Audio Mute | , ((0 ,0x1008ff12 ), unsafeSpawn "amixer -q set Master toggle") -- XF86Audio Mute | ||
, ((0 ,0x1008ff13 ), unsafeSpawn "amixer -q set Master 2dB+" ) -- XF86AudioRaiseVolume | , ((0 ,0x1008ff13 ), unsafeSpawn "amixer -q set Master 2dB+" ) -- XF86AudioRaiseVolume | ||
| - | , ((0 | + | , ((0 ,xK_Print ), unsafeSpawn "scrot '%Y-%m-%d-%H%M_$wx$h.png' -e 'mv $f ~/screenshots/'") -- Print Screen |
] | ] | ||
-- }}} | -- }}} | ||
-- Config {{{ | -- Config {{{ | ||
| - | -- single options here | + | -- single options here |
-- }}} | -- }}} | ||
-- Theme {{{ | -- Theme {{{ | ||
| + | colorNormalBorder, colorFocusedBorder, colorNormalBG, colorNormalFG, colorFocusBG, colorFocusFG, colorFocusBO, colorUrgentBG, colorUrgentFG :: [Char] | ||
colorNormalBorder = "#1c2636" | colorNormalBorder = "#1c2636" | ||
colorFocusedBorder = "#99ff99" | colorFocusedBorder = "#99ff99" | ||
| Line 85: | Line 87: | ||
colorUrgentBG = "#ff00cc" | colorUrgentBG = "#ff00cc" | ||
colorUrgentFG = "#00ff99" | colorUrgentFG = "#00ff99" | ||
| - | + | barFont, barXFont, statusBarCmd, notesFile, mTerm :: [Char] | |
| - | + | ||
barFont = "terminus" | barFont = "terminus" | ||
barXFont = "-*-terminus-*-*-*-*-14-*-*-*-*-*-*-*" | barXFont = "-*-terminus-*-*-*-*-14-*-*-*-*-*-*-*" | ||
| Line 97: | Line 98: | ||
" -ta l -expand r -e ''" | " -ta l -expand r -e ''" | ||
notesFile = "/home/webframp/TODO" | notesFile = "/home/webframp/TODO" | ||
| - | mTerm = "urxvt" | + | mTerm = "urxvt" |
-- Custom Searches | -- Custom Searches | ||
| + | enro40, roen40 :: S.SearchEngine | ||
enro40 = S.searchEngine "enro40" "http://dictionare.com/phpdic/enro40.php?field0=" | enro40 = S.searchEngine "enro40" "http://dictionare.com/phpdic/enro40.php?field0=" | ||
roen40 = S.searchEngine "roen40" "http://dictionare.com/phpdic/roen40.php?field0=" | roen40 = S.searchEngine "roen40" "http://dictionare.com/phpdic/roen40.php?field0=" | ||
| Line 122: | Line 124: | ||
-- Prompt Config {{{ | -- Prompt Config {{{ | ||
| + | mXPConfig :: XPConfig | ||
mXPConfig = | mXPConfig = | ||
| - | + | defaultXPConfig { font = barFont | |
| - | + | , bgColor = colorFocusBG | |
| - | + | , fgColor = colorNormalFG | |
| - | + | , bgHLight = colorNormalBG | |
| - | + | , fgHLight = colorFocusFG | |
| - | + | , borderColor = "black" | |
| - | + | , promptBorderWidth = 0 | |
| - | + | , position = Bottom | |
| - | + | , height = 14 | |
| - | + | , historySize = 256 | |
| - | + | , historyFilter = id | |
| - | + | , defaultText = "" | |
| - | + | , autoComplete = Nothing | |
| - | + | , showCompletionOnTab = False | |
| - | + | } | |
| + | largeXPConfig :: XPConfig | ||
largeXPConfig = mXPConfig | largeXPConfig = mXPConfig | ||
{ font = "-*-terminus-*-*-*-*-16-*-*-*-*-*-*-*" | { font = "-*-terminus-*-*-*-*-16-*-*-*-*-*-*-*" | ||
| Line 157: | Line 161: | ||
--}}} | --}}} | ||
-- Window rules aka Manage Hook {{{ | -- Window rules aka Manage Hook {{{ | ||
| + | mManageHook :: ManageHook | ||
mManageHook = scratchpadManageHook (W.RationalRect 0.25 0.375 0.5 0.35) <+> | mManageHook = scratchpadManageHook (W.RationalRect 0.25 0.375 0.5 0.35) <+> | ||
(composeAll . concat $ | (composeAll . concat $ | ||
| - | [ [ className =? c --> doFloat | c <- floats ] , | + | [ [ className =? c --> doFloat | c <- floats ], |
| - | [ className =? w --> | + | [ className =? w --> doShift "web" | w <- webs] , |
| - | [ className =? g --> | + | [ className =? g --> doShift "game" | g <- games] , |
[ resource =? "desktop_window" --> doIgnore | [ resource =? "desktop_window" --> doIgnore | ||
| - | , className =? "Epdfview" --> | + | , className =? "Epdfview" --> doShift "read" |
| - | , title =? "mutt" --> | + | , className =? "Okular" --> doShift "read" |
| - | , title =? "irssi" --> | + | , title =? "mutt" --> doShift "mail" |
| + | , title =? "irssi" --> doShift "irc" | ||
, title =? "Save a Bookmark" --> doFloat | , title =? "Save a Bookmark" --> doFloat | ||
, title =? "Add-ons" --> doFloat | , title =? "Add-ons" --> doFloat | ||
| - | , className =? "Mitter" --> | + | , className =? "Mitter" --> doShift "irc" |
| - | , className =? "Evolution" --> | + | , className =? "Evolution" --> doShift "mail" |
| - | , className =? "VirtualBox" --> | + | , className =? "Shredder" --> doShift "mail" |
| - | , className =? "Tsclient" --> | + | , className =? "VirtualBox" --> doShift "win" |
| + | , className =? "Tsclient" --> doShift "win" | ||
] ]) | ] ]) | ||
<+> manageDocks -- make some space | <+> manageDocks -- make some space | ||
<+> composeOne [ isFullscreen -?> doFullFloat ] | <+> composeOne [ isFullscreen -?> doFullFloat ] | ||
| - | where floats = ["Mplayer","Gimp","Gimp-2. | + | where floats = ["Mplayer","Gimp","Gimp-2.6","Tsclient","VirtualBox","Gtklp","smc"] |
| - | webs = ["Navigator","Gran Paradiso","Firefox", "Midori"] | + | webs = ["Navigator","Gran Paradiso","Firefox", "Midori", "Minefield"] |
games = ["roguestar-gl","neverputt","neverball","wesnoth"] | games = ["roguestar-gl","neverputt","neverball","wesnoth"] | ||
| - | |||
-- }}} | -- }}} | ||
| + | lacKeys :: [([Char], X ())] | ||
lacKeys = | lacKeys = | ||
[ ("M-p" , runOrRaisePrompt largeXPConfig { bgHLight = colorFocusFG, fgHLight = colorNormalBG }) | [ ("M-p" , runOrRaisePrompt largeXPConfig { bgHLight = colorFocusFG, fgHLight = colorNormalBG }) | ||
| - | , ("M-g" , runOrRaise "firefox" (className =? " | + | , ("M-g" , runOrRaise "firefox-nightly" (className =? "Minefield")) |
| - | , ("M-S-g" , safePromptSelection "firefox") | + | , ("M-S-g" , safePromptSelection "firefox-nightly") |
| - | , ("M-w" | + | , ("M-w w" , workspacePrompt largeXPConfig (windows . W.view)) |
| - | , ("M-S-w" | + | , ("M-w g" , windowPromptGoto largeXPConfig) |
| + | , ("M-S-w w" , workspacePrompt largeXPConfig (windows . W.shift)) | ||
| + | , ("M-S-w g" , windowPromptBring largeXPConfig) | ||
, ("M-C-n" , appendFilePrompt largeXPConfig { bgColor = colorFocusFG, fgColor = colorFocusBG } notesFile) | , ("M-C-n" , appendFilePrompt largeXPConfig { bgColor = colorFocusFG, fgColor = colorFocusBG } notesFile) | ||
, ("M-S-z" , safeSpawn "mocp" "-G") -- play/pause | , ("M-S-z" , safeSpawn "mocp" "-G") -- play/pause | ||
| - | , ("M-S- | + | , ("M-S-," , safeSpawn "mocp" "-r") -- rev |
| - | , ("M-S- | + | , ("M-S-." , safeSpawn "mocp" "-f") -- fwd |
, ("M-<Esc>" , focusUrgent) | , ("M-<Esc>" , focusUrgent) | ||
, ("M-`" , scratchpadSpawnAction defaultConfig { terminal = mTerm }) -- scratchpad | , ("M-`" , scratchpadSpawnAction defaultConfig { terminal = mTerm }) -- scratchpad | ||
, ("M-S-x" , unsafeSpawn "slock") -- screen lock | , ("M-S-x" , unsafeSpawn "slock") -- screen lock | ||
| - | |||
, ("M-i" , raiseMaybe (runInTerm "-title irssi" "sh -c 'screen -D -R -S irc irssi'") (title =? "irssi")) | , ("M-i" , raiseMaybe (runInTerm "-title irssi" "sh -c 'screen -D -R -S irc irssi'") (title =? "irssi")) | ||
, ("M-m" , raiseMaybe (runInTerm "-title mutt" "sh -c 'screen -D -R -S mail mutt'") (title =? "mutt")) | , ("M-m" , raiseMaybe (runInTerm "-title mutt" "sh -c 'screen -D -R -S mail mutt'") (title =? "mutt")) | ||
| Line 219: | Line 227: | ||
[("M-C-c " ++ k, S.selectSearch f) | (k,f) <- searchList ] | [("M-C-c " ++ k, S.selectSearch f) | (k,f) <- searchList ] | ||
| + | searchList :: [([Char], S.SearchEngine)] | ||
searchList = [ ("g", S.google) | searchList = [ ("g", S.google) | ||
, ("h", S.hoogle) | , ("h", S.hoogle) | ||
Revision as of 15:55, 4 November 2008
----------------------------------------------------------------------- -- -- Module : xmonad.hs -- Copyright : (c) Sean Escriva 2008 -- License : BSD3-style (see LICENSE) -- -- Maintainer : sean.escriva@gmail.com -- Stability : unstable -- Portability : not portable, -- -- customization for the xmonad window manager -- Last Modified: 2008 Nov 04 Tue - 07:53:00 ----------------------------------------------------------------------- -- Imports {{{ import XMonad -- Hooks import XMonad.Hooks.DynamicLog hiding (xmobar, xmobarPP, xmobarColor, sjanssenPP, byorgeyPP) import XMonad.Hooks.UrgencyHook (withUrgencyHook, NoUrgencyHook(..), focusUrgent) import XMonad.Hooks.ManageDocks (avoidStruts, manageDocks, ToggleStruts(..)) import XMonad.Hooks.ManageHelpers -- Prompt import XMonad.Prompt import XMonad.Prompt.RunOrRaise (runOrRaisePrompt) import XMonad.Prompt.Window (windowPromptGoto, windowPromptBring) import XMonad.Prompt.Workspace (workspacePrompt) import XMonad.Prompt.AppendFile (appendFilePrompt) -- Actions import XMonad.Actions.CycleWS --(nextWS, prevWS, shiftToNext, shiftToPrev, nextScreen, prevScreen, shiftNextScreen, shiftPrevScreen, toggleWS) import XMonad.Actions.WindowGo (title, raiseMaybe, runOrRaise, (=?)) import XMonad.Actions.UpdatePointer import qualified XMonad.Actions.Search as S -- Util import XMonad.Util.Run (safeSpawn, unsafeSpawn, runInTerm, spawnPipe) import XMonad.Util.Scratchpad (scratchpadSpawnAction, scratchpadManageHook) --, scratchpadFilterOutWorkspace) import XMonad.Util.XSelection (safePromptSelection) import XMonad.Util.EZConfig hiding (additionalMouseBindings, removeMouseBindings) -- Layouts import XMonad.Layout.NoBorders (smartBorders) import XMonad.Layout.ResizableTile (ResizableTall(..)) import System.IO (hPutStrLn) import Data.Char (isSpace) import qualified XMonad.StackSet as W --}}} -- Main {{{ main :: IO () main = do dzpipe <- spawnPipe statusBarCmd xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig { terminal = mTerm , focusFollowsMouse = False , borderWidth = 1 , modMask = mod4Mask -- win key , numlockMask = mod2Mask , workspaces = ["mail","web","code","irc","term","read","game","art","win"] , normalBorderColor = colorNormalBorder , focusedBorderColor = colorFocusedBorder , layoutHook = mLayout , manageHook = mManageHook , logHook = (dynamicLogWithPP $ mPP dzpipe) >> updatePointer (Relative 0.95 0.95) , startupHook = return () >> checkKeymap defaultConfig lacKeys } `additionalKeysP` lacKeys `additionalKeys` -- Mediakeys on the Latitude D830 [ ((0 ,0x1008ff11 ), unsafeSpawn "amixer -q set Master 2dB-" ) -- XF86AudioLowerVolume , ((0 ,0x1008ff12 ), unsafeSpawn "amixer -q set Master toggle") -- XF86Audio Mute , ((0 ,0x1008ff13 ), unsafeSpawn "amixer -q set Master 2dB+" ) -- XF86AudioRaiseVolume , ((0 ,xK_Print ), unsafeSpawn "scrot '%Y-%m-%d-%H%M_$wx$h.png' -e 'mv $f ~/screenshots/'") -- Print Screen ] -- }}} -- Config {{{ -- single options here -- }}} -- Theme {{{ colorNormalBorder, colorFocusedBorder, colorNormalBG, colorNormalFG, colorFocusBG, colorFocusFG, colorFocusBO, colorUrgentBG, colorUrgentFG :: [Char] colorNormalBorder = "#1c2636" colorFocusedBorder = "#99ff99" colorNormalBG = "#1e1e27" colorNormalFG = "#cfbfad" colorFocusFG = "#33ccff" colorFocusBG = "#1C2636" colorFocusBO = "#99ffcc" colorUrgentBG = "#ff00cc" colorUrgentFG = "#00ff99" barFont, barXFont, statusBarCmd, notesFile, mTerm :: [Char] barFont = "terminus" barXFont = "-*-terminus-*-*-*-*-14-*-*-*-*-*-*-*" --}}} statusBarCmd = "dzen2" ++ " -bg '" ++ colorNormalBG ++ "'" ++ " -fg '" ++ colorNormalFG ++ "'" ++ " -sa c" ++ " -fn '" ++ barXFont ++ "'" ++ " -ta l -expand r -e ''" notesFile = "/home/webframp/TODO" mTerm = "urxvt" -- Custom Searches enro40, roen40 :: S.SearchEngine enro40 = S.searchEngine "enro40" "http://dictionare.com/phpdic/enro40.php?field0=" roen40 = S.searchEngine "roen40" "http://dictionare.com/phpdic/roen40.php?field0=" -- Pretty printer {{{ -- dynamiclog pretty printer for dzen mPP h = defaultPP { ppCurrent = wrap ("^fg(" ++ colorFocusFG ++ ")^bg(" ++ colorFocusBG ++ ")^p(2)") "^p(2)^fg()^bg()" , ppVisible = wrap ("^fg(" ++ colorNormalFG ++ ")^bg(" ++ colorNormalBG ++ ")^p(2)") "^p(2)^fg()^bg()" , ppSep = " ^fg(grey60)^r(1x8)^fg() " , ppLayout = dzenColor colorNormalFG "" . (\x -> case x of "Mirror Tall" -> "^i(/home/webframp/.xmonad/dzen/mtall.xbm)" "ResizableTall" -> "^i(/home/webframp/.xmonad/dzen/tall.xbm)" "Full" -> "^i(/home/webframp/.xmonad/dzen/full.xbm)" _ -> " " ++ x ++ " " ) , ppUrgent = dzenColor colorNormalBG colorUrgentBG . wrap "[" "]" , ppTitle = dzenColor colorFocusFG "" . wrap "<" ">" , ppOutput = hPutStrLn h } --}}} -- Prompt Config {{{ mXPConfig :: XPConfig mXPConfig = defaultXPConfig { font = barFont , bgColor = colorFocusBG , fgColor = colorNormalFG , bgHLight = colorNormalBG , fgHLight = colorFocusFG , borderColor = "black" , promptBorderWidth = 0 , position = Bottom , height = 14 , historySize = 256 , historyFilter = id , defaultText = "" , autoComplete = Nothing , showCompletionOnTab = False } largeXPConfig :: XPConfig largeXPConfig = mXPConfig { font = "-*-terminus-*-*-*-*-16-*-*-*-*-*-*-*" , height = 16 } -- }}} -- Layout Hook{{{ mLayout = avoidStruts $ smartBorders( Mirror tiled ||| ResizableTall 1 (3/100) (1/2) [] ||| Full) where tiled = Tall nmaster delta ratio nmaster = 1 ratio = toRational (2/(1+sqrt(5)::Double)) -- golden, thx Octoploid delta = 0.03 --}}} -- Window rules aka Manage Hook {{{ mManageHook :: ManageHook mManageHook = scratchpadManageHook (W.RationalRect 0.25 0.375 0.5 0.35) <+> (composeAll . concat $ [ [ className =? c --> doFloat | c <- floats ], [ className =? w --> doShift "web" | w <- webs] , [ className =? g --> doShift "game" | g <- games] , [ resource =? "desktop_window" --> doIgnore , className =? "Epdfview" --> doShift "read" , className =? "Okular" --> doShift "read" , title =? "mutt" --> doShift "mail" , title =? "irssi" --> doShift "irc" , title =? "Save a Bookmark" --> doFloat , title =? "Add-ons" --> doFloat , className =? "Mitter" --> doShift "irc" , className =? "Evolution" --> doShift "mail" , className =? "Shredder" --> doShift "mail" , className =? "VirtualBox" --> doShift "win" , className =? "Tsclient" --> doShift "win" ] ]) <+> manageDocks -- make some space <+> composeOne [ isFullscreen -?> doFullFloat ] where floats = ["Mplayer","Gimp","Gimp-2.6","Tsclient","VirtualBox","Gtklp","smc"] webs = ["Navigator","Gran Paradiso","Firefox", "Midori", "Minefield"] games = ["roguestar-gl","neverputt","neverball","wesnoth"] -- }}} lacKeys :: [([Char], X ())] lacKeys = [ ("M-p" , runOrRaisePrompt largeXPConfig { bgHLight = colorFocusFG, fgHLight = colorNormalBG }) , ("M-g" , runOrRaise "firefox-nightly" (className =? "Minefield")) , ("M-S-g" , safePromptSelection "firefox-nightly") , ("M-w w" , workspacePrompt largeXPConfig (windows . W.view)) , ("M-w g" , windowPromptGoto largeXPConfig) , ("M-S-w w" , workspacePrompt largeXPConfig (windows . W.shift)) , ("M-S-w g" , windowPromptBring largeXPConfig) , ("M-C-n" , appendFilePrompt largeXPConfig { bgColor = colorFocusFG, fgColor = colorFocusBG } notesFile) , ("M-S-z" , safeSpawn "mocp" "-G") -- play/pause , ("M-S-," , safeSpawn "mocp" "-r") -- rev , ("M-S-." , safeSpawn "mocp" "-f") -- fwd , ("M-<Esc>" , focusUrgent) , ("M-`" , scratchpadSpawnAction defaultConfig { terminal = mTerm }) -- scratchpad , ("M-S-x" , unsafeSpawn "slock") -- screen lock , ("M-i" , raiseMaybe (runInTerm "-title irssi" "sh -c 'screen -D -R -S irc irssi'") (title =? "irssi")) , ("M-m" , raiseMaybe (runInTerm "-title mutt" "sh -c 'screen -D -R -S mail mutt'") (title =? "mutt")) , ("M-S-m", runOrRaise "evolution" (className =? "Evolution")) , ("M-e" , safeSpawn "pcmanfm" "--no-desktop") , ("M-b" , sendMessage ToggleStruts) , ("M-s" , moveTo Next NonEmptyWS) , ("M-d" , moveTo Prev NonEmptyWS) , ("M-C-s", nextWS) , ("M-C-d", prevWS) , ("M-S-s", shiftToNext) , ("M-S-d", shiftToPrev) , ("M-f" , nextScreen) , ("M-a" , prevScreen) , ("M-S-f", shiftNextScreen) , ("M-S-a", shiftPrevScreen) , ("M-z" , toggleWS) ] ++ -- Search methods -- mapped to mod-c for 'a căuta' [("M-c " ++ k, S.promptSearch largeXPConfig f) | (k,f) <- searchList ] ++ [("M-C-c " ++ k, S.selectSearch f) | (k,f) <- searchList ] searchList :: [([Char], S.SearchEngine)] searchList = [ ("g", S.google) , ("h", S.hoogle) , ("w", S.wikipedia) , ("d", S.dictionary) , ("t", S.thesaurus) , ("a", S.amazon) , ("y", S.youtube) , ("e", enro40) , ("r", roen40) ] -- vim:foldmethod=marker sw=4 sts=4 ts=4 tw=0 et ai nowrap
