现在的位置: 首页 > 综合 > 正文

稳定,快速的xmonad

2014年01月20日 ⁄ 综合 ⁄ 共 6814字 ⁄ 字号 评论关闭

一台旧电脑跑stumpwm有点吃力,就换成了很久以前使用过的xmonad,网上一搜,发现xmonad的开发还比较活跃!简单修改了以前的配置就可以运行了,系统跑起来既快又稳定,很适合编程序。updated on github

.安装(先装好GHC)

$cabal update && cabal install xmonad && cabal install xmonad-contrib

$ghc-pkg list|grep -i xmonad
xmonad-0.11
xmonad-contrib-0.11


.编译(将xmonad.hs拷入~/.xmonad)

$xmonad --recompile


.将`exec xmonad`写入~/.xinitrc


.附xmonad.hs

import qualified Data.Map as M
import System.IO
--import Graphics.X11.Xlib
import Data.Char (isSpace)

import XMonad
import qualified XMonad.StackSet as W 

import XMonad.Actions.GridSelect
--import XMonad.Actions.WindowMenu

import XMonad.Hooks.ManageDocks
--import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageHelpers
--import XMonad.Hooks.UrgencyHook
-- Java swing fix
import XMonad.Hooks.ICCCMFocus (takeTopFocus)
import XMonad.Hooks.SetWMName (setWMName)

import XMonad.Layout.IM
import XMonad.Layout.NoBorders
import XMonad.Layout.WindowNavigation
import XMonad.Layout.ResizableTile
import XMonad.Layout.PerWorkspace  (onWorkspace)
import XMonad.Layout.LayoutHints   (layoutHintsWithPlacement)
import XMonad.Layout.SimplestFloat (simplestFloat)
import XMonad.Layout.Column
import XMonad.Layout.ShowWName

import XMonad.Prompt
import XMonad.Prompt.RunOrRaise (runOrRaisePrompt)

import XMonad.Util.Run
import XMonad.Util.EZConfig(additionalKeys)
import XMonad.Util.WindowProperties (getProp32s)
import XMonad.Util.Scratchpad --招之既来,挥之既去的xPad。这里只配置了作为计算嚣的Prolog Pad,使用XMonad.Util.NamedScratchpad可配置各种各样的Pad,很方便。

--myStatusBar = "dzen2 -x '0' -y '0' -h '24' -w '1280' -ta 'l' -fg '#FFFFFF' -bg '#161616' -fn '-*-simsun-medium-r-normal-*-12-*-*-*-*-*-iso10646-1'"
--myBtmStatusBar = "conky -c /home/serrghi/.conky_bottom_dzen | dzen2 -x '0' -w '1280' -h '24' -ta 'c' -bg '#161616' -fg '#FFFFFF' -fn '-*-bitstream vera sans-medium-r-normal-*-11-*-*-*-*-*-*-*' -y '776'"
--xmobar   = "~/.cabal/bin/xmobar"
--xmobarrc = "~/.xmonad/xmobarrc"

main = do
    --xmobar <- spawnPipe $ xmobar ++ " " ++ xmobarrc
    --dzenTopBar <- spawnPipe myStatusBar
    --dzenBtmBar <- spawnPipe myBtmStatusBar
    xmonad {- $ withUrgencyHook FocusHook -} $ {- ewmh -} defaultConfig {
        --handleEventHook = handleEventHook defaultConfig <+> fullscreenEventHook
       borderWidth		= 1
      , focusedBorderColor 	= "#ff6666"
      , normalBorderColor 	= "#2222aa"
      , manageHook = manageHook defaultConfig <+> myManageHook
      , workspaces = ["1-work","2-game","3-test"] -- ++ map show [3..9]
      , terminal = "xterm"
      , modMask  = mod4Mask
      , focusFollowsMouse  = False
      , startupHook = myStartupHook
        --, logHook = myLogHook dzenTopBar
        --, logHook = takeTopFocus >> myLogHook xmobar
      , logHook = myLogHook
      , layoutHook = showWName myLayout
   } `additionalKeys` myKeys

