haskell XMonad,'spawnOn'阶

cvxl0en2  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(138)

我的xmonad.hs中包含以下内容:

spawnOnOnce "0" "kitty -e vim ~/configuration.org; kitty"
spawnOnOnce "0" "kitty"

它是有效的,但问题是,执行的顺序总是不同的:有时执行第一个“spawn”,有时执行第二个。我需要执行的顺序总是相同的,例如,按照它们被写入的顺序。
请帮助:-)

编辑1:

根据@JosephSible-ReinstateMonica在以下评论中的要求:
为什么产生进程的确切顺序很重要?
我使用“Master/Stack”布局(带有manageHook = insertPosition End Newer ...),如果第二个“spawnOn”是第一个执行的,那么它将位于屏幕的左侧,我希望它始终位于屏幕的右侧。

lyfkaqu1

lyfkaqu11#

spawnOnOnce可能不保证执行顺序。
您可以通过让第一个命令在完成时向xmonad进程发送一个SIGUSR2信号,并让第二个命令等待该SIGUSR2信号来解决这个问题。
概念验证(未测试):

spawnOnOnce "0" "kitty -e vim ~/configuration.org; kitty; pkill --SIGUSR2 xmonad"
void $ installHandler sigUSR2 (CatchOnce $ spawnOnOnce "0" "kitty") Nothing

其中,installHandlersigUSR2CatchOnce均来自System.Posix.Signals
因为kitty是一个终端,所以这可能不起作用,因为pkill --SIGUSR2可能在kitty关闭之前不会被执行。所以,你可能不得不尝试一下:pkill --SIGUSR2 xmonad & kitty可能可以工作,或者kitty & pkill --SIGUSR2 xmonad; wait

相关问题