XMonad 0.13

R.V.
Но... Там же зависимость к нему обязательная, занимающая 1.1 GB в распакованном виде. о_0
Спасибо, конечно, но...
xmonad написан на haskell, а это совсем другой язык программирования и логично, что у него свой компилятор, доки, etc
Данный пакет называется ghc (Glasgow Haskell Compiler), он и содержит все инструменты для работы с haskell.
Кстати, по поводу кликабельных ws в xmobar'е - я их таки прикрутил к своему конфигу. Скучно было, надо было как-то убить время, вот и занялся этим. В общем, конфиг основательно перепилил, но нужного поведения добился.
xmonad.hs
import XMonad.Util.Run(spawnPipe)
..........
-- Clickable workspaces
xmobarEscape = concatMap doubleLts
    where doubleLts '<' = "<<"
          doubleLts x   = [x]

myWorkspaces = clickable . (map xmobarEscape) $ [ "W", "M", "E", "F", "S", "V", "P", "J", "T" , "X" , "XI" , "XII"]
    where clickable l = [ "<fn=4><action=`xdotool key 0xffeb+" ++ show (n) ++ "` button=1>" ++ ws ++ "</action></fn>" |
                        (i,ws) <- zip ["0x31", "0x32", "0x33", "0x34", "0x35", "0x36", "0x37", "0x38", "0x39", "0x30", "0x2d", "0x3d"] l,
                        let n = i
                        ]

-- Layouts:
myLayoutHook =  avoidStruts
                $ minimize
                $ Tog.toggleLayouts (noBorders Full)
                $ smartBorders
                $ onWorkspace (myWorkspaces !! 0) myWL
                $ onWorkspace (myWorkspaces !! 1) myML
                $ onWorkspace (myWorkspaces !! 2) myEL
                $ onWorkspace (myWorkspaces !! 3) myFL
                $ onWorkspace (myWorkspaces !! 4) mySL
                $ onWorkspace (myWorkspaces !! 5) myVL
                $ onWorkspace (myWorkspaces !! 6) myPL
                $ onWorkspace (myWorkspaces !! 7) myJL
                $ onWorkspace (myWorkspaces !! 8) myTL
                $ myRTL1 ||| myMRTL1 ||| Full
.................

-- Windows rules:
myManageHook = composeAll . concat $
    [
      [className =? c                     --> doShift (myWorkspaces !! 0)   <+> viewShift (myWorkspaces !! 0)   | c <- myWeb]
    , [className =? c                     --> doShift (myWorkspaces !! 1)                                       | c <- myMail]
    , [className =? c                     --> doShift (myWorkspaces !! 2)   <+> viewShift (myWorkspaces !! 2)   | c <- myEdit]
    , [className =? c                     --> doShift (myWorkspaces !! 3)   <+> viewShift (myWorkspaces !! 3)   | c <- myFile]
    , [className =? c                     --> doShift (myWorkspaces !! 4)   <+> viewShift (myWorkspaces !! 4)   | c <- mySystem]
    , [className =? c                     --> doShift (myWorkspaces !! 5)   <+> viewShift (myWorkspaces !! 5)   | c <- myVideo]
    , [className =? c                     --> doShift (myWorkspaces !! 6)   <+> viewShift (myWorkspaces !! 6)   | c <- myPic]
    , [className =? c                     --> doShift (myWorkspaces !! 7)   <+> viewShift (myWorkspaces !! 7)   | c <- myWork]
    , [className =? c                     --> doShift (myWorkspaces !! 8)   <+> viewShift (myWorkspaces !! 8)   | c <- myTorrent]
    , [className =? c                     --> doShift (myWorkspaces !! 9)                                       | c <- myX]
    , [className =? c                     --> doShift (myWorkspaces !! 10)  <+> viewShift (myWorkspaces !! 10)  | c <- myXI]
    , [className =? c                     --> doShift (myWorkspaces !! 11)  <+> viewShift (myWorkspaces !! 11)  | c <- myXII]
.................
    , [currentWs =? (myWorkspaces !! 0)   --> insertPosition Below Newer]
    , [currentWs =? (myWorkspaces !! 1)   --> insertPosition Below Newer]
    , [currentWs =? (myWorkspaces !! 2)   --> insertPosition Below Newer]
    , [currentWs =? (myWorkspaces !! 8)   --> insertPosition Below Newer]
    , [currentWs =? (myWorkspaces !! 9)   --> insertPosition Below Newer]
    , [currentWs =? (myWorkspaces !! 11)  --> insertPosition Below Newer]
..................
main = do
    xmproc <- spawnPipe "xmobar"
    xmonad $ ewmh $ withUrgencyHookC NoUrgencyHook urgencyConfig def
        {
          terminal           = myTerminal
        , focusFollowsMouse  = myFocusFollowsMouse
        , borderWidth        = myBorderWidth
        , modMask            = myModMask
        , workspaces         = myWorkspaces
        , normalBorderColor  = myBgColor
        , focusedBorderColor = myHLColor
        , keys               = myKeys
        , mouseBindings      = myMouseBindings
        , layoutHook         = myLayoutHook
        , manageHook         = myAllManageHook
        , handleEventHook    = myEventHook
        , logHook            = dynamicLogWithPP $ def {
                                                        ppOutput          = System.IO.hPutStrLn xmproc
                                                      , ppCurrent         = xmobarColor myHLColor ""
                                                      , ppUrgent          = xmobarColor myUrgColor ""
                                                      , ppOrder           = \(ws:l:t:_) -> [ws]
                                                      }
        , startupHook        = myStartupHook
        }
xmobarrc.hs

       , commands         = [
                              Run UnsafeStdinReader
..............
, template         = " ....... <action=`xdotool key 0xffeb+0xff1b` button=3><action=`xdotool key 0xffe3+0xffe9+0xff51` button=4><action=`xdotool key 0xffe3+0xffe9+0xff53` button=5>%UnsafeStdinReader%</action></action></action> ...... "
Результат -
ЛКМ по символу ws - переход на данный ws
ПКМ по любому символу - выполнение команды toggleWS' ["NSP"] (возврат к ws, на котором находился до этого)
Прокрутка колёсиком вперёд/назад - выполнение команд nextWS/prevWS (переключение по непустым ws вперёд/назад)

Как-то так.
Привёл все куски конфигов, которые были изменены для работы данной фишки.
Полные конфиги на гитхабе.
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
С горем пополам поставил. Сейчас не могу решить две траблщины:
1) XMobar странно себя ведет. Конфиг его не меняется, в xmonade тоже с хуками и доками ничего не делаю пока, только хоткеи дописываю. А бар то вообще пропадает со всех столов, то внезапно появляется, но при этом закрывает верхнюю часть окон. Процесс бара только один, я проверил.
2) В лисе и гимпе при нажатии на меню или любую форму заполняния, мышь и клава начисто зависают везде, кроме браузера/гимпа. Напоминает захват мыши в VirtualBox. И кроме REISUB никак не выйти из этого положения.
Сами конфиги:
Config { bgColor = "black"
	, fgColor = "grey"
	, borderColor = "black"
	, position = Static {xpos = 0, ypos = 0, width = 1728, height = 20}
	, sepChar = "%"
	, alignSep = "}{"
	, commands =
		[ Run Date "%H:%M" "date" 10
		, Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
		, Run StdinReader
		]
	, template = " %stdinreader% }{ %cpu% | %date% "
	, overrideRedirect = True
	, allDesktops = True
	, hideOnStart = False
	, persistent = True
	, lowerOnStart = False
        }

