xmonad başladığında xmobar pencere yığınının üstünde görünmüyor


16

Girdikten xmobarhemen sonra garip bir davranış yaşıyorum xmonad. Ne zaman i xmonad(from .xinitrc, XDM kullanın) benim xmobargörünür ama pencere yığınının üstünde veya altında değil . Bir uygulamayı başlattıktan sonra (örn. Tuşuna basarak terminal emülatörü Mod + Shift + Return) uygulama, ekranın xmobaraltındaki gibi, tüm ekranı kullanır . Sonra basıyorum Mod + Bve hiçbir şey olmuyor, Mod + Bikinci kez basıldığında xmobaruygulama penceresinin boyutunu küçülterek üst tarafa kaldırılıyor.

Bundan sonra oturumun Mod + Bgeri kalanı için doğru şekilde çalışır xmonad, yani azaltır / yükseltir (gizler / gösterir) xmobar.

Bir şeyi yanlış yapılandırdığımdan eminim. Benim xmonad.hsgibi görünüyor:

import XMonad
import XMonad.Hooks.SetWMName
import XMonad.Hooks.DynamicLog

main = do
  xmonad =<< statusBar "xmobar" myPP toggleStrutsKey defaultConfig
    { terminal           = "urxvt"
    , focusFollowsMouse  = True
    , clickJustFocuses   = False
    , borderWidth        = 1
    , modMask            = mod4Mask
    , workspaces         = myworkspaces
    , normalBorderColor  = "#dddddd"
    , focusedBorderColor = "#00dd00"
    , manageHook         = mymanager
    , startupHook        = setWMName "LG3D"
    }

myPP = xmobarPP { ppOutput          = putStrLn
                , ppCurrent         = xmobarColor "#336433" "" . wrap "[" "]"
                --, ppHiddenNoWindows = xmobarColor "grey" ""
                , ppTitle           = xmobarColor "darkgreen"  "" . shorten 20
                , ppLayout          = shorten 6
                --, ppVisible         = wrap "(" ")"
                , ppUrgent          = xmobarColor "red" "yellow"
                }

toggleStrutsKey XConfig { XMonad.modMask = modMask } = (modMask, xK_b)

myworkspaces = [ "code"
               , "web"
               , "media"
               , "irc"
               , "random"
               , "mail"
               , "docs"
               , "music"
               , "root"
               ]

mymanager = composeAll
  [ className =? "gimp" --> doFloat
  , className =? "vlc"  --> doFloat
  ]

Görünüşlerimin başlangıcı .xmobarrcşöyle:

Config {
  -- appearance
    font =         "xft:Bitstream Vera Sans Mono:size=9:bold:antialias=true"
  , bgColor =      "black"
  , fgColor =      "#646464"
  , position =     Top
  , border =       BottomB
  , borderColor =  "#646464"

  -- layout
  , sepChar =  "%"   -- delineator between plugin names and straight text
  , alignSep = "}{"  -- separator between left-right alignment
  , template = "%battery% | %multicpu% | %coretemp% | %memory% | %dynnetwork% | %StdinReader% }{ %date% || %kbd% "

  -- general behavior
  , lowerOnStart =     False   -- send to bottom of window stack on start
  , hideOnStart =      False   -- start with window unmapped (hidden)
  , allDesktops =      True    -- show on all desktops
  , overrideRedirect = True    -- set the Override Redirect flag (Xlib)
  , pickBroadest =     False   -- choose widest display (multi-monitor)
  , persistent =       True    -- enable/disable hiding (True = disabled)

  -- plugins (i do not use any)

  , commands = [  -- actually several commands are in here
  ]
}

Birkaç kombinasyon denedim:

, lowerOnStart =
, hideOnStart =

(Doğru / Doğru, Doğru / Yanlış, Yanlış / Doğru ve Yanlış / Yanlış şimdi gösterildiği gibi). Ancak Mod + Biki kez basmadan önceki davranış değişmez. Ben bir xmonadşekilde yanlış yapılandırılmış olduğuna inanıyorum xmobarama bu sadece bir tahmin.

Benim .xinitrcyardımım olabilir:

#!/bin/sh

