Я использую XMonad в среде Gnome. Как определить ярлык, чтобы свернуть все окна и показать рабочий стол?
Я не рекомендовал бы это, потому что это не «способ», которым следует использовать XMonad, но я знаю два возможных решения для достижения того, чего вы хотите.
Я бы сделал это не для того, чтобы спрятать все в вашем рабочем пространстве, а просто для того, чтобы просто переключиться на другое пустое рабочее пространство, и в xmonad-contrib есть действительно удобное действие для выполнения именно этого, называемого FindEmptyWorpace . По сути, вы просто используете это так:
((AltMask, xK_space), viewEmptyWorkspace)
Несмотря на то, что я рекомендовал другой способ, я отвечу на вопрос, который вы задали. Есть функции скрытия и раскрытия , предназначенные именно для этой цели. Я никогда не использовал их раньше, потому что я не хочу ничего скрывать на своих экранах, но определения функции достаточно, чтобы объяснить, что это действия X Monad, которые действуют в отдельных окнах, поэтому, если вы хотите свести их к минимуму, вам придется захватить текущий экран из StackSet, а затем захватить рабочее пространство на этом экране, а затем отобразить mapM для каждого окна в стеке этого рабочего пространства. Например в ghci:
:m + XMonad.StackSet
$ :t stack . workspace . current
:: StackSet i l a sid sd -> Maybe (Stack a)
Так что это может быть сделано, я просто не буду беспокоиться, когда я смогу просто выйти в свободное окно.
Я понимаю, что это очень старый пост, но недавно я сам нашел элегантное решение и решил поделиться им.
Это решение очень приятно тем, что оно очищает все окна, но также позволяет вам вернуть их в прежнее состояние после того, как вы закончите смотреть на рабочий стол.
Он работает путем определения нового макета и переключения на этот макет при нажатии клавиши. Второе нажатие клавиши вернет вас к тому макету, на котором вы были.
import XMonad.Layout.MultiToggle
import XMonad.Layout.MultiToggle.Instances
...
data EmptyLayout a = EmptyLayout deriving (Show, Read)
instance LayoutClass EmptyLayout a where
doLayout a b _ = emptyLayout a b
description _ = "Empty Layout"
data HIDE = HIDE deriving (Read, Show, Eq, Typeable)
instance Transformer HIDE Window where
transform _ x k = k (EmptyLayout) (\(EmptyLayout) -> x)
...
myLayoutHook = smartBorders
. mkToggle (NOBORDERS ?? FULL ?? EOT)
. gaps [(U,10), (R,10), (D,20), (L,10)]
. spacingWithEdge default_spacing
. mkToggle (single HIDE) -- This line
$ Grid ||| Full ||| tiled ||| Mirror tiled
...
keyBindings :: [((KeyMask, KeySym), X ())]
keyBindings = [ ... ((mMask, xK_z), sendMessage $ Toggle HIDE) ... ]