LINUX.ORG.RU

-- Core
import XMonad
import qualified XMonad.StackSet as W
import qualified Data.Map as M
import System.Exit
import Graphics.X11.Xlib
import Graphics.X11.ExtraTypes.XF86
--import IO (Handle, hPutStrLn)
import qualified System.IO
import XMonad.Actions.CycleWS (nextScreen,prevScreen)
import Data.List
 
-- Prompts
import XMonad.Prompt
import XMonad.Prompt.Shell
 
-- Actions
import XMonad.Actions.MouseGestures
import XMonad.Actions.UpdatePointer
import XMonad.Actions.GridSelect
 
-- Utils
import XMonad.Util.Run (spawnPipe)
import XMonad.Util.Loggers
import XMonad.Util.EZConfig
import XMonad.Util.Scratchpad
-- Hooks
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.UrgencyHook
import XMonad.Hooks.Place
import XMonad.Hooks.EwmhDesktops

-- Layouts
import XMonad.Layout.NoBorders
import XMonad.Layout.ResizableTile
import XMonad.Layout.Tabbed
import XMonad.Layout.DragPane
import XMonad.Layout.LayoutCombinators hiding ((|||))
import XMonad.Layout.DecorationMadness
import XMonad.Layout.TabBarDecoration
import XMonad.Layout.IM
import XMonad.Layout.Grid
import XMonad.Layout.Spiral
import XMonad.Layout.Mosaic
import XMonad.Layout.LayoutHints

import Data.Ratio ((%))
import XMonad.Layout.ToggleLayouts
import XMonad.Layout.Spacing
import XMonad.Hooks.ManageHelpers
import XMonad.Layout.Gaps
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.SetWMName

defaults = defaultConfig {
        terminal      = "terminator"
        --`, font                 = "xft:Droid Sans Mono:size=10"
        , normalBorderColor  = "black"
        , focusedBorderColor  = "orange"        
        , workspaces          = myWorkspaces
        , modMask             = mod4Mask
        , borderWidth         = 1
        , startupHook         = setWMName "LG3D"
        , layoutHook          = myLayoutHook
        , manageHook          = myManageHook
        , handleEventHook     = fullscreenEventHook
        }`additionalKeys` myKeys

myWorkspaces :: [String]
-- myWorkspaces =  ["1:web","2:dev","3:term","4:vm","5:media"] ++ map show [6..9]
myWorkspaces =  map show [1..9]

-- Whether focus follows the mouse pointer.
myFocusFollowsMouse :: Bool
myFocusFollowsMouse = False


-- tab theme default
myTabConfig = defaultTheme {
   activeColor          = "#6666cc"
  , activeBorderColor   = "#000000"
  , inactiveColor       = "#666666"
  , inactiveBorderColor = "#000000"
  , decoHeight          = 10
 }

-- Color of current window title in xmobar.
xmobarTitleColor = "#FFB6B0"

-- Color of current workspace in xmobar.
xmobarCurrentWorkspaceColor = "green"

myLayoutHook = spacing 6 $ gaps [(U,15)] $ toggleLayouts (noBorders Full) $
    smartBorders $ Mirror tiled ||| mosaic 2 [3,2]  ||| tabbed shrinkText myTabConfig
      where 
        tiled = Tall nmaster delta ratio
        nmaster = 1
        delta   = 3/100
        ratio   = 3/5

--myLayoutHook = smartBorders $ avoidStruts $ toggleLayouts (noBorders Full)
    --(smartBorders (tiled ||| mosaic 2 [3,2] ||| Mirror tiled ||| tabbed shrinkText myTab))
    --where
    --    tiled   = layoutHints $ ResizableTall nmaster delta ratio []
    --    nmaster = 1
    --    delta   = 2/100
    --    ratio   = 1/2                              
                              
myManageHook :: ManageHook
        
myManageHook = composeAll . concat $
        [ [className =? c --> doF (W.shift "1") | c <- myWeb]
        , [className =? c --> doF (W.shift "2") | c <- myDev]
        , [className =? c --> doF (W.shift "3") | c <- myTerm]
        , [className =? c --> doF (W.shift "4") | c <- myVMs]
        , [manageDocks]
        ]
        where
        myWeb = ["Firefox","Chromium","Chrome"]
        myDev = ["Eclipse","Gedit","sublime-text"]
        myTerm = ["Terminator","xterm"]
        myVMs = ["VirtualBox"]
        
        --KP_Add KP_Subtract
myKeys = [
        -- xmonad quit
         ((mod4Mask .|. controlMask .|. shiftMask, xK_q), io (exitWith ExitSuccess))
        -- xmonad recompile & restart
         , ((mod4Mask .|.controlMask, xK_r), spawn "xmonad --recompile; killall trayer; killall xmobar; xmonad --restart;trayer --edge top --align right --height 18 --padding 0 --transparent true --alpha 0 --widthtype percent --width 5 --tint 0x2b2b2b  --distancefrom right --distance 1 --expand true --monitor 1")

         , ((mod4Mask .|. controlMask, xK_Left ), prevScreen)
         -- run terminal
         , ((mod4Mask .|. shiftMask, xK_Return), spawn "st")
         -- autostart start
         , ((mod4Mask .|. shiftMask, xK_F5), spawn "~/.xmonad/autostart.sh")
         -- x11 lock
         , ((mod4Mask .|. mod1Mask, xK_l), spawn "xscreensaver-command -lock")
         -- keepassx open
         , ((mod4Mask .|. mod1Mask, xK_k), spawn "/home/user/.dwm/scripts/wm/program.sh")



         , ((mod4Mask, xK_Right), nextScreen) 
         , ((mod4Mask, xK_g), goToSelected defaultGSConfig)
                     , ((mod4Mask, xK_s), spawnSelected defaultGSConfig ["chromium","idea","gvim"])
                     , ((mod4Mask, xK_KP_Add), spawn "amixer set Master 10%+ && ~/.xmonad/getvolume.sh >> /tmp/.volume-pipe")
                     , ((mod4Mask, xK_KP_Subtract), spawn "amixer set Master 10%- && ~/.xmonad/getvolume.sh >> /tmp/.volume-pipe")
         , ((mod4Mask, xK_b     ), sendMessage ToggleStruts)
         ]
                   


main = do
        xmproc <- spawnPipe "/usr/bin/xmobar ~/.xmonad/.xmobarrc"
        xmonad $ defaults {
        logHook =  dynamicLogWithPP $ defaultPP {
            ppOutput = System.IO.hPutStrLn xmproc
          , ppTitle = xmobarColor xmobarTitleColor "" . shorten 100 .wrap "  [ <fc=gray>" "</fc> ]  "
          , ppCurrent = xmobarColor xmobarCurrentWorkspaceColor "" . wrap "[" "]"
          , ppSep = "   "
          , ppWsSep = " "
          --, ppLayout = const ""
          , ppLayout  = (\ x -> case x of
              "Spacing 6 Mosaic"                      -> "[:]"
              "Spacing 6 Mirror Tall"                 -> "[M]"
              "Spacing 6 Hinted Tabbed Simplest"      -> "[T]"
              "Spacing 6 Full"                        -> "[ ]"
              _                                       -> x )
          , ppHiddenNoWindows = showNamedWorkspaces
      } 
      , focusFollowsMouse  = myFocusFollowsMouse
} where showNamedWorkspaces wsId = if any (`elem` wsId) ['a'..'z']
                                       then pad wsId
                                       else ""

Xwo ()
Ответ на: комментарий от Xwo

после запуска xmonad, делаю xdm restart и такое же начинает наблюдаться в dwm

Xwo ()
Ответ на: комментарий от anonymous

нажимаешь htop, шапка и несколько(штук 5 процессов отрисовываются), через некоторое время отрисовывается остальная часть процессов. top запускаешь, ничего не отображается, потом top весь появляется

Xwo ()
Последнее исправление: Xwo (всего исправлений: 1)
Ответ на: комментарий от ChubaDuba

Еще раз: на большом конфиге st тормозит, на минимальном - нормально рабоотает. В dwm st нормально работает. Проблема кроется где-то в конфиге

Xwo ()
Ответ на: комментарий от Xwo

Еще раз: на большом конфиге st тормозит, на минимальном - нормально рабоотает. В dwm st нормально работает. Проблема кроется где-то в конфиге

Бинарный поиск во все поля. Закомментируй половину конфигурационного файла и проверяй — работает нормально или нет. Если работает нормально, то раскомментируй половину закоменнтированной части. Если тормозит, то закомментируй половину раскомментированной части. И так далее, думаю смысл понятен.

Как мне кажется — тут это будет самым оптимальным вариантом.

Deleted ()
Ответ на: комментарий от Deleted

а ну-ка покажи что там можно половину закомментить)))))

Ты что не видишь, что этот конфиг простой как утюг? Там нечего комментить

Xwo ()
Последнее исправление: Xwo (всего исправлений: 1)
Ответ на: комментарий от Xwo

Кто бы мог сомневаться, что это smartBorders виноваты. Нет, пока не перехожу на xmonad. К большому сожелению.

Xwo ()
Ответ на: комментарий от Xwo

Ты что не видишь, что этот конфиг простой как утюг? Там нечего комментить

Если ты не смог сам решить проблему, и создал для этого тред, то вестимо не простой как утюг.

Кто бы мог сомневаться, что это smartBorders виноваты.

Это вообще что и зачем? (пользователь xmonad)

Deleted ()
Ответ на: комментарий от Deleted

Если ты не смог сам решить проблему, и создал для этого тред, то вестимо не простой как утюг.

как видишь, при своей простоте и минимум функционала - нашлось место для тормозов. Притом на ровном месте.

Это вообще что и зачем? (пользователь xmonad)

при одном окне не отрисовывает border

Xwo ()
Последнее исправление: Xwo (всего исправлений: 2)
Ответ на: комментарий от Xwo

Конфиг не простой (импортнул столько, что у меня глаза на лбу). SmartBorders и его производные от версии к версии глючат плюс всё зависит, как напишешь (надо понимать последовательность) конфиг. Я вообще от такой абстракции ушёл (и тебе советую).

P.S. Тут, я смотрю, у нас появились нтересные модераторы? Значит требование показать конфиг - это флуд?

IThappens ()
Ответ на: комментарий от Xwo

как видишь, при своей простоте и минимум функционала - нашлось место для тормозов. Притом на ровном месте.

А если smart borders включать в самом минимальном конфиге, то тоже лагает? Не гуглятся проблемы с тормозами для smart borders, возможно, что где-то в другом месте собака зарыта.

при одном окне не отрисовывает border

А. Я границу окон просто выключаю обычно.

Deleted ()
Ответ на: комментарий от Xwo

Легче изучить си и понять как работает dwm и дописать его, нежели сделать работоспособным xmonad. Вывод, сделанный за несколько лет попыток перейти на него.

Xwo ()
Последнее исправление: Xwo (всего исправлений: 1)
Ответ на: комментарий от ChubaDuba

а что там? Пара депрекейтед. Пофиксил, но это не решило проблему

Xwo ()

Все говорят, что dwm не особо нкциональная штука. Но на практике начинаешь накручивать функционал на xmonad, чтобы добиться такой же функциональности, как у dwm + 5 патчей, и начинается: вот это отваливается и вот это тормозит. Ужас.

Xwo ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.