myStartupHook :: X ()
myStartupHook = do 
	return ()
    --spawnOnce "fcitx"
    --spawnOnce "lxpanel"

myLogHook :: X ()
myLogHook = return ()

--myLogHook :: Handle -> X ()
-- myLogHook h = dynamicLogWithPP $ defaultPP
--       {   ppCurrent	= dzenColor "black" "green" . pad
-- 	, ppVisible	= dzenColor "black" "lightgreen" . pad
-- 	, ppHidden	= dzenColor "#cccccc" "" . pad
-- 	, ppHiddenNoWindows = dzenColor "#444444"  "" . pad
-- 	, ppUrgent	= dzenColor "" "red"
-- 	, ppWsSep    = " "
-- 	, ppSep      = " | "
-- 	, ppTitle    = (" " ++) . dzenColor "green" "" . dzenEscape
-- 	, ppOutput   = hPutStrLn h 
--       }

-- myLogHook xmproc = dynamicLogWithPP xmobarPP
--   { ppOutput = hPutStrLn xmproc
--   , ppTitle  = xmobarColor "#ca8f2d" "" . shorten 72
--   , ppLayout = const ""
--   , ppHidden = \ws -> if ws == "NSP" then "" else ws
--   , ppCurrent = xmobarColor "yellow" ""
--   }

myLayout = windowNavigation $ avoidStruts $ noBorders --smartBorders
           $ onWorkspace "1-work" simplestFloat
           $ onWorkspace "2-game" simplestFloat
           $ onWorkspace "3-test"  (Column 0.60)
           $ simplestFloat  --stdLayouts
     -- where
    --      stdLayouts = Mirror tall ||| tall ||| full      

    --      tall 	= Tall nmaster delta ratio
    --      full    = hinted (noBorders Full)

    -- -- like hintedTile but for any layout
    --      hinted l        = layoutHintsWithPlacement (0,0) l
    --      nmaster         = 1
    --      delta           = 3/100
    --      ratio           = toRational (2 / (1 + sqrt 5 :: Double)) -- golden ratio

myManageHook :: ManageHook
myManageHook = (composeAll . concat $
    [[className =? c --> doIgnore | c <- myIgnores]
    ,[className =? c --> doFloat | c <- myCFloats]
    ,[isFullscreen --> doFullFloat]
    ]) <+> manageTypes <+> manageDocks <+> scratchpadManageHook (W.RationalRect 0.50 0.375 0.50 0.60)
  where
    myIgnores = ["trayer", "desktop", "desktop_window"]
    myCFloats = ["GQview", "MPlayer", "Vncviewer","Xmessage"]
    role = stringProperty "WM_WINDOW_ROLE"
    name = stringProperty "WM_NAME"

manageTypes :: ManageHook
manageTypes = checkType --> doCenterFloat

checkType :: Query Bool
checkType = ask >>= \w -> liftX $ do
    m <- getAtom "_NET_WM_WINDOW_TYPE_MENU"
    d <- getAtom "_NET_WM_WINDOW_TYPE_DIALOG"
    u <- getAtom "_NET_WM_WINDOW_TYPE_UTILITY"
    mbr <- getProp32s "_NET_WM_WINDOW_TYPE" w

    case mbr of
        Just [r] -> return $ elem (fromIntegral r) [m,d,u]
        _        -> return False

-- Theme {{{
-- Color names are easier to remember:
colorOrange          = "#ff7701"
colorDarkGray        = "#171717"
colorPink            = "#e3008d"
colorGreen           = "#00aa4a"
colorBlue            = "#008dd5"
colorYellow          = "#fee100"
colorWhite           = "#cfbfad"
 
colorNormalBorder    = "#1c2636"
colorFocusedBorder   = "#ebac54"
barFont  = "terminus"
barXFont = "inconsolata:size=14"
xftFont = "xft: inconsolata-14"
--}}}

