覆盖 xmonad 淡出窗口使其不活动

覆盖 xmonad 淡出窗口使其不活动

我使用 Xmonad-contrib 的 Fade Inactive 和 xcompmgr 使未聚焦的窗口变得透明。

偶尔,我想让非活动窗口完全不透明,例如当我在观看视频时。

是否有人有使用 Fade Inactive 来拥有多个不透明窗口的策略?

答案1

我正在努力。:) 如果你正在从 darcs 运行 xmonad,请尝试http://www.ece.cmu.edu/~allbery/FadeWindows.tgz. (请注意,您要测试的一件事是它是否具有比 tarball 中包含的更多的依赖项;它仍在进行中。)它需要对 xmonad 核心进行最近的修补,我不完全确定它是否已经应用于上游。

此档案应在您的 中解压,~/.xmonad并将在 中放置两个 Haskell 源文件~/.xmonad/lib/XMonad/Hooks。(您可以随意在其他地方解压并验证,然后再将它们复制到正确的位置。)文档是 中的 Haddock 标记lib/XMonad/Hooks/FadeWindows.hs。请特别注意如何检查必要的 ManageHook 补丁。

答案2

我在 Xmonad.hs 示例的帮助下找到了解决方案

http://code.google.com/p/xmonad/issues/attachmentText?id=393&aid=4341235945524725336&name=xmonad.hs&token=cc0422d6dd7c329bce14d1f4ca93a3db

您可以通过 FadeIf 创建不褪色的窗口列表

示例 xmonad.hs 如下所示

import XMonad
import XMonad.Hooks.FadeInactive
import Control.Monad (filterM,liftM, join)
import Data.IORef
import Data.List
import qualified Data.Set as S
import qualified XMonad.StackSet as W
import XMonad.Util.EZConfig(additionalKeys,removeKeys)

myFadeHook toggleFadeSet = fadeOutLogHook $ fadeIf (testCondition toggleFadeSet) 0.7
doNotFadeOutWindows = title =? "Call with " <||> className =? "xine" <||> className =? "MPlayer"

testCondition :: IORef (S.Set Window) -> Query Bool
testCondition floats =
    liftM not doNotFadeOutWindows <&&> isUnfocused
    <&&> (join . asks $ \w -> liftX . io $ S.notMember w `fmap` readIORef floats)

toggleFadeOut :: Window -> S.Set Window -> S.Set Window
toggleFadeOut w s | w `S.member` s = S.delete w s
                  | otherwise = S.insert w s


main = do
  toggleFadeSet <- newIORef S.empty
  xmonad $ defaultConfig
  {
  logHook = myFadeHook toggleFadeSet
  , modMask = mod4Mask
  } `additionalKeys`
  [
  ((mod4Mask, xK_f), withFocused $ io . modifyIORef toggleFadeSet . toggleFadeOut
  ]

相关内容