我的xmonad.hs
中包含以下内容:
spawnOnOnce "0" "kitty -e vim ~/configuration.org; kitty"
spawnOnOnce "0" "kitty"
它是有效的,但问题是,执行的顺序总是不同的:有时执行第一个“spawn”,有时执行第二个。我需要执行的顺序总是相同的,例如,按照它们被写入的顺序。
请帮助:-)
编辑1:
根据@JosephSible-ReinstateMonica在以下评论中的要求:
为什么产生进程的确切顺序很重要?
我使用“Master/Stack”布局(带有manageHook = insertPosition End Newer ...
),如果第二个“spawnOn”是第一个执行的,那么它将位于屏幕的左侧,我希望它始终位于屏幕的右侧。
1条答案
按热度按时间lyfkaqu11#
spawnOnOnce
可能不保证执行顺序。您可以通过让第一个命令在完成时向xmonad进程发送一个
SIGUSR2
信号,并让第二个命令等待该SIGUSR2
信号来解决这个问题。概念验证(未测试):
其中,
installHandler
、sigUSR2
和CatchOnce
均来自System.Posix.Signals
。因为
kitty
是一个终端,所以这可能不起作用,因为pkill --SIGUSR2
可能在kitty
关闭之前不会被执行。所以,你可能不得不尝试一下:pkill --SIGUSR2 xmonad & kitty
可能可以工作,或者kitty & pkill --SIGUSR2 xmonad; wait
。