Vietnamen’s Weblog

Time, Chances, Diligence, Intelligence: which is the most important?

Xmonad

with one comment

Có thể sẽ phải hơi dài dòng để giới thiệu chức năng của xmonad, nhưng thực sự rất đáng xem và dùng xmonad – một tiện ích quản lí các cửa sổ màn hình theo một trật tự tiện lợi, giúp di chuyển các cửa sổ nhanh chóng mà theo các bài viết nói là mouse-less window manager. Và quan trọng là xmonad có thể hài hòa với GNOME.

Bạn có nên dùng không? YES, IF người đã quen nhiều với môi trường dùng phím tắt, chán dùng chuột và muốn tìm cái mới.

Step 1: Để cài đặt, trong Ubuntu Intrepid 8.10

sudo apt-get install xmonad libghc6-xmonad-dev libghc6-xmonad-contrib-dev dmw-tools

If dwm-tools can not be installed, click on this link, this package contains dmenu – a lightweight application launcher integrated with xmonad.

Với Ubuntu Karmic (9.10), nếu chưa có bản Xmonad-0.9 trong distro, bạn nên download phiên bản mới với các yêu cầu phải install: ghc6, libX11-dev, libghc6-mtl-dev, và có thể sẽ phải tự down thêm X11 version 1.4.6.1 rồi tự cài đặt (theo hướng dẫn) nếu phiên bản đi kèm (kiểm tra với: ghc-pkg list X11) cũ hơn.

  • Cài đặt X11
runhaskell Setup configure --user --prefix=$HOME
runhaskell Setup build
sudo runhaskell Setup install

CHÚ Ý: NẾu bạn cài đặt ở thư mục /home/user_name/bin (với user_name là tên account của bạn), bạn phải thêm nó vào $PATH trong file ~/.bashrc

Step 2: Thiết lập file cấu hình (xem phần configuration hoặc chép file cấu hình có sẵn ở cuối bài). MỘt số chú ý là với Ubuntu Karmic ta cần sửa

–myLogHook = dynamicLogDzen
myLogHook = dynamicLogWithPP dzenPP

Step 3: Có các cách sau

  • xmonad và GNOME chạy cùng nhau (Intrepid 8.10) –> thay Metacity bằng xmonad để làm window manager cho GNOME

sudo gedit ~/.gnomerc

thêm dòng sau

export WINDOW_MANAGER=xmonad
export AWT_TOOLKIT=MToolkit # phục vụ cho các ứng dụng Java-based

logout and in again. Nếu cách này không được,  ta sẽ phải tạo 1 session (tên xmonad) riêng và sẽ login vào session này. Đọc phần “NGOẠI LỆ” ở dưới.

  • Giải pháp khác là tạo file ~/.xsession

sudo gedit ~/.xsession

và thêm đơn giản nhất là

xmonad

hoặc

export WINDOW_MANAGER=xmonad
exec gnome-session –purge-delay=3000

và khi login thì chọn mục với “xsession” or “default session”.

  • Tạo 1 entry mới, có tên là xmonad, bằng cách tạo 1 file mới với tên xmonad.desktop trong /usr/share/xsessions/ với nội dung
   [Desktop Entry]
   Encoding=UTF-8
   Name=xmonad
   Comment=This session starts xmonad
   Exec=/usr/local/bin/xmonad
   Type=Application

với phần exec là đường dẫn thực thụ dẫn tới xmonad hoặc giải pháp tốt hơn là tạo ra 1 file script /home/user_name/bin/xmonad.start [dùng đường dẫn này nếu chỉ cài đặt cho mình bạn dùng] và sửa lại

Exec=/home/user_name/xmonad.start
Type=XSession

#!/bin/bash

#xrdb -merge .Xresources

trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 15 --height 12 --transparent true --tint 0x000000 &

gnome-screensaver

# for multimedia-keys (optional)
gnome-settings-daemon

if [ -x /usr/bin/gnome-power-manager ] ; then
   sleep 1
   gnome-power-manager
fi

if [ -x /usr/bin/nm-applet ] ; then
   nm-applet --sm-disable &
fi

# control volume (optional)
# kmix --keepvisibility

# use feh for background image selection (optional)
#feh --bg-scale /mnt/archivio/foto/2008-2009-dublino/2009-04-10-stefano/hapenny-desktop.jpg &

exec /home/local/bin/xmonad

