1

Я использую XMonad в среде Gnome. Как определить ярлык, чтобы свернуть все окна и показать рабочий стол?

2 ответа2

2

Я не рекомендовал бы это, потому что это не «способ» использования XMonad, но я знаю два возможных решения для достижения того, чего вы хотите.

Я бы сделал это не для того, чтобы спрятать все в вашем рабочем пространстве, а просто для того, чтобы просто переключиться на другое пустое рабочее пространство, и в xmonad-contrib есть действительно удобное Action для выполнения именно этого, называемого 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)

Так что это может быть сделано, я просто не буду беспокоиться, когда я смогу просто выйти в свободное окно.

1

Я понимаю, что это очень старый пост, но недавно я сам нашел элегантное решение и решил поделиться им.

Это решение очень приятно тем, что оно очищает все окна, но также позволяет вам вернуть их в прежнее состояние после того, как вы закончите смотреть на рабочий стол.

Он работает путем определения нового макета и переключения на этот макет при нажатии клавиши. Второе нажатие клавиши вернет вас к тому макету, на котором вы были.

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) ... ]

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .