Name change
This commit is contained in:
parent
3f23185a5c
commit
d96b3a1258
30 changed files with 938 additions and 835 deletions
|
@ -28,7 +28,7 @@ If you want to create a pull request, make sure that:
|
||||||
|
|
||||||
- Your code fits with the general style of the module. In particular, you should use the same indentation pattern that the code uses, and also avoid adding space at the ends of lines.
|
- Your code fits with the general style of the module. In particular, you should use the same indentation pattern that the code uses, and also avoid adding space at the ends of lines.
|
||||||
|
|
||||||
- Your code its easy to understand, maintainable, and modularized. You should also avoid code duplication wherever possible by adding functions to or using lain.helpers_. If something is unclear, or you can not write it in such a way that it will be clear, explain it with a comment.
|
- Your code its easy to understand, maintainable, and modularized. You should also avoid code duplication wherever possible by adding functions to or using lina.helpers_. If something is unclear, or you can not write it in such a way that it will be clear, explina it with a comment.
|
||||||
|
|
||||||
- You test your changes before submitting to make sure that your code works and does not break other parts of the module.
|
- You test your changes before submitting to make sure that your code works and does not break other parts of the module.
|
||||||
|
|
||||||
|
|
10
helpers.lua
10
helpers.lua
|
@ -15,13 +15,13 @@ local rawget = rawget
|
||||||
local tsort = table.sort
|
local tsort = table.sort
|
||||||
local unpack = unpack or table.unpack -- lua 5.1 retro-compatibility
|
local unpack = unpack or table.unpack -- lua 5.1 retro-compatibility
|
||||||
|
|
||||||
-- Lain helper functions for internal use
|
-- Lina helper functions for internal use
|
||||||
-- lain.helpers
|
-- lina.helpers
|
||||||
local helpers = {}
|
local helpers = {}
|
||||||
|
|
||||||
helpers.lain_dir = debug.getinfo(1, 'S').source:match[[^@(.*/).*$]]
|
helpers.lina_dir = debug.getinfo(1, 'S').source:match[[^@(.*/).*$]]
|
||||||
helpers.icons_dir = helpers.lain_dir .. 'icons/'
|
helpers.icons_dir = helpers.lina_dir .. 'icons/'
|
||||||
helpers.scripts_dir = helpers.lain_dir .. 'scripts/'
|
helpers.scripts_dir = helpers.lina_dir .. 'scripts/'
|
||||||
|
|
||||||
-- {{{ Modules loader
|
-- {{{ Modules loader
|
||||||
|
|
||||||
|
|
2
init.lua
2
init.lua
|
@ -1,6 +1,6 @@
|
||||||
--[[
|
--[[
|
||||||
|
|
||||||
Lain
|
Lina
|
||||||
Layouts, widgets and utilities for Awesome WM
|
Layouts, widgets and utilities for Awesome WM
|
||||||
|
|
||||||
Licensed under GNU General Public License v2
|
Licensed under GNU General Public License v2
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--[[
|
--[[
|
||||||
|
|
||||||
Lain
|
Lina
|
||||||
Layouts, widgets and utilities for Awesome WM
|
Layouts, widgets and utilities for Awesome WM
|
||||||
|
|
||||||
Layouts section
|
Layouts section
|
||||||
|
@ -11,9 +11,9 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local wrequire = require("lain.helpers").wrequire
|
local wrequire = require("lina.helpers").wrequire
|
||||||
local setmetatable = setmetatable
|
local setmetatable = setmetatable
|
||||||
|
|
||||||
local layout = { _NAME = "lain.layout" }
|
local layout = { _NAME = "lina.layout" }
|
||||||
|
|
||||||
return setmetatable(layout, { __index = wrequire })
|
return setmetatable(layout, { __index = wrequire })
|
||||||
|
|
1246
util/dkjson.lua
1246
util/dkjson.lua
File diff suppressed because it is too large
Load diff
254
util/init.lua
254
util/init.lua
|
@ -1,6 +1,6 @@
|
||||||
--[[
|
--[[
|
||||||
|
|
||||||
Lain
|
Lina
|
||||||
Layouts, widgets and utilities for Awesome WM
|
Layouts, widgets and utilities for Awesome WM
|
||||||
|
|
||||||
Utilities section
|
Utilities section
|
||||||
|
@ -11,180 +11,200 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local awful = require("awful")
|
local awful = require("awful")
|
||||||
local sqrt = math.sqrt
|
local sqrt = math.sqrt
|
||||||
local pairs = pairs
|
local pairs = pairs
|
||||||
local client = client
|
local client = client
|
||||||
local tonumber = tonumber
|
local tonumber = tonumber
|
||||||
local wrequire = require("lina.helpers").wrequire
|
local wrequire = require("lina.helpers").wrequire
|
||||||
local setmetatable = setmetatable
|
local setmetatable = setmetatable
|
||||||
|
|
||||||
-- Lain utilities submodule
|
-- Lina utilities submodule
|
||||||
-- lain.util
|
-- lina.util
|
||||||
local util = { _NAME = "lain.util" }
|
local util = { _NAME = "lina.util" }
|
||||||
|
|
||||||
-- Like awful.menu.clients, but only show clients of currently selected tags
|
-- Like awful.menu.clients, but only show clients of currently selected tags
|
||||||
function util.menu_clients_current_tags(menu, args)
|
function util.menu_clients_current_tags(menu, args)
|
||||||
-- List of currently selected tags.
|
-- List of currently selected tags.
|
||||||
local cls_tags = awful.screen.focused().selected_tags
|
local cls_tags = awful.screen.focused().selected_tags
|
||||||
|
|
||||||
if cls_tags == nil then return nil end
|
if cls_tags == nil then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
-- Final list of menu items.
|
-- Final list of menu items.
|
||||||
local cls_t = {}
|
local cls_t = {}
|
||||||
|
|
||||||
-- For each selected tag get all clients of that tag and add them to
|
-- For each selected tag get all clients of that tag and add them to
|
||||||
-- the menu. A click on a menu item will raise that client.
|
-- the menu. A click on a menu item will raise that client.
|
||||||
for i = 1,#cls_tags do
|
for i = 1, #cls_tags do
|
||||||
local t = cls_tags[i]
|
local t = cls_tags[i]
|
||||||
local cls = t:clients()
|
local cls = t:clients()
|
||||||
|
|
||||||
for _, c in pairs(cls) do
|
for _, c in pairs(cls) do
|
||||||
cls_t[#cls_t + 1] = { awful.util.escape(c.name) or "",
|
cls_t[#cls_t + 1] = {
|
||||||
function ()
|
awful.util.escape(c.name) or "",
|
||||||
c.minimized = false
|
function()
|
||||||
client.focus = c
|
c.minimized = false
|
||||||
c:raise()
|
client.focus = c
|
||||||
end,
|
c:raise()
|
||||||
c.icon }
|
end,
|
||||||
end
|
c.icon,
|
||||||
end
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- No clients? Then quit.
|
-- No clients? Then quit.
|
||||||
if #cls_t <= 0 then return nil end
|
if #cls_t <= 0 then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
-- menu may contain some predefined values, otherwise start with a
|
-- menu may contain some predefined values, otherwise start with a
|
||||||
-- fresh menu.
|
-- fresh menu.
|
||||||
if not menu then menu = {} end
|
if not menu then
|
||||||
|
menu = {}
|
||||||
|
end
|
||||||
|
|
||||||
-- Set the list of items and show the menu.
|
-- Set the list of items and show the menu.
|
||||||
menu.items = cls_t
|
menu.items = cls_t
|
||||||
local m = awful.menu(menu)
|
local m = awful.menu(menu)
|
||||||
m:show(args)
|
m:show(args)
|
||||||
|
|
||||||
return m
|
return m
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Magnify a client: set it to "float" and resize it.
|
-- Magnify a client: set it to "float" and resize it.
|
||||||
function util.magnify_client(c, width_f, height_f)
|
function util.magnify_client(c, width_f, height_f)
|
||||||
if c and not c.floating then
|
if c and not c.floating then
|
||||||
util.magnified_client = c
|
util.magnified_client = c
|
||||||
util.mc(c, width_f, height_f)
|
util.mc(c, width_f, height_f)
|
||||||
else
|
else
|
||||||
util.magnified_client = nil
|
util.magnified_client = nil
|
||||||
c.floating = false
|
c.floating = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- https://github.com/lcpz/lain/issues/195
|
-- https://github.com/lcpz/lain/issues/195
|
||||||
function util.mc(c, width_f, height_f)
|
function util.mc(c, width_f, height_f)
|
||||||
c = c or util.magnified_client
|
c = c or util.magnified_client
|
||||||
if not c then return end
|
if not c then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
c.floating = true
|
c.floating = true
|
||||||
local s = awful.screen.focused()
|
local s = awful.screen.focused()
|
||||||
local mg = s.workarea
|
local mg = s.workarea
|
||||||
local g = {}
|
local g = {}
|
||||||
local mwfact = width_f or s.selected_tag.master_width_factor or 0.5
|
local mwfact = width_f or s.selected_tag.master_width_factor or 0.5
|
||||||
g.width = sqrt(mwfact) * mg.width
|
g.width = sqrt(mwfact) * mg.width
|
||||||
g.height = sqrt(height_f or mwfact) * mg.height
|
g.height = sqrt(height_f or mwfact) * mg.height
|
||||||
g.x = mg.x + (mg.width - g.width) / 2
|
g.x = mg.x + (mg.width - g.width) / 2
|
||||||
g.y = mg.y + (mg.height - g.height) / 2
|
g.y = mg.y + (mg.height - g.height) / 2
|
||||||
|
|
||||||
if c then c:geometry(g) end -- if c is still a valid object
|
if c then
|
||||||
|
c:geometry(g)
|
||||||
|
end -- if c is still a valid object
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Non-empty tag browsing
|
-- Non-empty tag browsing
|
||||||
-- direction in {-1, 1} <-> {previous, next} non-empty tag
|
-- direction in {-1, 1} <-> {previous, next} non-empty tag
|
||||||
function util.tag_view_nonempty(direction,sc)
|
function util.tag_view_nonempty(direction, sc)
|
||||||
direction = direction or 1
|
direction = direction or 1
|
||||||
local s = sc or awful.screen.focused()
|
local s = sc or awful.screen.focused()
|
||||||
local tags = s.tags
|
local tags = s.tags
|
||||||
local sel = s.selected_tag
|
local sel = s.selected_tag
|
||||||
|
|
||||||
local i = sel.index
|
local i = sel.index
|
||||||
repeat
|
repeat
|
||||||
i = i + direction
|
i = i + direction
|
||||||
|
|
||||||
-- Wrap around when we reach one of the bounds
|
-- Wrap around when we reach one of the bounds
|
||||||
if i > #tags then
|
if i > #tags then
|
||||||
i = i - #tags
|
i = i - #tags
|
||||||
end
|
end
|
||||||
if i < 1 then
|
if i < 1 then
|
||||||
i = i + #tags
|
i = i + #tags
|
||||||
end
|
end
|
||||||
|
|
||||||
local t = tags[i]
|
local t = tags[i]
|
||||||
|
|
||||||
-- Stop when we get back to where we started
|
-- Stop when we get back to where we started
|
||||||
if t == sel then
|
if t == sel then
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
||||||
-- If it's The One, view it.
|
-- If it's The One, view it.
|
||||||
if #t:clients() > 0 then
|
if #t:clients() > 0 then
|
||||||
t:view_only()
|
t:view_only()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
until false
|
until false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- {{{ Dynamic tagging
|
-- {{{ Dynamic tagging
|
||||||
|
|
||||||
-- Add a new tag
|
-- Add a new tag
|
||||||
function util.add_tag(layout)
|
function util.add_tag(layout)
|
||||||
awful.prompt.run {
|
awful.prompt.run({
|
||||||
prompt = "New tag name: ",
|
prompt = "New tag name: ",
|
||||||
textbox = awful.screen.focused().mypromptbox.widget,
|
textbox = awful.screen.focused().mypromptbox.widget,
|
||||||
exe_callback = function(name)
|
exe_callback = function(name)
|
||||||
if not name or #name == 0 then return end
|
if not name or #name == 0 then
|
||||||
awful.tag.add(name, { screen = awful.screen.focused(), layout = layout or awful.layout.suit.tile }):view_only()
|
return
|
||||||
end
|
end
|
||||||
}
|
awful.tag
|
||||||
|
.add(name, { screen = awful.screen.focused(), layout = layout or awful.layout.suit.tile })
|
||||||
|
:view_only()
|
||||||
|
end,
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Rename current tag
|
-- Rename current tag
|
||||||
function util.rename_tag()
|
function util.rename_tag()
|
||||||
awful.prompt.run {
|
awful.prompt.run({
|
||||||
prompt = "Rename tag: ",
|
prompt = "Rename tag: ",
|
||||||
textbox = awful.screen.focused().mypromptbox.widget,
|
textbox = awful.screen.focused().mypromptbox.widget,
|
||||||
exe_callback = function(new_name)
|
exe_callback = function(new_name)
|
||||||
if not new_name or #new_name == 0 then return end
|
if not new_name or #new_name == 0 then
|
||||||
local t = awful.screen.focused().selected_tag
|
return
|
||||||
if t then
|
end
|
||||||
t.name = new_name
|
local t = awful.screen.focused().selected_tag
|
||||||
end
|
if t then
|
||||||
end
|
t.name = new_name
|
||||||
}
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Move current tag
|
-- Move current tag
|
||||||
-- pos in {-1, 1} <-> {previous, next} tag position
|
-- pos in {-1, 1} <-> {previous, next} tag position
|
||||||
function util.move_tag(pos)
|
function util.move_tag(pos)
|
||||||
local tag = awful.screen.focused().selected_tag
|
local tag = awful.screen.focused().selected_tag
|
||||||
if tonumber(pos) <= -1 then
|
if tonumber(pos) <= -1 then
|
||||||
awful.tag.move(tag.index - 1, tag)
|
awful.tag.move(tag.index - 1, tag)
|
||||||
else
|
else
|
||||||
awful.tag.move(tag.index + 1, tag)
|
awful.tag.move(tag.index + 1, tag)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Delete current tag
|
-- Delete current tag
|
||||||
-- Any rule set on the tag shall be broken
|
-- Any rule set on the tag shall be broken
|
||||||
function util.delete_tag()
|
function util.delete_tag()
|
||||||
local t = awful.screen.focused().selected_tag
|
local t = awful.screen.focused().selected_tag
|
||||||
if not t then return end
|
if not t then
|
||||||
t:delete()
|
return
|
||||||
|
end
|
||||||
|
t:delete()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- }}}
|
-- }}}
|
||||||
|
|
||||||
-- On the fly useless gaps change
|
-- On the fly useless gaps change
|
||||||
function util.useless_gaps_resize(thatmuch, s, t)
|
function util.useless_gaps_resize(thatmuch, s, t)
|
||||||
local scr = s or awful.screen.focused()
|
local scr = s or awful.screen.focused()
|
||||||
local tag = t or scr.selected_tag
|
local tag = t or scr.selected_tag
|
||||||
tag.gap = tag.gap + tonumber(thatmuch)
|
tag.gap = tag.gap + tonumber(thatmuch)
|
||||||
awful.layout.arrange(scr)
|
awful.layout.arrange(scr)
|
||||||
end
|
end
|
||||||
|
|
||||||
return setmetatable(util, { __index = wrequire })
|
return setmetatable(util, { __index = wrequire })
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
local format = string.format
|
local format = string.format
|
||||||
local setmetatable = setmetatable
|
local setmetatable = setmetatable
|
||||||
|
|
||||||
-- Lain markup util submodule
|
-- Lina markup util submodule
|
||||||
-- lain.util.markup
|
-- lina.util.markup
|
||||||
local markup = { fg = {}, bg = {} }
|
local markup = { fg = {}, bg = {} }
|
||||||
|
|
||||||
-- Convenience tags
|
-- Convenience tags
|
||||||
|
|
|
@ -8,10 +8,10 @@
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
-- Menu iterator with Naughty notifications
|
-- Menu iterator with Naughty notifications
|
||||||
-- lain.util.menu_iterator
|
-- lina.util.menu_iterator
|
||||||
|
|
||||||
local naughty = require("naughty")
|
local naughty = require("naughty")
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local atable = require("awful.util").table
|
local atable = require("awful.util").table
|
||||||
local assert = assert
|
local assert = assert
|
||||||
local pairs = pairs
|
local pairs = pairs
|
||||||
|
|
|
@ -10,8 +10,8 @@ local wibox = require("wibox")
|
||||||
local gears = require("gears")
|
local gears = require("gears")
|
||||||
local beautiful = require("beautiful")
|
local beautiful = require("beautiful")
|
||||||
|
|
||||||
-- Lain Cairo separators util submodule
|
-- Lina Cairo separators util submodule
|
||||||
-- lain.util.separators
|
-- lina.util.separators
|
||||||
local separators = { height = beautiful.separators_height or 0, width = beautiful.separators_width or 9 }
|
local separators = { height = beautiful.separators_height or 0, width = beautiful.separators_width or 9 }
|
||||||
|
|
||||||
-- [[ Arrow
|
-- [[ Arrow
|
||||||
|
|
|
@ -6,13 +6,13 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local shell = require("awful.util").shell
|
local shell = require("awful.util").shell
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local string = string
|
local string = string
|
||||||
|
|
||||||
-- ALSA volume
|
-- ALSA volume
|
||||||
-- lain.widget.alsa
|
-- lina.widget.alsa
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local awful = require("awful")
|
local awful = require("awful")
|
||||||
local naughty = require("naughty")
|
local naughty = require("naughty")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
|
@ -16,7 +16,7 @@ local type = type
|
||||||
local tonumber = tonumber
|
local tonumber = tonumber
|
||||||
|
|
||||||
-- ALSA volume bar
|
-- ALSA volume bar
|
||||||
-- lain.widget.alsabar
|
-- lina.widget.alsabar
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
local alsabar = {
|
local alsabar = {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local fs = require("gears.filesystem")
|
local fs = require("gears.filesystem")
|
||||||
local naughty = require("naughty")
|
local naughty = require("naughty")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
|
@ -16,13 +16,13 @@ local ipairs = ipairs
|
||||||
local tonumber = tonumber
|
local tonumber = tonumber
|
||||||
|
|
||||||
-- Battery infos
|
-- Battery infos
|
||||||
-- lain.widget.bat
|
-- lina.widget.bat
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
local pspath = args.pspath or "/sys/class/power_supply/"
|
local pspath = args.pspath or "/sys/class/power_supply/"
|
||||||
|
|
||||||
if not fs.is_dir(pspath) then
|
if not fs.is_dir(pspath) then
|
||||||
naughty.notify { text = "lain.widget.bat: invalid power supply path", timeout = 0 }
|
naughty.notify { text = "lina.widget.bat: invalid power supply path", timeout = 0 }
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local markup = require("lain.util.markup")
|
local markup = require("lina.util.markup")
|
||||||
local awful = require("awful")
|
local awful = require("awful")
|
||||||
local naughty = require("naughty")
|
local naughty = require("naughty")
|
||||||
local floor = math.floor
|
local floor = math.floor
|
||||||
|
@ -19,7 +19,7 @@ local tonumber = tonumber
|
||||||
local tostring = tostring
|
local tostring = tostring
|
||||||
|
|
||||||
-- Calendar notification
|
-- Calendar notification
|
||||||
-- lain.widget.cal
|
-- lina.widget.cal
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--[[
|
--[[
|
||||||
|
|
||||||
Lain
|
Lina
|
||||||
Layouts, widgets and utilities for Awesome WM
|
Layouts, widgets and utilities for Awesome WM
|
||||||
|
|
||||||
Users contributed widgets section
|
Users contributed widgets section
|
||||||
|
@ -10,9 +10,9 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local wrequire = require("lain.helpers").wrequire
|
local wrequire = require("lina.helpers").wrequire
|
||||||
local setmetatable = setmetatable
|
local setmetatable = setmetatable
|
||||||
|
|
||||||
local widget = { _NAME = "lain.widget.contrib" }
|
local widget = { _NAME = "lina.widget.contrib" }
|
||||||
|
|
||||||
return setmetatable(widget, { __index = wrequire })
|
return setmetatable(widget, { __index = wrequire })
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local shell = require("awful.util").shell
|
local shell = require("awful.util").shell
|
||||||
local focused = require("awful.screen").focused
|
local focused = require("awful.screen").focused
|
||||||
local escape_f = require("awful.util").escape
|
local escape_f = require("awful.util").escape
|
||||||
|
@ -15,7 +15,7 @@ local os = os
|
||||||
local string = string
|
local string = string
|
||||||
|
|
||||||
-- MOC audio player
|
-- MOC audio player
|
||||||
-- lain.widget.contrib.moc
|
-- lina.widget.contrib.moc
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
|
@ -6,13 +6,13 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local async = require("lain.helpers").async
|
local async = require("lina.helpers").async
|
||||||
local awful = require("awful")
|
local awful = require("awful")
|
||||||
local execute = os.execute
|
local execute = os.execute
|
||||||
local type = type
|
local type = type
|
||||||
|
|
||||||
-- Redshift
|
-- Redshift
|
||||||
-- lain.widget.contrib.redshift
|
-- lina.widget.contrib.redshift
|
||||||
local redshift = { active = false, pid = nil }
|
local redshift = { active = false, pid = nil }
|
||||||
|
|
||||||
function redshift.start()
|
function redshift.start()
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local markup = require("lain.util").markup
|
local markup = require("lina.util").markup
|
||||||
local awful = require("awful")
|
local awful = require("awful")
|
||||||
local naughty = require("naughty")
|
local naughty = require("naughty")
|
||||||
local mouse = mouse
|
local mouse = mouse
|
||||||
|
|
||||||
-- Taskwarrior notification
|
-- Taskwarrior notification
|
||||||
-- lain.widget.contrib.task
|
-- lina.widget.contrib.task
|
||||||
local task = {}
|
local task = {}
|
||||||
|
|
||||||
function task.hide()
|
function task.hide()
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local focused = require("awful.screen").focused
|
local focused = require("awful.screen").focused
|
||||||
local naughty = require("naughty")
|
local naughty = require("naughty")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
|
@ -15,7 +15,7 @@ local type = type
|
||||||
|
|
||||||
-- ThinkPad battery infos and widget creator
|
-- ThinkPad battery infos and widget creator
|
||||||
-- http://www.thinkwiki.org/wiki/Tp_smapi
|
-- http://www.thinkwiki.org/wiki/Tp_smapi
|
||||||
-- lain.widget.contrib.tp_smapi
|
-- lina.widget.contrib.tp_smapi
|
||||||
|
|
||||||
local function factory(apipath)
|
local function factory(apipath)
|
||||||
local tp_smapi = {
|
local tp_smapi = {
|
||||||
|
|
|
@ -6,13 +6,13 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local math = math
|
local math = math
|
||||||
local string = string
|
local string = string
|
||||||
|
|
||||||
-- CPU usage
|
-- CPU usage
|
||||||
-- lain.widget.cpu
|
-- lina.widget.cpu
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local Gio = require("lgi").Gio
|
local Gio = require("lgi").Gio
|
||||||
local focused = require("awful.screen").focused
|
local focused = require("awful.screen").focused
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
|
@ -23,7 +23,7 @@ local query_used = Gio.FILE_ATTRIBUTE_FILESYSTEM_USED
|
||||||
local query = query_size .. "," .. query_free .. "," .. query_used
|
local query = query_size .. "," .. query_free .. "," .. query_used
|
||||||
|
|
||||||
-- File systems info
|
-- File systems info
|
||||||
-- lain.widget.fs
|
-- lina.widget.fs
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
149
widget/imap.lua
149
widget/imap.lua
|
@ -5,90 +5,111 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local naughty = require("naughty")
|
local naughty = require("naughty")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local awful = require("awful")
|
local awful = require("awful")
|
||||||
local string = string
|
local string = string
|
||||||
local type = type
|
local type = type
|
||||||
local tonumber = tonumber
|
local tonumber = tonumber
|
||||||
|
|
||||||
-- Mail IMAP check
|
-- Mail IMAP check
|
||||||
-- lain.widget.imap
|
-- lina.widget.imap
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
||||||
local imap = { widget = args.widget or wibox.widget.textbox() }
|
local imap = { widget = args.widget or wibox.widget.textbox() }
|
||||||
local server = args.server
|
local server = args.server
|
||||||
local mail = args.mail
|
local mail = args.mail
|
||||||
local password = args.password
|
local password = args.password
|
||||||
local port = args.port or 993
|
local port = args.port or 993
|
||||||
local timeout = args.timeout or 60
|
local timeout = args.timeout or 60
|
||||||
local pwdtimeout = args.pwdtimeout or 10
|
local pwdtimeout = args.pwdtimeout or 10
|
||||||
local is_plain = args.is_plain or false
|
local is_plain = args.is_plain or false
|
||||||
local followtag = args.followtag or false
|
local followtag = args.followtag or false
|
||||||
local notify = args.notify or "on"
|
local notify = args.notify or "on"
|
||||||
local settings = args.settings or function() end
|
local settings = args.settings or function() end
|
||||||
|
|
||||||
local head_command = "curl --connect-timeout 3 -fsm 3"
|
local head_command = "curl --connect-timeout 3 -fsm 3"
|
||||||
local request = "-X 'STATUS INBOX (MESSAGES RECENT UNSEEN)'"
|
local request = "-X 'STATUS INBOX (MESSAGES RECENT UNSEEN)'"
|
||||||
|
|
||||||
if not server or not mail or not password then return end
|
if not server or not mail or not password then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
mail_notification_preset = {
|
mail_notification_preset = {
|
||||||
icon = helpers.icons_dir .. "mail.png",
|
icon = helpers.icons_dir .. "mail.png",
|
||||||
position = "top_left"
|
position = "top_left",
|
||||||
}
|
}
|
||||||
|
|
||||||
helpers.set_map(mail, 0)
|
helpers.set_map(mail, 0)
|
||||||
|
|
||||||
if not is_plain then
|
if not is_plain then
|
||||||
if type(password) == "string" or type(password) == "table" then
|
if type(password) == "string" or type(password) == "table" then
|
||||||
helpers.async(password, function(f) password = f:gsub("\n", "") end)
|
helpers.async(password, function(f)
|
||||||
elseif type(password) == "function" then
|
password = f:gsub("\n", "")
|
||||||
imap.pwdtimer = helpers.newtimer(mail .. "-password", pwdtimeout, function()
|
end)
|
||||||
local retrieved_password, try_again = password()
|
elseif type(password) == "function" then
|
||||||
if not try_again then
|
imap.pwdtimer = helpers.newtimer(mail .. "-password", pwdtimeout, function()
|
||||||
imap.pwdtimer:stop() -- stop trying to retrieve
|
local retrieved_password, try_again = password()
|
||||||
password = retrieved_password or "" -- failsafe
|
if not try_again then
|
||||||
end
|
imap.pwdtimer:stop() -- stop trying to retrieve
|
||||||
end, true, true)
|
password = retrieved_password or "" -- failsafe
|
||||||
end
|
end
|
||||||
end
|
end, true, true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function imap.update()
|
function imap.update()
|
||||||
-- do not update if the password has not been retrieved yet
|
-- do not update if the password has not been retrieved yet
|
||||||
if type(password) ~= "string" then return end
|
if type(password) ~= "string" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local curl = string.format("%s --url imaps://%s:%s/INBOX -u %s:'%s' %s -k",
|
local curl = string.format(
|
||||||
head_command, server, port, mail, password, request)
|
"%s --url imaps://%s:%s/INBOX -u %s:'%s' %s -k",
|
||||||
|
head_command,
|
||||||
|
server,
|
||||||
|
port,
|
||||||
|
mail,
|
||||||
|
password,
|
||||||
|
request
|
||||||
|
)
|
||||||
|
|
||||||
helpers.async(curl, function(f)
|
helpers.async(curl, function(f)
|
||||||
imap_now = { ["MESSAGES"] = 0, ["RECENT"] = 0, ["UNSEEN"] = 0 }
|
imap_now = { ["MESSAGES"] = 0, ["RECENT"] = 0, ["UNSEEN"] = 0 }
|
||||||
|
|
||||||
for s,d in f:gmatch("(%w+)%s+(%d+)") do imap_now[s] = tonumber(d) end
|
for s, d in f:gmatch("(%w+)%s+(%d+)") do
|
||||||
mailcount = imap_now["UNSEEN"] -- backwards compatibility
|
imap_now[s] = tonumber(d)
|
||||||
widget = imap.widget
|
end
|
||||||
|
mailcount = imap_now["UNSEEN"] -- backwards compatibility
|
||||||
|
widget = imap.widget
|
||||||
|
|
||||||
settings()
|
settings()
|
||||||
|
|
||||||
if notify == "on" and mailcount and mailcount >= 1 and mailcount > helpers.get_map(mail) then
|
if notify == "on" and mailcount and mailcount >= 1 and mailcount > helpers.get_map(mail) then
|
||||||
if followtag then mail_notification_preset.screen = awful.screen.focused() end
|
if followtag then
|
||||||
naughty.notify {
|
mail_notification_preset.screen = awful.screen.focused()
|
||||||
preset = mail_notification_preset,
|
end
|
||||||
text = string.format("%s has <b>%d</b> new message%s", mail, mailcount, mailcount == 1 and "" or "s")
|
naughty.notify({
|
||||||
}
|
preset = mail_notification_preset,
|
||||||
end
|
text = string.format(
|
||||||
|
"%s has <b>%d</b> new message%s",
|
||||||
|
mail,
|
||||||
|
mailcount,
|
||||||
|
mailcount == 1 and "" or "s"
|
||||||
|
),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
helpers.set_map(mail, imap_now["UNSEEN"])
|
helpers.set_map(mail, imap_now["UNSEEN"])
|
||||||
end)
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
imap.timer = helpers.newtimer(mail, timeout, imap.update, true, true)
|
||||||
|
|
||||||
imap.timer = helpers.newtimer(mail, timeout, imap.update, true, true)
|
return imap
|
||||||
|
|
||||||
return imap
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return factory
|
return factory
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--[[
|
--[[
|
||||||
|
|
||||||
Lain
|
Lina
|
||||||
Layouts, widgets and utilities for Awesome WM
|
Layouts, widgets and utilities for Awesome WM
|
||||||
|
|
||||||
Widgets section
|
Widgets section
|
||||||
|
@ -11,9 +11,9 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local wrequire = require("lain.helpers").wrequire
|
local wrequire = require("lina.helpers").wrequire
|
||||||
local setmetatable = setmetatable
|
local setmetatable = setmetatable
|
||||||
|
|
||||||
local widget = { _NAME = "lain.widget" }
|
local widget = { _NAME = "lina.widget" }
|
||||||
|
|
||||||
return setmetatable(widget, { __index = wrequire })
|
return setmetatable(widget, { __index = wrequire })
|
||||||
|
|
|
@ -6,12 +6,12 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local gmatch, lines, floor = string.gmatch, io.lines, math.floor
|
local gmatch, lines, floor = string.gmatch, io.lines, math.floor
|
||||||
|
|
||||||
-- Memory usage (ignoring caches)
|
-- Memory usage (ignoring caches)
|
||||||
-- lain.widget.mem
|
-- lina.widget.mem
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local shell = require("awful.util").shell
|
local shell = require("awful.util").shell
|
||||||
local escape_f = require("awful.util").escape
|
local escape_f = require("awful.util").escape
|
||||||
local focused = require("awful.screen").focused
|
local focused = require("awful.screen").focused
|
||||||
|
@ -16,7 +16,7 @@ local os = os
|
||||||
local string = string
|
local string = string
|
||||||
|
|
||||||
-- MPD infos
|
-- MPD infos
|
||||||
-- lain.widget.mpd
|
-- lina.widget.mpd
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
|
@ -6,13 +6,13 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local naughty = require("naughty")
|
local naughty = require("naughty")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local string = string
|
local string = string
|
||||||
|
|
||||||
-- Network infos
|
-- Network infos
|
||||||
-- lain.widget.net
|
-- lina.widget.net
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local shell = require("awful.util").shell
|
local shell = require("awful.util").shell
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local string = string
|
local string = string
|
||||||
local type = type
|
local type = type
|
||||||
|
|
||||||
-- PulseAudio volume
|
-- PulseAudio volume
|
||||||
-- lain.widget.pulse
|
-- lina.widget.pulse
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local awful = require("awful")
|
local awful = require("awful")
|
||||||
local naughty = require("naughty")
|
local naughty = require("naughty")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
|
@ -16,7 +16,7 @@ local type = type
|
||||||
local tonumber = tonumber
|
local tonumber = tonumber
|
||||||
|
|
||||||
-- PulseAudio volume bar
|
-- PulseAudio volume bar
|
||||||
-- lain.widget.pulsebar
|
-- lina.widget.pulsebar
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
local pulsebar = {
|
local pulsebar = {
|
||||||
|
|
|
@ -6,12 +6,12 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local open, match = io.open, string.match
|
local open, match = io.open, string.match
|
||||||
|
|
||||||
-- System load
|
-- System load
|
||||||
-- lain.widget.sysload
|
-- lina.widget.sysload
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local tonumber = tonumber
|
local tonumber = tonumber
|
||||||
|
|
||||||
-- {thermal,core} temperature info
|
-- {thermal,core} temperature info
|
||||||
-- lain.widget.temp
|
-- lina.widget.temp
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
local helpers = require("lain.helpers")
|
local helpers = require("lina.helpers")
|
||||||
local json = require("lain.util").dkjson
|
local json = require("lina.util").dkjson
|
||||||
local focused = require("awful.screen").focused
|
local focused = require("awful.screen").focused
|
||||||
local naughty = require("naughty")
|
local naughty = require("naughty")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
|
@ -18,7 +18,7 @@ local tonumber = tonumber
|
||||||
|
|
||||||
-- OpenWeatherMap
|
-- OpenWeatherMap
|
||||||
-- current weather and X-days forecast
|
-- current weather and X-days forecast
|
||||||
-- lain.widget.weather
|
-- lina.widget.weather
|
||||||
|
|
||||||
local function factory(args)
|
local function factory(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
|
|
Loading…
Add table
Reference in a new issue