-- Модули
import XMonad  -- Главный модуль
import XMonad.Hooks.DynamicLog -- Хук для обновления информации в баре
import XMonad.Hooks.ManageDocks -- Автоматическое управление программами типа док (баром)
import XMonad.Util.Run(spawnPipe) -- Для запуска внешний приложений/скриптов
import XMonad.Util.EZConfig(additionalKeys) -- Улучшение конфигурации, использование доп.хоткеев
import System.IO -- ?
import System.Exit -- ?
import qualified XMonad.StackSet as W -- Управление клиентами (окнами)
import XMonad.Hooks.ManageHelpers -- Доп.функции ManageHooks

-- Пользовательские настройки
myTerm = "urxvt"
myBorderColor = "#000000"
myBorderColorFocused = "#8E8E8E"
myModMask = mod1Mask

main = do -- главная функция
	xmproc <- spawnPipe "xmobar" -- Подключение XMobar
	xmonad $ defaults {	-- Установка основного конфига
			manageHook = manageDocks <+> manageHook defaultConfig
        		, layoutHook = avoidStruts  $  layoutHook defaultConfig
        		, logHook = dynamicLogWithPP xmobarPP
                        		{ ppOutput = hPutStrLn xmproc
                        		, ppTitle = xmobarColor "green" "" . shorten 50
                        		}
			} `additionalKeys`
			[ ((mod1Mask .|. shiftMask, xK_q), kill)
			, ((mod1Mask, xK_Right), windows W.focusDown)
			, ((mod1Mask, xK_Left), windows W.focusUp)
			, ((mod1Mask, xK_Down), windows W.focusDown)
			, ((mod1Mask, xK_Up), windows W.focusUp)
			, ((controlMask, xK_Print), spawn "scrot -u -q 85 /home/seggoy/Documents/screens/%m-%d-%Y-%H-%M-%S-focused.png")
			]

-- Пользовательский конфиг
defaults = defaultConfig {
	terminal = myTerm
	, borderWidth = 1
	, modMask = myModMask
	, normalBorderColor = myBorderColor
	, focusedBorderColor = myBorderColorFocused
	}

И вот скрин, как XMobar закрывает окна:
Seggoy
А бар то вообще пропадает со всех столов, то внезапно появляется, но при этом закрывает верхнюю часть окон.

import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers
..........
myManageHook = composeAll . concat $
    [
..........

    , [manageDocks]

    ]
........
main = do
    xmproc <- spawnPipe "xmobar"
    xmonad $ ewmh $ withUrgencyHookC NoUrgencyHook urgencyConfig def
        {
..............
        , manageHook         = myAllManageHook
.............
        }
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
Seggoy
xmonad $ defaults
неактуально
в текущей версии нужно использовать
xmonad $ def
Все вхождения типа defaultConfig следует заменить на def - так стало в версии 0.13

