From 839a47fa588c1cbd99fe25717116c85f207dd7c1 Mon Sep 17 00:00:00 2001 From: Cedric Girard Date: Thu, 9 Feb 2012 15:20:17 +0100 Subject: [PATCH] Added prompts and cleanup --- xmonad/xmonad.hs | 195 +++++++++++++++++++++++++---------------------- 1 file changed, 105 insertions(+), 90 deletions(-) diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 4799705..a05a896 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -1,14 +1,6 @@ --- --- xmonad example config file. --- --- A template showing all available configuration hooks, --- and how to override the defaults in your own xmonad.hs conf file. --- --- Normally, you'd only override those defaults you care about. --- - import XMonad import System.Exit +import Data.List import XMonad.Hooks.DynamicLog import XMonad.Hooks.ManageDocks import XMonad.Util.Run(spawnPipe) @@ -24,26 +16,30 @@ import XMonad.Actions.GridSelect import XMonad.Actions.CycleWS import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.SetWMName - + import qualified XMonad.StackSet as W import qualified Data.Map as M - + +import XMonad.Prompt +import XMonad.Prompt.Man +import XMonad.Prompt.Shell + -- The preferred terminal program, which is used in a binding below and by -- certain contrib modules. -- myTerminal = "urxvt -e bash" - + -- Width of the window border in pixels. -- myBorderWidth = 1 - + -- modMask lets you specify which modkey you want to use. The default -- is mod1Mask ("left alt"). You may also consider using mod3Mask -- ("right alt"), which does not conflict with emacs keybindings. The -- "windows key" is usually mod4Mask. -- myModMask = mod4Mask - + -- The default number of workspaces (virtual screens) and their names. -- By default we use numeric strings, but any string may be used as a -- workspace name. The number of workspaces is determined by the length @@ -54,103 +50,106 @@ myModMask = mod4Mask -- > workspaces = ["web", "irc", "code" ] ++ map show [4..9] -- myWorkspaces = ["web","mail","3","4","5","6","irc","8","9"] - + -- Border colors for unfocused and focused windows, respectively. -- myNormalBorderColor = "white" -- myFocusedBorderColor = "#000000" myFocusedBorderColor = "red" - + ------------------------------------------------------------------------ -- Key bindings. Add, modify or remove key bindings here. -- myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ - + -- launch a terminal [ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf) - + -- launch dmenu , ((modm, xK_p ), spawn "exe=`dmenu_path_c | yeganesh` && eval \"exec $exe\"") - + -- launch gmrun , ((modm .|. shiftMask, xK_p ), spawn "gmrun") - + -- launch xmenud , ((modm, xK_x ), spawn "xmenud") - - -- close focused window + + -- shell Prompt + , ((modm .|. shiftMask, xK_x ), shellPrompt myXPConfig) + + -- man Prompt + , ((modm, xK_F1 ), manPrompt myXPConfig) + + -- close focused window , ((modm .|. shiftMask, xK_c ), kill) - + -- Rotate through the available layout algorithms , ((modm, xK_space ), sendMessage NextLayout) - + -- Reset the layouts on the current workspace to default , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) - + -- Resize viewed windows to the correct size , ((modm, xK_n ), refresh) - + -- Move focus to the next window , ((modm, xK_Tab ), windows W.focusDown) - + -- Move focus to the next window , ((modm, xK_j ), windows W.focusDown) - + -- Move focus to the previous window , ((modm, xK_k ), windows W.focusUp ) - + -- Move focus to the master window , ((modm, xK_m ), windows W.focusMaster ) - + -- Swap the focused window and the master window , ((modm, xK_Return), windows W.swapMaster) - + -- Swap the focused window with the next window , ((modm .|. shiftMask, xK_j ), windows W.swapDown ) - + -- Swap the focused window with the previous window , ((modm .|. shiftMask, xK_k ), windows W.swapUp ) - + -- Shrink the master area , ((modm, xK_h ), sendMessage Shrink) - + -- Expand the master area , ((modm, xK_l ), sendMessage Expand) - + -- Push window back into tiling , ((modm, xK_t ), withFocused $ windows . W.sink) - + -- Increment the number of windows in the master area - , ((modm , xK_comma ), sendMessage (IncMasterN 1)) - + , ((modm, xK_comma ), sendMessage (IncMasterN 1)) + -- Deincrement the number of windows in the master area - , ((modm , xK_semicolon), sendMessage (IncMasterN (-1))) - + , ((modm, xK_semicolon), sendMessage (IncMasterN (-1))) + -- toggle the status bar gap (used with avoidStruts from Hooks.ManageDocks) - , ((modm , xK_b ), sendMessage ToggleStruts) - + , ((modm, xK_b ), sendMessage ToggleStruts) + -- Quit xmonad - --, ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess)) - --, ((modm .|. shiftMask, xK_q ), spawn "gxmessage -center -buttons No:1,Yes:0 -default Yes -timeout 60 Do you really want to close Xmonad session ? && pkill xmonad") , ((modm .|. shiftMask, xK_q ), spawn "/home/cgirard/shutdown.sh") - --, ((modm .|. shiftMask, xK_q ), spawn "gnome-session-save --gui --shutdown-dialog") - + -- Restart xmonad - , ((modm , xK_q ), restart "xmonad" True) + , ((modm, xK_q ), restart "xmonad" True) - -- GridSelected - , ((modm , xK_g), goToSelected defaultGSConfig) + -- GridSelected + , ((modm, xK_g ), goToSelected defaultGSConfig) - -- Switch next/previous workspace - , ((modm , xK_Right), nextWS) - , ((modm , xK_Left), prevWS) - , ((modm .|. shiftMask , xK_Right), shiftToNext) - , ((modm .|. shiftMask , xK_Left), shiftToPrev) + -- Switch next/previous workspace + , ((modm, xK_Right ), nextWS) + , ((modm, xK_Left ), prevWS) + , ((modm .|. shiftMask , xK_Right), shiftToNext) + , ((modm .|. shiftMask , xK_Left), shiftToPrev) ] ++ - + -- -- mod-[1..9], Switch to workspace N -- mod-shift-[1..9], Move client to workspace N @@ -159,7 +158,7 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ | (i, k) <- zip (XMonad.workspaces conf) [0x26,0xe9,0x22,0x27,0x28,0x2d,0xe8,0x5f,0xe7,0xe0] , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] ++ - + -- -- mod-{z,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 -- mod-shift-{z,e,r}, Move client to screen 1, 2, or 3 @@ -179,27 +178,27 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ [((controlMask, xK_Print), spawn "sleep 0.2; scrot -s"), ((0, xK_Print), spawn "scrot")] - + ------------------------------------------------------------------------ -- Mouse bindings: default actions bound to mouse events -- myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $ - + -- mod-button1, Set the window to floating mode and move by dragging [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w)) - + -- mod-button2, Raise the window to the top of the stack , ((modMask, button2), (\w -> focus w >> windows W.swapMaster)) - + -- mod-button3, Set the window to floating mode and resize by dragging , ((modMask, button3), (\w -> focus w >> mouseResizeWindow w)) - + -- you may also bind events to the mouse scroll wheel (button4 and button5) ] - + ------------------------------------------------------------------------ -- Layouts: - + -- You can specify and transform your layouts by modifying these values. -- If you change layout bindings be sure to use 'mod-shift-space' after -- restarting (with 'mod-q') to reset your layout state to the new @@ -209,23 +208,23 @@ myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $ -- which denotes layout choice. -- myLayout = spacing 3 $ avoidStruts $ - tiled ||| Mirror tiled ||| Full ||| Grid ||| simpleFloat - where + tiled ||| Mirror tiled ||| Full ||| Grid ||| simpleFloat + where -- default tiling algorithm partitions the screen into two panes - tiled = Tall nmaster delta ratio - + tiled = Tall nmaster delta ratio + -- The default number of windows in the master pane - nmaster = 1 - + nmaster = 1 + -- Default proportion of screen occupied by master pane - ratio = 56/100 - + ratio = 56/100 + -- Percent of screen to increment by when resizing panes - delta = 3/100 - + delta = 3/100 + ------------------------------------------------------------------------ -- Window rules: - + -- Execute arbitrary actions and WindowSet manipulations when managing -- a new window. You can use this to, for example, always float a -- particular program, or have a client always appear on a particular @@ -240,35 +239,38 @@ myLayout = spacing 3 $ avoidStruts $ -- myManageHook = composeAll [ className =? "MPlayer" --> doFloat --- , className =? "Gimp" --> doFloat , className =? "Pidgin" --> doF (W.shift "irc") , className =? "Xchat" --> doF (W.shift "irc") + , title =? "weechat 0.3.6" --> doF (W.shift "irc") + --, fmap ("Oracle" `isPrefixOf`) title --> doF (W.shift "irc") , className =? "Thunderbird" --> doF (W.shift "mail") , className =? "Lanikai" --> doF (W.shift "mail") , className =? "Shredder" --> doF (W.shift "mail") , className =? "Miramar" --> doF (W.shift "mail") - , className =? "Gcalctool" --> doFloat + , className =? "Daily" --> doF (W.shift "mail") + , className =? "Gcalctool" --> doFloat , className =? "VirtualBox" --> doFloat , className =? "Xmessage" --> doFloat , className =? "Gxmessage" --> doFloat , className =? "DialogBox" --> doFloat , resource =? "Download" --> doFloat , resource =? "Browser" --> doFloat + , resource =? "Toplevel" --> doFullFloat , resource =? "Dialog" --> doFloat , resource =? "desktop_window" --> doIgnore , resource =? "kdesktop" --> doIgnore ] - <+> manageDocks - <+> composeOne + <+> manageDocks + <+> composeOne [ isFullscreen -?> doFullFloat ] - + -- Whether focus follows the mouse pointer. myFocusFollowsMouse :: Bool myFocusFollowsMouse = True - - + + ------------------------------------------------------------------------ -- Status bars and logging - + -- Perform an arbitrary action on each internal state change or X event. -- See the 'DynamicLog' extension for examples. -- @@ -281,22 +283,35 @@ myLogHook pipe = dynamicLogWithPP xmobarPP , ppCurrent = xmobarColor "#AE6F38" "" . wrap "[" "]" , ppTitle = xmobarColor "#6B8836" "" . shorten 60 } - >> ewmhDesktopsLogHook - >> setWMName "LG3D" - + >> ewmhDesktopsLogHook + >> setWMName "LG3D" + +------------------------------------------------------------------------ +-- Prompts +-- +myXPConfig = defaultXPConfig + --{ + -- font = "-*-terminus-*-*-*-*-12-*-*-*-*-*-*-u" + -- ,fgColor = "#00FFFF" + -- , bgColor = "#000000" + -- , bgHLight = "#000000" + -- , fgHLight = "#FF0000" + -- , position = Top + --} + ------------------------------------------------------------------------ -- Startup hook - + -- Perform an arbitrary action each time xmonad starts or is restarted -- with mod-q. Used by, e.g., XMonad.Layout.PerWorkspace to initialize -- per-workspace layout choices. -- -- By default, do nothing. myStartupHook = return () - + ------------------------------------------------------------------------ -- Now run xmonad with all the defaults we set up. - + -- Run xmonad with the settings you specify. No need to modify this. -- main = do @@ -310,11 +325,11 @@ main = do workspaces = myWorkspaces, normalBorderColor = myNormalBorderColor, focusedBorderColor = myFocusedBorderColor, - + -- key bindings keys = myKeys, mouseBindings = myMouseBindings, - + -- hooks, layouts layoutHook = myLayout, manageHook = myManageHook,