Yêu cầu cài đặt thêm tiện ích trayer (cần có libgtk2.0-dev – cài đặt dùng synaptic) hoặc tốt hơn là cài .DEB package có sẵn.

Step 4: cài xmonad-contrib

http://hackage.haskell.org/cgi-bin/hackage-scripts/package/xmonad-contrib

Cài đặt tương tự với X11. Có thể phải cài thêm utf8-string package.

Step 5:một số tiện ích cần có

  • Cài đặt gmrun (có thể cài sau xmonad) – gọi là Shift-Modkey-p

Sau đó có thể biên dịch từ source của Xmonad-0.9 với

runhaskell Setup.lhs configure --user --prefix=$HOME
runhaskell Setup.lhs build
sudo runhaskell Setup.lhs install --user
  • Cài đặt dmenu – gọi là Modkey-p
runhaskell Setup.lhs configure --flags="with_xft" --prefix=$HOME
runhaskell Setup.lhs build
sudo runhaskell Setup.lhs install

Có thể sẽ phải cài thêm libghc6-x11-xft, libghc6-parsec2-dev, libghc6-stm-dev, utf8-string. Dùng synaptic với 3 package đầu, cái cuối đã nói ở trên.

  • Cài đặt feh hoặc dùng synaptic để install

Step 6: logout và login với session là xmonad

Configuration file

Cũng như bao chương trình trên nền Linux, các thông số cấu hình của Xmonad đều được lưu vào trong 1 file, ~/.xmonad/xmonad.hs. File cấu hình được viết bằng ngôn ngữ Haskell, nên nếu hiểu nó sẽ có nhiều thuận lợi hơn. Bên dưới có file cấu hình soạn sẵn để có thể chép vào để dùng, và một số phần chi tiết sẽ được giới thiệu ở đây

  • Vì xmonad là một mouse-less window manager, Xmonad hỗ trợ mạnh các phím tắt (key-binding) với phím chủ lực (mod key) mặc định là left-Alt key (key-code is mod1Mask). Tuy nhiên, left-Alt key có thể tác động đến các key-binding có sẵn; đặc biệt với ai hay dùng Emacs khi left-Alt được triệt để sử dụng. Vì thế, ta có một thay đổi nhỏ trong file cấu hình

modMask = mod4Mask

Một số key có thể làm mod key là: right-Alt key (key-code: mod3Mask), window-key (key-code: mod4Mask). Recommend right-Alt key to be mod key if you’re using a laptop.

  • (optional) Trong GNOME, terminal emulator là gnome-terminal. Trong Xmonad, terminal emulator là xterm. Xterm đơn giản và gọn nhẹ hơn Gnome-terminal. Nếu ai thích gnome-terminal –> chỉnh sửa file cấu hình

thay                                                                    bằng

myTerminal      = “xterm” || myTerminal      = “gnome-terminal”

  • (optional) Linux-based OS cho phép thiết lập nhiều hơn một màn hình cùng lúc (dùng màn hình ảo). Xmonad cũng cho phép ta cấu hình số lượng màn hinh ảo, tên của mỗi màn hình (default is 9 virtual screens with their name are the corresponding digit values):

myWorkspaces    = [“1″,”2″,”3″,”4″,”5″,”6″,”7″,”8″,”9”]