-- Prompt Config {{{
myXPConfig :: XPConfig
myXPConfig = defaultXPConfig {
          font                  = "xft:WenQuanYi Zen Hei:pixelsize=16"
        , bgColor               = colorDarkGray
        , fgColor               = colorGreen
        , bgHLight              = colorGreen
        , fgHLight              = colorDarkGray
        , promptBorderWidth     = 0
        , height                = 14
        , historyFilter         = deleteConsecutive
}

-- Run"" or Raise Menu
largeXPConfig :: XPConfig
largeXPConfig = myXPConfig
                { font = xftFont
                , height = 20
                }
-- }}}

emacs = "emacs -geometry 176x33+0+376"
xterm="xterm -geometry 159x25+0+438"
eweiqi="wine \"c:/Program Files/eweiqi/LiveBaduk.exe\""
winxp="VBoxManage startvm winxp"

myKeys = let modm = mod4Mask in
    [ ((modm, xK_w), spawn "opera")
    , ((modm, xK_e), spawn emacs)
    , ((modm, xK_g), goToSelected defaultGSConfig)
    , ((modm, xK_p), spawnSelected defaultGSConfig [
              xterm, "opera", emacs, eweiqi, winxp])
    , ((modm .|. shiftMask, xK_p),runOrRaisePrompt largeXPConfig)
    , ((modm, xK_F11), spawn "sudo /sbin/shutdown -r now")
    , ((modm, xK_F12), spawn "sudo /sbin/shutdown -p now")
    --, ((modm .|. shiftMask, xK_Print), spawn "sleep 0.2; scrot -s")
    , ((modm, xK_Print), spawn "scrot '/tmp/%Y-%m-%d_%H:%M:%S_$wx$h_scrot.png' -e 'mv $f ~'")
    , ((modm, xK_k), kill)
    , ((modm, xK_space), scratchpadSpawnActionCustom "xterm -name scratchpad -e pl")

    --, ((modm, xK_c), inputPrompt myXPConfig "Word" >>= flip whenJust (\word-> spawn $ "wn " ++ word ++ " -over" ++ "|dmenu -l 30 -nb '#000000' -nf '#FFFFFF' -fn '-*-simsun-medium-r-normal-*-16-*-*-*-*-*-iso10646-1'")) -- use dmenu to display E-E dictionary
   , ((modm, xK_c), inputPrompt myXPConfig "Word" >>= flip whenJust (\word-> spawn $ "~/bin/sdcv.sh " ++ word))  --use zenity to show E-C dictionary

    -- Window Navigation
    , ((modm, xK_Right), sendMessage $ Go R)
    , ((modm, xK_Left ), sendMessage $ Go L)
    , ((modm, xK_Up   ), sendMessage $ Go U)
    , ((modm, xK_Down ), sendMessage $ Go D)

    -- swap...
    , ((modm .|. controlMask, xK_Right), sendMessage $ Swap R)
    , ((modm .|. controlMask, xK_Left ), sendMessage $ Swap L)
    , ((modm .|. controlMask, xK_Up   ), sendMessage $ Swap U)
    , ((modm .|. controlMask, xK_Down ), sendMessage $ Swap D)
    --, ((modm .|. controlMask, xK_Up), windows W.swapUp)
    --, ((modm .|. controlMask, xK_Down), windows W.swapDown)
      
    -- sound control
    -- , ((modm .|. shiftMask, xK_Up), spawn "aumix -v+6") -- volume++ 
    -- , ((modm .|. shiftMask, xK_Down ), spawn "aumix -v-6") -- volume-- 
    -- , ((modm .|. shiftMask, xK_Left ), spawn "amixer set Master toggle") -- mute

    , ((modm .|. shiftMask, xK_r), spawn "xmonad --recompile && xmonad --restart")
    ]



.附sdcv.sh

#!/bin/sh
res=`sdcv -n $1`

if [ $? -eq 0 ]
then
zenity --info --text="$res"
else
zenity --error --text="No input provided"
fi



【上篇】
【下篇】

抱歉!评论已关闭.