- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想扩展我的 xmonad.hs
,方法是通过 stack
将它移动到它自己的沙盒项目环境中。事实证明,通过将您的 xmonad main
函数嵌入到使用 xmonad-entryhelper 的父级 main
中,这样的沙盒是可能的。 .按照项目自述文件中的说明,从以下内容转换 xmonad.hs
:
main :: IO ()
main = do
statBar <- spawnPipe myXMobar
xmonad def
{ terminal = myTerminal
, focusFollowsMouse = myFocusFollowsMouse
, borderWidth = myBorderWidth
, modMask = myModMask
, workspaces = myWorkspaces
, normalBorderColor = myNormalBorderColor
, focusedBorderColor = myFocusedBorderColor
-- key bindings
, keys = myKeys
--, mouseBindings = myMouseBindings
-- hooks, layouts
, layoutHook = myLayoutHook
, manageHook = manageHook def <+> myManageHook
--, handleEventHook = myEventHook
, logHook = myLogHook statBar >> setWMName "LG3D"
--, startupHook = myStartupHook
}
为了...
kaleidoscope :: IO ()
kaleidoscope = do
statBar <- spawnPipe myXMobar
xmonad def
{ terminal = myTerminal
, focusFollowsMouse = myFocusFollowsMouse
, borderWidth = myBorderWidth
, modMask = myModMask
, workspaces = myWorkspaces
, normalBorderColor = myNormalBorderColor
, focusedBorderColor = myFocusedBorderColor
-- key bindings
, keys = myKeys
--, mouseBindings = myMouseBindings
-- hooks, layouts
, layoutHook = myLayoutHook
, manageHook = manageHook def <+> myManageHook
--, handleEventHook = myEventHook
, logHook = myLogHook statBar >> setWMName "LG3D"
--, startupHook = myStartupHook
}
main :: IO ()
main = EH.withCustomHelper kaleidoscopeConfig
where
kaleidoscopeConfig = EH.defaultConfig
{ EH.run = kaleidoscope
, EH.compile = \force -> EH.withLock ExitSuccess $ do
let cmd =
if force
then "cd /home/oldmanmike/src/github.com/oldmanmike/kaleidoscope && stack clean && stack build"
else "cd /home/oldmanmike/src/github.com/oldmanmike/kaleidoscope && stack build"
EH.compileUsingShell cmd
, EH.postCompile = EH.defaultPostCompile
}
因此,我现在可以使用 xmonad --recompile
编译我的项目,并且在 .xmonad
中找到的二进制文件软链接(soft link)到我的沙盒项目生成的二进制文件。
但由于某些原因,xmonad --restart
不再起作用。是什么让它绊倒了?
命令本身似乎不会从 X 产生任何错误 - 它只是成功返回,甚至没有任何迹象表明发生过任何事情。我在 shell 中同时尝试 xmonad --restart
命令并将 xmonad 中的 mod-q
绑定(bind)到 spawnPipe "xmonad --restart"
或io sendRestart
- 两者似乎都不起作用。当我关闭我的 Xserver 并手动重新启动它时,所有更新都会显示出来,但现在热插拔更改似乎不起作用。它是否需要同时查看两个单独的二进制文件 - 当前的和新的?
编辑:我一直在通过阅读 xmonad
、xmonad-entryhelper
和 的源代码来解决这个问题>X11
。我目前正在挑选这个:
sendRestart :: IO ()
sendRestart = do
dpy <- openDisplay ""
rw <- rootWindow dpy $ defaultScreen dpy
xmonad_restart <- internAtom dpy "XMONAD_RESTART" False
allocaXEvent $ \e -> do
setEventType e clientMessage
setClientMessageEvent e rw xmonad_restart 32 0 currentTime
sendEvent dpy rw False structureNotifyMask e
sync dpy False
我还不熟悉 X11 API,但让我感到奇怪的是 internAtom
函数以及 XMONAD_RESTART 在客户端消息中的用途。还有这个处理程序:
handle e@ClientMessageEvent { ev_message_type = mt } = do
a <- getAtom "XMONAD_RESTART"
if (mt == a)
then restart "xmonad" True
else broadcastMessage e
handle e = broadcastMessage e -- trace (eventName e) -- ignoring
所以我猜原子只是用于标识消息事件的临时字符串?当我运行重新启动时,我没有收到任何错误消息,所以它似乎一直到操作句柄:
restart :: String -> Bool -> X ()
restart prog resume = do
broadcastMessage ReleaseResources
io . flush =<< asks display
let wsData = show . W.mapLayout show . windowset
maybeShow (t, Right (PersistentExtension ext)) = Just (t, show ext)
maybeShow (t, Left str) = Just (t, str)
maybeShow _ = Nothing
extState = return . show . catMaybes . map maybeShow . M.toList . extensibleState
args <- if resume then gets (\s -> "--resume":wsData s:extState s) else return []
catchIO (executeFile prog True args Nothing)
我怀疑这里有一个权限问题,xmonad-x86_64-linux
在 xmonad 的系统安装而不是我的沙盒(目前链接到堆栈生成的二进制文件)。
最佳答案
事实证明,问题是我无法使用堆栈生成的 xmonad
二进制文件,即使它在我的路径和 ~/.xmonad/xmonad-x86_64-linux
被符号链接(symbolic link)到它。相反,我通过将我的 mod-q 绑定(bind)到以下内容来重新开始工作:
restart "/home/oldmanmike/.xmonad/xmonad-x86_64-linux" True
只要我给它绝对路径,它就会工作。
鉴于之前的观察,将以下内容放入我的 .xinitrc 会导致 X 崩溃,这是有道理的:
exec xmonad
相反,我必须在初始启动时使用以下内容:
exec ~/.xmonad/xmonad-x86_64-linux
所以就目前而言,似乎调用 xmonad
的命令可靠性要低得多,我应该只为 xmonad-x86_64-linux
设置别名,然后从现在开始调用它。
关于haskell - 如何重启沙盒和自定义编译的 Xmonad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38102625/
我是一名优秀的程序员,十分优秀!