Để chuyển qua lại giữa các virtual screen, dùng key-binding mod-index (với index là 1,2,3….. Để chuyển active window từ virtual screen này sang virtual screen khác, ta dùng key-binding mod-shift-index.

  • thiết lập một số chương trình để lúc bạn run nó, chỉ có thể là floated window (không phải là tiled window theo default)
  • (optional) chuyển đổi layout modes. Layout mode (titling algorithm) đề cập đến việc sắp xếp các cửa sổ lúc được mở ra trên một virtual screen. Số lượng cửa sổ có thể là 0 hoặc nhiều.Nếu có nhiều cửa sổ, tại một thời điểm chỉ có 1 cửa sổ active. Để chuyển qua lại giữa các cửa sổ, ta dùng key-binding: mod-j (clock-wise) hay mod-k (counter-clockwise). Để di chuyển cửa sổ, dùng key-binding: mod-shift-j (clock-wise) hay mod-shift-k (counter-clockwise)

Ta có thể quy định nhiều hơn một layout mode (tuy nhiên tại 1 thời điểm chỉ có 1 layout mode active) và có thể chuyển qua layout mode (titling algorithm) khác dùng key-binding mod-Space. Trở về layout-mode mặc định, ta dùng mod-shift-space.

Layout mode mặc định: xmonad chia màn hình ra làm 2 bên (gọi là panes). Pane bên trái gọi là master (mặc định là chứa 1 của sổ duy nhất, và thường là cửa sổ đang làm việc). Panes bên phải sẽ chứa các cửa sổ còn lại, phân đều diện tích cho mỗi cửa sổ. Để co giãn panes theo chiều ngang, dùng key-binding mod-h (giảm master), mod-k (tăng master). Titling algorithm mặc định này có tên là tiled.

tiled = Tall nmaster delta ratio
nmaster  = 1        - default number of windows in the master pane
ratio         = 1/2    - default proportion of screen occupied by master pane
delta         = 3/100 - percent of screen to increment when resizing the pane

Muốn thêm cửa sổ vào master pane: mod-comma (,), muốn đưa ra khỏi master pane: mode-period (.).  Trở ngay về master pane, dùng mod-m

----------------------------------
|                 |      sub1    | 
|                 |..............|
|       Master    |              |
|                 |      subn    |
|_________________|______________|

Các layout khác có thể dùng là: Mirror tiled (như xmonad, nhưng master pane giờ ở bên trên – kích thước dài hơn), fullscreen (chỉ một cửa sổ active chiếm trọn màn hình), Circle

  • (optional) key-binding – Đây là phần làm nên sự thành công của Xmonad. Hàm myKeys qui định các key-bindings
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
   -- launch a terminal (shift-mod-RET)
    [ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
   -- launch dmenu (mod-p)
    , ((modm,               xK_p     ), spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\"")
   -- launch gmrun (shift-mod-p) - Make sure to install gmrun
    , ((modm .|. shiftMask, xK_p     ), spawn "gmrun")

NOTE:

  • xK_a –> xK_z : các kí tự từ a –>z
  • shiftMask           : shift + mod key

Chú ý là mỗi virtual screen có thể có một layout mode khác nhau đang được kích hoạt.

ADVANCED USER (per-workspace layout)

Để chuyển active window vào trong master pane, dùng key-binding mod-RET

Tương tự, mỗi virtual screen cũng có thể

tabbed, spiral, three-column…), prompts, program launchers, the ability to manipulate windows and workspaces in various ways, alternate navigation modes, and much more. There are also “meta-modules” which make it easier to write new modules and extensions.

OTHERS:

(2) Wireless connection –>

  • (1) bổ sung nội dung file ~/.xinitrc

sudo gedit ~/.xinitrc

#!/bin/bash
nm-appplet &

hoặc dùng command line
1) sudo ifconfig eth1 (với eth1 là wireless interface, thay đổi cho phù hợp với bạn)
2) iwlist eth1 scanning (hiển thị các network nhận diện được)
3) sudo eth1 essid <network_name> ex. sudo eth1 essid netgear
4) sudo dhclient eth1
5) ping www.google.com (kiểm tra kết nối được chưa)

  • (2) Cài đặt stalonetray

sudo apt-get stalonetray

và đưa nó vào startup list (trong~/.xinitrc)

stalonetray &

(3) Thêm một số chức năng: Mod-Shift-z (to lock screen by screeen saver)

[ ((mod4Mask .|. shiftMask, xK_z), spawn "xscreensaver-command -lock")
        , ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
        , ((0, xK_Print), spawn "scrot")
        ]

sudo apt-get install xscreensaver

KEY-BINDING:

Mod-shift-Enter          :  hiển thị cửa sổ terminal mới
Mod-p                       :   hiển thị top window-bar cho phép ta gọi các chương trình bất kì (sử dụng dmenu tool)
Mod-Shift-c               : để đóng một cửa sổ (thuật ngữ của xmonad là frame) – keybinding Alt-F4 không còn hiệu lực
Mod-Spacebar          : chuyển đổi các layout khác nhau giữa các frame
Mod-Shift-Spacebar : trở về với layout ban đầu
Mod-j hay Mod-k      : chuyển đổi qua lại giữa các frame trong cùng 1 workspace
Mod-enter                : di chuyển active frame thành master pane (là frame có kích thước lớn nhất)
Mod-h hay Mod-l     :thu nhỏ, gia tăng chiều rộng của master pane
Mod – [wordspace number] : với [workspace number] là số workspace đã định trong config file, di chuyển từ workspace này sang workspace khác
Mod-Shift-[wordspace number] :di chuyển active frame sang workspace chỉ định
Mod-q                       : reload xmonad (dùng để  cập nhật khi có các thay đổi trong file cấu hình)
Mod-shift-q             : thoát xmonad
Shift-Mod-p            : chạy gmrun, một tiện ích nhỏ gọn nhưng rất hiệu quả cho phép chạy một chương trình cùng với command-line options của nó.

