Arch-Setup/.config/awesome/module/quake-terminal.lua
2021-11-29 19:57:00 +11:00

113 lines
2.3 KiB
Lua

local awful = require('awful')
local ruled = require('ruled')
local beautiful = require('beautiful')
local app = require('configuration.apps').default.quake
local client_keys = require('configuration.client.keys')
local client_buttons = require('configuration.client.buttons')
local quake_id = nil
local quake_client = nil
local quake_opened = false
local quake_properties = function()
return {
skip_decoration = true,
titlebars_enabled = false,
switch_to_tags = false,
opacity = 0.95,
floating = true,
skip_taskbar = true,
ontop = true,
above = true,
sticky = true,
hidden = not quake_opened,
maximized_horizontal = true,
skip_center = true,
round_corners = false,
keys = client_keys,
buttons = client_buttons,
placement = awful.placement.top,
shape = beautiful.client_shape_rectangle
}
end
ruled.client.connect_signal(
'request::rules',
function()
ruled.client.append_rule {
id = 'quake_terminal',
rule_any = {
instance = {
'QuakeTerminal'
}
},
properties = quake_properties()
}
end
)
local create_quake = function()
-- Check if there's already an instance of 'QuakeTerminal'.
-- If yes, recover it - use it again.
local quake_term = function (c)
return ruled.client.match(c, {instance = 'QuakeTerminal'})
end
for c in awful.client.iterate(quake_term) do
-- 'QuakeTerminal' instance detected
-- Re-apply its properties
ruled.client.execute(c, quake_properties())
quake_id = c.pid
c:emit_signal('request::activate')
return
end
-- No 'QuakeTerminal' instance, spawn one
quake_id = awful.spawn(app, quake_properties())
end
local quake_open = function()
quake_client.hidden = false
quake_client:emit_signal('request::activate')
end
local quake_close = function()
quake_client.hidden = true
end
local quake_toggle = function()
quake_opened = not quake_opened
if not quake_client then
create_quake()
else
if quake_opened then
quake_open()
else
quake_close()
end
end
end
awesome.connect_signal(
'module::quake_terminal:toggle',
function()
quake_toggle();
end
)
client.connect_signal(
'manage',
function(c)
if c.pid == quake_id then
quake_client = c
end
end
)
client.connect_signal(
'unmanage',
function(c)
if c.pid == quake_id then
quake_opened = false
quake_client = nil
end
end
)