Посмотрел конфиги - сложно что-либо сказать сходу, ибо там как-то всё в куче, никакой упорядоченности, всё вперемешку...
Сейчас скопирую себе на комп и попробую разобраться.
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
xmonad.hs:27:18: error:
    Variable not in scope: ewmh :: XConfig a0 -> XConfig l0

xmonad.hs:27:25: error:
    Variable not in scope:
      withUrgencyHookC
        :: t0
           -> t1
           -> XConfig
                (XMonad.Layout.LayoutModifier.ModifiedLayout
                   AvoidStruts (Choose Tall (Choose (Mirror Tall) Full)))
           -> XConfig a0

xmonad.hs:27:42: error:
    Data constructor not in scope: NoUrgencyHook

xmonad.hs:27:56: error: Variable not in scope: urgencyConfig

xmonad.hs:28:39: error:
    * Variable not in scope: myAllManageHook :: ManageHook
    * Perhaps you meant `myManageHook` (line 21)

-- Modules
import XMonad  -- Главный модуль
import XMonad.Hooks.DynamicLog -- Хук для обновления информации в баре
import XMonad.Hooks.ManageDocks -- Автоматическое управление программами типа док (баром)
import XMonad.Util.Run(spawnPipe) -- Для запуска внешний приложений/скриптов
import XMonad.Util.EZConfig(additionalKeys) -- Улучшение конфигурации, использование доп.хоткеев
import System.IO -- ?
import System.Exit -- ?
import qualified XMonad.StackSet as W -- Управление клиентами (окнами)
import XMonad.Hooks.ManageHelpers -- Доп.функции ManageHooks
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers

-- Пользовательские настройки
myTerm = "urxvt"
myBorderColor = "#000000"
myBorderColorFocused = "#8E8E8E"
myModMask = mod1Mask

myManageHook = composeAll . concat $
    [ [manageDocks]
    ]

main = do -- главная функция
	xmproc <- spawnPipe "/usr/bin/xmobar ~/.xmobarrc" -- Подключение XMobar
	xmonad $ ewmh $ withUrgencyHookC NoUrgencyHook urgencyConfig defaults {	-- Установка основного конфига
			manageHook =  myAllManageHook
        		, layoutHook = avoidStruts  $  layoutHook defaultConfig
        		, logHook = dynamicLogWithPP xmobarPP
                        		{ ppOutput = hPutStrLn xmproc
                        		, ppTitle = xmobarColor "green" "" . shorten 50
                        		}
			} `additionalKeys`
			[ ((mod1Mask .|. shiftMask, xK_q), kill)
			, ((mod1Mask, xK_Right), windows W.focusDown)
			, ((mod1Mask, xK_Left), windows W.focusUp)
			, ((mod1Mask, xK_Down), windows W.focusDown)
			, ((mod1Mask, xK_Up), windows W.focusUp)
			, ((controlMask, xK_Print), spawn "scrot -u -q 85 "home/seggoy/Documents/screens/%m-%d-%Y-%H-%M-%S-focused.png")
			]

-- Пользовательский конфиг
defaults = defaultConfig {
	terminal = myTerm
	, borderWidth = 1
	, modMask = myModMask
	, normalBorderColor = myBorderColor
	, focusedBorderColor = myBorderColorFocused
	}
 
Haron_Prime
неактуально
в текущей версии нужно использовать
Это же вроде я определяю собственный конфиг, который в самом низу. Как я его назову, такое имя и нужно ставлять к xmonad $ , или я не правильно понял?
Попробовал убрать All из главной функции, пропала последняя, но не остальные ошибки.
       , Run StdinReader

    , template = " %stdinreader% }{ %cpu% | %date% "

???
Почему в template прописано %stdinreader%, когда должно быть %StdinReader% ?
Это linux! Тут регистр имеет значение! Именно поэтому на скрине висит Updating...... - xmobar не понимает, что ему выводить, т.к. не знает, что такое %stdinreader%

Так будет лучше и немного понятнее
Config {
      bgColor = "black"
    , fgColor = "grey"
    , borderColor = "black"
    , position = Static {xpos = 0, ypos = 0, width = 1728, height = 20}
    , overrideRedirect = True
    , allDesktops = True
    , hideOnStart = False
    , persistent = True
    , lowerOnStart = False
    , commands =
        [ Run Date "%H:%M" "date" 10
        , Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
        , Run StdinReader
        ]
    , sepChar = "%"
    , alignSep = "}{"
    , template = " %StdinReader% }{ %cpu% | %date% "
        }
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
Seggoy
Попробовал убрать All из главной функции, пропала последняя, но не остальные ошибки.
Сейчас гляну - я только с конфигом xmobar разобрался, сейчас гляну конфиг самого xmonad
Gnome 2 >> Unity >> KDE 4 >> Openbox >> Awesome >> Xmonad
GitHub , BitBuket
 
Зарегистрироваться или войдите чтобы оставить сообщение.