Add awesome-launch.panel

This commit is contained in:
James Reed 2019-07-02 17:23:59 -06:00
parent ac0804e17a
commit 0fdcf4e822
No known key found for this signature in database
GPG Key ID: 8F79994F6B8378C1
3 changed files with 71 additions and 1 deletions

View File

@ -14,5 +14,6 @@ build = {
modules = {
["awesome-launch"] = "init.lua",
["awesome-launch.uuid"] = "uuid.lua",
["awesome-launch.panel"] = "panel.lua",
},
}

View File

@ -3,6 +3,9 @@
project='awesome-launch'
title='awesome-launch API documentation'
description='API documentation for awesome-launch, a library for Awesome WM'
file='init.lua'
file={
'init.lua',
'panel.lua',
}
-- vim: ft=lua

66
panel.lua Normal file
View File

@ -0,0 +1,66 @@
--- Launch clients as panels.
--
-- @author James Reed <jcrd@tuta.io>
-- @copyright 2019 James Reed
-- @module awesome-launch.panel
local awful = require("awful")
local gtable = require("gears.table")
local launch = require("awesome-launch")
local panel = {}
-- TODO: Reapply args on restart with rule source.
-- See: https://github.com/awesomeWM/awesome/issues/2725
local function spawn(cmd, args)
local cb = args.callback
args.callback = function (c)
c.hidden = true
c.sticky = true
c.floating = true
awful.placement.scale(c, {to_percent=args.scale or 0.5})
awful.placement.centered(c)
c:connect_signal("unfocus", function () c.hidden = true end)
if cb then cb(c) end
end
launch.spawn.single_instance(cmd, args)
end
local function toggle(c)
if c == client.focus then
c.hidden = true
else
c.hidden = false
c:emit_signal("request::activate", "panel.toggle", {raise=true})
end
end
--- Toggle the visibility of a panel, spawning the command if necessary.
--
-- A panel is a floating, centered client that can be scaled to a percentage of
-- its size.
--
-- @param cmd The command.
-- @param args Table containing the single instance ID and additional arguments for spawn
-- @param args.id Single instance ID.
-- @param args.props Properties to apply to the client.
-- @param args.pwd Pathname to the working directory for new clients.
-- @param args.timeout Seconds after which to stop waiting for a client to spawn.
-- @param args.callback Function to call with client when it spawns.
-- @param args.factory The factory to use (see wm-launch's -f flag).
-- @param args.firejail If true, run cmd with firejail.
-- @param args.filter Function to filter clients that are considered.
-- @param args.scale Percent to scale client (see awful.placement.scale).
-- @function panel.toggle
function panel.toggle(cmd, args)
local c = launch.client.by_id(args.id)
if c then
toggle(c)
else
local a = {callback = function (c) toggle(c) end}
gtable.crush(a, args)
spawn(cmd, a)
end
end
return panel