Mouse

Mod-left-mouse-button drag           = di chuyển (float) một frame
Mod-t                        : chuyển float frame về lại tited frame (có vị trí cố định theo cấu hình xmonad)Mod-right-mousse-button                = resize một frame

References:

  1. http://xmonad.wordpress.com/
  2. http://xmonad.wordpress.com/2009/02/08/xmonad-a-review/
  3. http://xmonad.wordpress.com/2009/10/26/xmonad-0-9-available-now/
  4. http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Doc-Extending.html
  5. http://www.haskell.org/haskellwiki/Xmonad/Using_xmonad_in_Gnome#Introduction
  6. http://www.haskell.org/haskellwiki/Xmonad/Config_archive/John_Goerzen%27s_Configuration
  7. http://xmonad.org/
  8. http://ubuntuforums.org/showthread.php?t=975329
  9. http://ubuntuforums.org/showthread.php?t=843341
  10. http://ubuntu-snippets.blogspot.com/2008/08/xmonad-tiling-window-manager.html
  11. http://stalonetray.sourceforge.net
  12. http://reachbeyondgrasp.blogspot.com/2007/11/xmonad-on-ubuntu-setting-it-up.html
  13. http://ivanmiljenovic.wordpress.com/2008/01/20/xmonad/
  14. http://xmonad.openbsd-box.org
  15. http://hackage.haskell.org/package/X11-1.4.6.1
  16. http://darcs.haskell.org/X11/
  17. http://arjuna.deltoso.net/articoli/my-configuration-of-xmonad-window-manager-with-xmobar-and-trayer/en
  18. http://packages.debian.org/sid/trayer
  19. http://versia.com/2009/10/18/xmonad-metacity-gnome/
Configuration file: ~/.xmonad/xmonad.hs
--
-- 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 XMonad.Config.Gnome
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.EwmhDesktops
import XMonad.Actions.CycleWS -- provide binding to cycle forward/backward through list of workspaces
import qualified XMonad.StackSet as W

import XMonad.Util.Run(spawnPipe)
import XMonad.Util.EZConfig(additionalKeys)
--import System.IO

import qualified XMonad.StackSet as W
import qualified Data.Map        as M

-- The preferred terminal program, which is used in a binding below and by
-- certain contrib modules.
--
myTerminal      = "gnome-terminal" --"xterm"

-- 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       = mod1Mask

-- The mask for the numlock key. Numlock status is "masked" from the
-- current modifier status, so the keybindings will work with numlock on or
-- off. You may need to change this on some systems.
--
-- You can find the numlock modifier by running "xmodmap" and looking for a
-- modifier with Num_Lock bound to it:
--
-- > $ xmodmap | grep Num
-- > mod2        Num_Lock (0x4d)
--
-- Set numlockMask = 0 if you don't have a numlock key, or want to treat
-- numlock status separately.
--
myNumlockMask   = mod2Mask

-- 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
-- of this list.
--
-- A tagging example:
--
-- > workspaces = ["web", "irc", "code" ] ++ map show [4..9]
--
myWorkspaces    = ["1","2","3","4","5","6","7","8","9"]

-- Border colors for unfocused and focused windows, respectively.
--
myNormalBorderColor  = "#dddddd"
myFocusedBorderColor = "#ff0000"

