gpt4 book ai didi

linux - 如何更改 xmonad reparents 的窗口?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:02 26 4
gpt4 key购买 nike

我有一个下面列出的小应用程序,它只是在其中制作了一个 x 窗口和一个小窗口。我稍后计划制作一个实验性 IDE,其中所有的工具栏和菜单都是子窗口,并且可以选择任何想要管理它们的窗口管理器。

我想做的是启动一个 xmonad 实例,并使其不从根窗口重新设置窗口的父级和控制窗口,而是在我的应用程序窗口内重新设置和控制窗口。

这可能吗?

附言这是应用程序。

module Main where
import Graphics.X11.Xlib

y f = w where w = f w

main = do
display <- openDisplay ""

let screen = defaultScreen display

root <- rootWindow display screen
mainWindow <- createSimpleWindow
display
root
0 0 100 100
1
(blackPixel display screen)
(whitePixel display screen)
setTextProperty display mainWindow "Subwindows" wM_NAME

subWindow <- createSimpleWindow
display
mainWindow
0 0 100 100
1
(whitePixel display screen)
(blackPixel display screen)
mapWindow display subWindow

mapWindow display mainWindow

y $ \loop -> allocaXEvent $ \eventPointer -> do
nextEvent display eventPointer
event <- get_EventType eventPointer
case () of
_ | event == expose -> loop
| otherwise -> return ()

最佳答案

原则上“只是”将 xmonad 中所有硬编码的根窗口引用替换为可以在启动时指定的窗口 ID。但除非 xmonad 已经具有该功能,否则您肯定必须破解 xmonad 代码才能添加它。

你可以运行你自己的整个 X 服务器并假装你的窗口是一个根窗口——就像 Xephyr 或 Xnest。这肯定比添加 xmonad 功能以使用非根窗口要难得多,但它的优势在于它可以与任何窗口管理器一起工作。

另一种方法可能是从 xmonad 中提取代码并将其粘贴到您的应用中...

关于linux - 如何更改 xmonad reparents 的窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9300120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com