我使用 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 示例的帮助下找到了解决方案
您可以通过 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
]