------------------------------------------------------------------------
-- Key bindings. Add, modify or remove key bindings here.
--
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
   -- launch a terminal (shift-mod-RET)
    [ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
   -- launch dmenu (mod-p)
    , ((modm,               xK_p     ), spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\"")
   -- launch gmrun (shift-mod-p) - Make sure to install gmrun
    , ((modm .|. shiftMask, xK_p     ), spawn "gmrun")
   -- close focused window (shift-mod-c)
    , ((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 (shift-mod-space)
    , ((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  (mod-tab)
    , ((modm,               xK_Tab   ), windows W.focusDown)
   -- Move focus to the next window  (mod-j)
    , ((modm,               xK_j     ), windows W.focusDown)
   -- Move focus to the previous window (mod-k)
     , ((modm,               xK_k     ), windows W.focusUp  )
   -- Move focus to the master window (mod-m)
     , ((modm,               xK_m     ), windows W.focusMaster  )
   -- Swap the focused window and the master window (mod-RET)
    , ((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 (mod-,)
    , ((modm              , xK_comma ), sendMessage (IncMasterN 1)) 
   -- Deincrement the number of windows in the master area
    , ((modm              , xK_period), sendMessage (IncMasterN (-1)))
   -- toggle the status bar gap
   -- TODO, update this binding with avoidStruts , ((modm , xK_b ), sendMessage ToggleStruts)
   -- Quit xmonad (mod-shift-q)
    , ((modm .|. shiftMask, xK_q     ), io (exitWith ExitSuccess))
   -- Restart xmonad
    , ((modm              , xK_q     ), restart "xmonad" True)
    ]
    ++

    --
    -- mod-[1..9], Switch to workspace N
    -- mod-shift-[1..9], Move client to workspace N
    --
    [((m .|. modm, k), windows $ f i)
        | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
        , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
    ++

    --
    -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
    -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
    --
    [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
        | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
        , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]
    ]
    ++
    -- moving workspaces (CycleWS)
    [
    --------- mod-Down
     ((modm      , xK_Down     ), nextWS)
    ,((modm      , xK_Up       ), prevWS)
    ]

------------------------------------------------------------------------
-- 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
-- defaults, as xmonad preserves your old layout settings by default.
--
-- The available layouts.  Note that each layout is separated by |||,
-- which denotes layout choice.
--
-- myLayout = tiled ||| Mirror tiled ||| Full
myLayout = avoidStruts (tiled ||| Mirror tiled ||| Full) ||| Full
  where
     -- default tiling algorithm partitions the screen into two panes
     tiled   = Tall nmaster delta ratio

     -- The default number of windows in the master pane
     nmaster = 1

     -- Default proportion of screen occupied by master pane
     ratio   = 1/2

     -- Percent of screen to increment by when resizing panes
     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
-- workspace.
--
-- To find the property name associated with a program, use
-- > xprop | grep WM_CLASS
-- and click on the client you're interested in.
--
-- To match on the WM_NAME, you can use 'title' in the same way that
-- 'className' and 'resource' are used below.
--
myManageHook = composeAll
    [ className =? "MPlayer"        --> doFloat
    , className =? "Gimp"           --> doFloat
    , resource  =? "desktop_window" --> doIgnore
    , resource  =? "kdesktop"       --> doIgnore ]

-- 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.
--
-- To emulate dwm's status bar
--
-- > logHook = dynamicLogDzen
--
-- myLogHook = return ()
myLogHook = dynamicLogDzen

------------------------------------------------------------------------
-- 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 = xmonad defaults

main = xmonad $ defaults
                  { manageHook = manageDocks <+> manageHook defaultConfig
                  , logHook    = ewmhDesktopsLogHook
                  , modMask = mod4Mask -- rebind Mod key
                  }

-- ~ main = xmonad $ gnomeConfig {
-- ~ 	logHook    = ewmhDesktopsLogHook
-- ~ 	}

-- A structure containing your configuration settings, overriding
-- fields in the default config. Any you don't override, will
-- use the defaults defined in xmonad/XMonad/Config.hs
--
-- No need to modify this.
--
defaults = defaultConfig {
      -- simple stuff
        terminal           = myTerminal,
        focusFollowsMouse  = myFocusFollowsMouse,
        borderWidth        = myBorderWidth,
        modMask            = myModMask,
        numlockMask        = myNumlockMask,
        workspaces         = myWorkspaces,
        normalBorderColor  = myNormalBorderColor,
        focusedBorderColor = myFocusedBorderColor,

      -- key bindings
        keys               = myKeys,
        mouseBindings      = myMouseBindings,

      -- hooks, layouts
        layoutHook         = myLayout,
        manageHook         = myManageHook,
        logHook            = myLogHook,
        startupHook        = myStartupHook
    }
Step 5:

Written by vietnamen

Tháng Ba 25, 2009 lúc 8:33 chiều

Một phản hồi

Subscribe to comments with RSS.

  1. […] better with Ubuntu, Tin học, Ubuntu | Tags: bash shell, gnome-terminal, shell Xem Xterm, Xmonad, […]


Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: