退出 Awesomewm 之前如何关闭所有应用程序?

问题描述 投票:0回答:1

我想编写一个函数,在退出之前关闭所有打开的应用程序。 这是为了确保我没有忘记保存修改过的文件。

如果我使用 Super+Shift+q 快捷键,awesome 会强制所有应用程序关闭,并且我会丢失所有未保存的更改。

这是我能做的:

awful.spawn.easy_async('/home/fabrice/.config/rofi/rofi-querry.sh "Eteindre ? "',
                       function(_, _, _, exitcode)
                          if exitcode == 0 then
                             for _, c in ipairs(client.get()) do
                                c:kill()
                             end
                          end
                          -- Wait for all windows to close
                          -- Then exit AwesomeWM
                       end)

我不能做的就是等到所有窗户都关闭后再离开。 事实上,如果修改后的文件尚未保存,应用程序会询问我 如果我想在关闭应用程序之前保存它。 只有在我回答了所有未保存文件的申请后,我才会想退出awesome。

我尝试像这样处理“取消管理”信号(因为它是窗口关闭时发出的信号):

client.connect_signal("unmanage",
                      function ()
                         if client.instances() == 0 then
                            awesome.quit()
                         end
                      end)

但我不会离开真棒。 我的理解是,当处理unmanage信号时,总是有一个窗口打开。

是否有一个信号在所有窗口关闭后调用? 还是有另一种方法可以关闭所有窗口然后退出awesome?

window exit awesome-wm
1个回答
0
投票

我找到了解决方案:

awful.spawn.easy_async('/home/fabrice/.config/rofi/rofi-querry.sh "Eteindre ?"',
                       function(_, _, _, exitcode)
                          if exitcode == 0 then
                             local nb = 0
                             for _, c in ipairs(client.get()) do
                                nb = nb + 1
                             end
                             if nb == 0 then
                                awesome.quit()
                             else
                                client.connect_signal("unmanage",
                                                      function ()
                                                         local nb = 0
                                                         for _, c in ipairs(client.get()) do
                                                            nb = nb + 1
                                                         end
                                                         if nb == 0 then
                                                            awesome.quit()
                                                         end
                                                      end)
                                for _, c in ipairs(client.get()) do
                                   c:kill()
                                end
                             end
                          end
                       end)

我犯的错误是使用 client.instances() 来获取打开窗口的数量。

其工作原理如下:

如果没有窗户打开,那么我立即退出真棒。 否则,我定义一个函数来处理窗口关闭时发出的信号(取消管理),然后请求关闭所有窗口。 在取消管理信号功能中,我计算仍然打开的窗口数量,当没有窗口打开时,我退出了。

© www.soinside.com 2019 - 2024. All rights reserved.