繁体   English   中英

如何使用其他工作区上的应用程序启动 xmonad

[英]How to start up xmonad with apps on other workspaces

我正在尝试编写一个 xmonad.hs,它在启动时会在某些工作区上启动一些应用程序。 其中几个应用程序(例如, atop )将在终端内运行( urxvt是我的偏好)。

这已经被问过几次了,例如, 这里这里,并且在XMonad 常见问题解答中间接提及

但是,这些依赖于:

  1. 使用spawnOnXMonad.Actions.SpawnOn ,其平不起作用(与测试urxvt ,并且还xclock作为一个简单的例子); 它被发送到当前工作区。

  2. 使用spawn prog >> windows $ greedyView <workspace> ,它有点工作,但有主要的时间问题 - 例如,如果您连续运行两个程序,使用不同的工作区,两个程序最终都会在后一个工作区。 FWIW,我尝试使用 threaddelay 来辅助; 它没有任何明显的区别,即使在 spawn 之间有 10 秒的延迟(我记得 threadDelay 以微秒为单位,因此使用了 10000000)。

  3. 依赖于对程序使用通用挂钩 - 这意味着每当我启动它们时,它们都会被发送到给定的工作区。 那不是我想要的; 我只是希望它们在启动时放在那里。

相关地,令我惊讶的是 API 不允许我启动一个应用程序,然后给我一个对该应用程序/窗口的引用(可能会超时); 这样我就可以自信地将该应用程序/窗口发送到工作区。

任何帮助将不胜感激。

安装 wmctrl

sudo apt install wmctrl

并创建一个脚本(在此示例中,第二个工作区( -t 1 )上的雷鸟):

#!/bin/sh

 (thunderbird &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

要在 wmctrl 上知道您的应用程序名称,您可以通过点击终端来查看它:

wmctrl -l

并将其替换为脚本中的正确名称。

小心使用大写字母(“Thunderbird”而不是“thunderbird”)!!

在 3d 工作区 ( -t 2 ) 上使用 Firefox 的其他示例:

#!/bin/sh
(firefox &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Firefox` -t 2"

奖金 :

这是在启动时执行的命令:

sh -c "thunderbird  & sleep 5 && wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

使用 Cinnamon 在 Debain 10 上工作。 但应该适用于所有人

您可以通过 startupHook 生成应用程序,然后使用 manageHook 来处理窗口放置。

manageHook 如:

, className =? "deluge" --> doShift ( myWorkspaces !! 3 )

以上实际上会在 Workspace 4 上产生洪水。在我的 startupHook 中,我有

spawnOnce "deluge-gtk" 在启动时启动应用程序。

您可能想要导入 XMonad.Util.SpawnOnce。 doShift 来自默认的 XMonad.ManageHooks 您也可以看看 XMonad.Actions.SpawnOn 但我只使用该模块中的 manageSpawn 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM