如何使用Xmonad以编程方式获取带有其相关窗口的列表工作区?

时间:2020-07-18 16:01:11

标签: xmonad

我想创建自己的工作区查看器。如何获取工作区列表及其对应的窗口标题?

我似乎找不到任何相关的函数来在文档中获取这些值。

1 个答案:

答案 0 :(得分:0)

可以通过以下方法完成(主要功能为workspacesGrouped :: X [(WorkspaceId, [String])]):

import           XMonad.Util.XUtils
import           XMonad
import           XMonad.Core
import           XMonad.Config.Prime
import           XMonad.Util.Font
import           XMonad.StackSet               as W
import           FileLogger
import           Control.Monad
import           Data.List
import Foreign.C.String

workspacesGrouped :: X [(WorkspaceId, [String])]
workspacesGrouped = do
  ws <- gets windowset
  let x = map (W.workspace) (W.current ws : W.visible ws)
  let y = (W.hidden ws)
  sequence $ fmap (\v -> fmap ((,) $ W.tag v) (getWorkspaceWindowTitles v)) $ x ++ y


getWorkspaceWindowTitles :: Workspace i l Window -> X [String]
getWorkspaceWindowTitles w = do
  withDisplay $ \d ->
    (liftIO $ forM
      (integrate' $ stack w)
      (\z -> getWindowTitle z d)
    )

getWindowTitle :: Window -> Display -> IO String
getWindowTitle w d = getTextProperty d w wM_NAME >>= (peekCString . tp_value)
相关问题