XMonad,在聚焦窗口上方生成浮动窗口

问题描述 投票:0回答:1

我正在尝试生成一个浮动窗口,其屏幕位置将与当前聚焦、平铺或本身浮动的窗口相匹配。

我假设spawn命令本身应该驻留在

keys
列表中(像所有其他命令一样),而布局应该驻留在
layoutHook
中。我可以通过设置唯一的
WM_NAME
来精确地区分窗口(
urxvt
使这变得容易),并且我可以在
keys
列表中访问当前聚焦的窗口;但是,我不知道是否有一种正确的、内置的/非肮脏的方式将此信息向下传递到
layoutHook

此外,我假设(也许是错误的?)在布局期间,聚焦窗口将是新生成的窗口 - 所以我无法在布局代码中访问它。

我的三个想法(hacky 降序排列):

  • 将布局数据存储到 WM_NAME 中并向下解析它
  • 将尺寸存储为 X 属性并在布局挂钩中读取它
  • 将聚焦窗口存储为 MVar,然后在布局期间访问它以获得尺寸

所有这些看起来都有点老套;有更好的办法吗

haskell xlib xmonad
1个回答
0
投票

不要将这部分作为生成命令的一部分,而将其作为 ManageHook 的一部分。基本用法就像

className "my-unique-class" --> doRectFloat blah

弄清楚要放入什么内容

blah
可能是最烦人的部分。您可以使用
ask
获取窗口的 ID,并使用
liftX (gets (layout . workspace . current . windowset))
获取当前布局。除了使用
doLayout
手动运行该布局,然后在其输出中搜索当前聚焦窗口的 ID 之外,我想不出一个好方法来计算当前聚焦窗口的矩形。作为其他参数所需的值也潜伏在
windowset
的各个位置,以及当前聚焦窗口的窗口 ID。

© www.soinside.com 2019 - 2024. All rights reserved.