稳定,快速的xmonad

一台旧电脑跑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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值