【问题标题】:How to programmatically get a list workspaces with their associated windows with Xmonad?如何以编程方式获取与 Xmonad 关联的窗口的列表工作区?
【发布时间】:2020-07-19 00:01:11
【问题描述】:

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

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

【问题讨论】:

    标签: xmonad


    【解决方案1】:

    可以通过以下方式完成(主要功能为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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 2020-10-17
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多