Как изменить конфигурацию xmobar на лету

Я хочу переключаться между конфигурациями xmobar на лету, используя комбинации клавиш. Я наивно пометил следующее на другие мои ключевые моды:

, ((controlMask, xK_l), xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarLrc")
, ((controlMask, xK_w), xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarWrc")

и компилятор barfs в <-. Вы можете прочитать мое намерение в коде. Я не эксперт по Haskell, и я постепенно создаю среду, которую хочу, используя подход lego, но это меня не подвело.

Куда я иду не так?

ТИА

1 ответ

Решение

Ну, довольно сложно делать то, что ты хочешь. Вы можете использовать модуль расширяемого состояния из библиотеки xmonad-contrib.

Для этого вы должны добавить прагму LANGUAGE вверху вашего файла конфигурации xmonad:

{- # ЯЗЫК DeriveDataTypeable #-}

Он необходим для получения экземпляра Typeable для типа данных, в котором хранится дескриптор xmobar.

newtype XMobarHandle = XMobarHandle { xmhandle :: Maybe Handle } deriving Typeable

instance ExtensionClass XMobarHandle where
        initialValue = XMobarHandle Nothing

Теперь вы можете определить привязку ключа, которая извлекает текущий дескриптор xmobar из расширяемого состояния, закрывает его, если оно не равно Nothing, порождает новый и переводит его в состояние.

((controlMask, xK_l), do
    mh <- xmhandle `fmap` XS.get
    maybe (return ()) (io . hClose) mh
    xmproc <- spawnPipe "/usr/bin/xmobar /home/tony/.xmobarLrc"
    XS.put $ XMobarHandle (Just xmproc)
)

Вы можете создать функцию для блока do в привязке, если хотите. Привязка к другому ключу оставлена ​​в качестве упражнения!

Для его компиляции вам все еще нужны операторы импорта для модулей, используемых в этом коде. (Возможно, я забыл один, хотя!)

import           XMonad.Util.Run
import           System.IO
import qualified XMonad.Util.ExtensibleState         as XS

Вы также должны отредактировать свой logHook. Там вы должны извлечь дескриптор из расширяемого состояния, как в связке ключей, и передать его в качестве параметра функции xmobarlog.

Другие вопросы по тегам