if test -d /etc/X11/xinit/xinitrc.d
then
    # /etc/X11/xinit/xinitrc.d is actually empty
    for f in /etc/X11/xinit/xinitrc.d/*
    do
        [ -x "$f" ] && source "$f"
    done
    unset f
fi

# uk keyboard
setxkbmap gb

xrdb .Xresources
xscreensaver -no-splash &

# java behaves badly in non-reparenting window managers (e.g. xmonad)
export _JAVA_AWT_WM_NONREPARENTING=1

# set the background (again, because qiv uses a different buffer)
/usr/bin/feh --bg-scale --no-fehbg -z /usr/share/archlinux/wallpaper/a*.jpg

# pulse audio for alsa
then
    /usr/bin/start-pulseaudio-x11
fi

exec xmonad

Yanıtlar:


24

İki ay sonra anladım. Sorun statusBarolayları Hooks.manageDocksdüzgün kaydetmez olmasıdır . Bir kez xmonadtüm çalışıyor iyi çalışır çünkü her pencere olayı manageDocksgüncelleyebilirsiniz Struts. Ancak xmonadilk pencerenin tam ekran hale getirilmesi olayının başladığı anda olaylardan önce gerçekleşir manageDocks. Bu büyücüler varlığını görmezden gelmek için ilk pencereyi açar xmobar.

manageDocks, son işleyici olarak ayarlanması gereken olay işleyicisine sahiptir, bu nedenle statusBarkullanılamaz. Bunun yerine, bunu yapmak için gerekli olan xmonadçağrı ve yapılandırmak xmobarelle aracılığıyla dynamicLog, manageHook, layoutHookve handleEventHook. Bunun için minimalist bir yapılandırma şöyle olacaktır:

main = do
    xmproc <- spawnPipe "xmobar"
    xmonad $ defaultConfig
      { modMask            = mod4Mask
      , manageHook         = manageDocks <+> manageHook defaultConfig
      , layoutHook         = avoidStruts  $ layoutHook defaultConfig
      -- this must be in this order, docksEventHook must be last
      , handleEventHook    = handleEventHook defaultConfig <+> docksEventHook
      , logHook            = dynamicLogWithPP xmobarPP
          { ppOutput          = hPutStrLn xmproc
          , ppTitle           = xmobarColor "darkgreen"  "" . shorten 20
          , ppHiddenNoWindows = xmobarColor "grey" ""
          }
      , startupHook        = setWMName "LG3D"
      } `additionalKeys`
      [ ((mod4Mask, xK_b), sendMessage ToggleStruts) ]

Bu, tüm olayların işlenmesini docsEventHooksağlar ve yapılan mizanpaj değişikliklerinin docsEventHooksonuncusu olmasını sağlar . şimdi

lowerOnStart = False

(veya Truebeklendiği gibi) çalışır bütün durumlarda içinde xmobarrc.


1
DynamicLog paketi düzeltilene kadar kullanabilirsiniz statusBarve üzerine yazabilirsiniz handleEventHook = handleEventHook defaultConfig <+> docksEventHook.
timakro

2

Yapılandırmanızı bu konuda doğru çalışan daha basit olanımla karşılaştırdığımda, bir şey yapabilen bir fark görüyorum:

general behavioursahip olduğum tüm seçeneklerden sadece sahip olduğum

lowerOnStart = True

ve tek bir bölgesinin hideOnStart, overrideRedirectvs.

Xmobar'ı eklemenin yolu xmonad.hs, okuyabildiğim kadarıyla benimkiyle aynı.

Bu durumda, olabildiğince çok varsayılan ayar ile denerdim, örneğin yeniden adlandırılmaması için yeniden adlandırın .xmobarrcve xmonad.hsörn.

main = xmonad =<< statusBar "xmobar" xmobarPP toggleStrutsKey defaultConfig
toggleStrutsKey XConfig { XMonad.modMask = modMask } = (modMask, xK_b)

ve çalışıp çalışmadığını görün. Daha sonra yavaş yavaş ekleyin ve ne zaman kırıldığını görün.


Teşekkürler, cevabınız bana boştan başlayarak hata ayıklamam gerektiğini hatırlattı xmonad.hs. Bu bana asıl sorunu
bulmamı sağladı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.