update
This commit is contained in:
parent
ba5d63eebd
commit
b6c0a98073
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,3 +3,4 @@ wallpaper
|
||||||
walls
|
walls
|
||||||
*.swp
|
*.swp
|
||||||
localconf.lua
|
localconf.lua
|
||||||
|
debugging
|
||||||
|
|
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -1,6 +1,3 @@
|
||||||
[submodule "obvious"]
|
|
||||||
path = obvious
|
|
||||||
url = git://git.mercenariesguild.net/obvious.git
|
|
||||||
[submodule "vicious"]
|
[submodule "vicious"]
|
||||||
path = vicious
|
path = vicious
|
||||||
url = http://git.sysphere.org/vicious
|
url = http://git.sysphere.org/vicious
|
||||||
|
|
138
aweswt.lua
138
aweswt.lua
|
@ -1,138 +0,0 @@
|
||||||
-- aweswt.lua
|
|
||||||
-- Application switcher using dmenu
|
|
||||||
--
|
|
||||||
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
-- local functions
|
|
||||||
local get_out, get_input, _switch, assemble_command
|
|
||||||
|
|
||||||
local defaults = {}
|
|
||||||
local settings = {}
|
|
||||||
|
|
||||||
defaults.bg_focus = theme.bg_focus
|
|
||||||
defaults.fg_focus = theme.fg_focus
|
|
||||||
defaults.bg_normal = theme.bg_normal
|
|
||||||
defaults.fg_normal = theme.fg_normal
|
|
||||||
defaults.font = string.gsub(theme.font, " ","-")
|
|
||||||
defaults.menu_cmd = "dmenu -nf %q -nb %q -sf %q -sb %q -p 'Switch to' -fn %q -i"
|
|
||||||
|
|
||||||
local command
|
|
||||||
|
|
||||||
for key, value in pairs(defaults) do
|
|
||||||
settings[key] = value
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- switch with window titles
|
|
||||||
M.switch = function()
|
|
||||||
_switch(true)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- switch with client instance and class
|
|
||||||
M.switch_class = function()
|
|
||||||
_switch(false)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- {{{ option setters
|
|
||||||
|
|
||||||
M.set_bg_focus = function (color)
|
|
||||||
settings.bg_focus = color or defaults.bg_focus
|
|
||||||
assemble_command()
|
|
||||||
end
|
|
||||||
|
|
||||||
M.set_fg_focus = function (color)
|
|
||||||
settings.fg_focus = color or defaults.fg_focus
|
|
||||||
assemble_command()
|
|
||||||
end
|
|
||||||
|
|
||||||
M.set_bg_normal = function (color)
|
|
||||||
settings.bg_normal = color or defaults.bg_normal
|
|
||||||
assemble_command()
|
|
||||||
end
|
|
||||||
|
|
||||||
M.set_fg_normal = function (color)
|
|
||||||
settings.fg_normal = color or defaults.fg_normal
|
|
||||||
assemble_command()
|
|
||||||
end
|
|
||||||
|
|
||||||
M.set_font = function (font)
|
|
||||||
settings.font = font or defaults.font
|
|
||||||
assemble_command()
|
|
||||||
end
|
|
||||||
|
|
||||||
M.set_menu_command = function (command)
|
|
||||||
settings.menu_cmd = command or defaults.menu_cmd
|
|
||||||
assemble_command()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ io functions
|
|
||||||
get_out = function (a)
|
|
||||||
local f = io.popen(a)
|
|
||||||
t = {}
|
|
||||||
for line in f:lines() do
|
|
||||||
table.insert(t, line)
|
|
||||||
end
|
|
||||||
return t
|
|
||||||
end
|
|
||||||
|
|
||||||
get_input = function (a)
|
|
||||||
s1 = 'echo "' .. a .. '" | ' .. command
|
|
||||||
return get_out(s1)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ main worker function
|
|
||||||
_switch = function(use_name)
|
|
||||||
local clients = client.get()
|
|
||||||
|
|
||||||
if table.getn(clients) == 0 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local client_list_table = {}
|
|
||||||
local apps = {}
|
|
||||||
|
|
||||||
for key, client in pairs(clients) do
|
|
||||||
local app
|
|
||||||
|
|
||||||
if use_name then
|
|
||||||
app = client['name']
|
|
||||||
else
|
|
||||||
app = key .. ':' .. client['instance'] .. '.' .. client['class']
|
|
||||||
end
|
|
||||||
|
|
||||||
table.insert(client_list_table, app)
|
|
||||||
apps[app] = client
|
|
||||||
end
|
|
||||||
|
|
||||||
table.sort(client_list_table, function(a, b)
|
|
||||||
return string.lower(a) < string.lower(b)
|
|
||||||
end)
|
|
||||||
local client_list = table.concat(client_list_table, "\n")
|
|
||||||
|
|
||||||
local client_selected = apps[get_input(client_list)[1]]
|
|
||||||
if client_selected then
|
|
||||||
local ctags = client_selected:tags()
|
|
||||||
awful.tag.viewonly(ctags[1])
|
|
||||||
client.focus = client_selected
|
|
||||||
client_selected:raise()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
assemble_command = function()
|
|
||||||
command = string.format(settings.menu_cmd,
|
|
||||||
settings.fg_normal,
|
|
||||||
settings.bg_normal,
|
|
||||||
settings.fg_focus,
|
|
||||||
settings.bg_focus,
|
|
||||||
settings.font)
|
|
||||||
end
|
|
||||||
|
|
||||||
assemble_command()
|
|
||||||
return M
|
|
25
bindings.lua
25
bindings.lua
|
@ -2,9 +2,7 @@
|
||||||
local awful = awful
|
local awful = awful
|
||||||
local conf = conf
|
local conf = conf
|
||||||
local mpd = require("mpd")
|
local mpd = require("mpd")
|
||||||
local obvious = {}
|
|
||||||
local scratch = require("scratch")
|
local scratch = require("scratch")
|
||||||
obvious.popup_run_prompt = require("obvious.popup_run_prompt")
|
|
||||||
|
|
||||||
local modkey = conf.modkey or "Mod4"
|
local modkey = conf.modkey or "Mod4"
|
||||||
local mb = require("modalbind")
|
local mb = require("modalbind")
|
||||||
|
@ -32,9 +30,9 @@ mpdmap = {
|
||||||
mpdpromts = {
|
mpdpromts = {
|
||||||
name = "MPD PROMPTS",
|
name = "MPD PROMPTS",
|
||||||
a = mpd.prompt.artist,
|
a = mpd.prompt.artist,
|
||||||
A = mpd.prompt.album,
|
b = mpd.prompt.album,
|
||||||
t = mpd.prompt.title,
|
t = mpd.prompt.title,
|
||||||
r = mpd.prompt.toggle_replace_on_search,
|
r = mpd.prompt.toggle_replace_on_search
|
||||||
}
|
}
|
||||||
|
|
||||||
progmap = {
|
progmap = {
|
||||||
|
@ -51,14 +49,13 @@ function rfkill(cmd)
|
||||||
for key, adapter in pairs(adapters) do
|
for key, adapter in pairs(adapters) do
|
||||||
map[key] = spawnf("sudo rfkill "..cmd.." "..adapter)
|
map[key] = spawnf("sudo rfkill "..cmd.." "..adapter)
|
||||||
end
|
end
|
||||||
print(map["name"])
|
|
||||||
return map
|
return map
|
||||||
end
|
end
|
||||||
-- wirelessmap = {
|
wirelessmap = {
|
||||||
-- name = "RFKILL",
|
name = "RFKILL",
|
||||||
-- b = function () mb.grab(rfkill("block")) end,
|
b = mb.grabf(rfkill("block")),
|
||||||
-- u = function () mb.grab(rfkill("unblock")) end
|
u = mb.grabf(rfkill("unblock"))
|
||||||
-- }
|
}
|
||||||
|
|
||||||
function bindings.extend_and_register_key_table(globalkeys)
|
function bindings.extend_and_register_key_table(globalkeys)
|
||||||
local totalkeys = globalkeys or {}
|
local totalkeys = globalkeys or {}
|
||||||
|
@ -71,10 +68,10 @@ function bindings.extend_and_register_key_table(globalkeys)
|
||||||
|
|
||||||
--{{{ Modal mappings
|
--{{{ Modal mappings
|
||||||
|
|
||||||
awful.key({ modkey }, "m", function () mb.grab(mpdmap, true) end),
|
awful.key({ modkey }, "m", mb.grabf(mpdmap, true)),
|
||||||
awful.key({ modkey, "Shift" }, "m", function () mb.grab(mpdpromts) end),
|
awful.key({ modkey, "Shift" }, "m", mb.grabf(mpdpromts)),
|
||||||
awful.key({ modkey }, "c", function () mb.grab(progmap) end),
|
awful.key({ modkey }, "c", mb.grabf(progmap)),
|
||||||
awful.key({ modkey }, "w", function () mb.grab(wirelessmap) end),
|
awful.key({ modkey }, "w", mb.grabf(wirelessmap)),
|
||||||
--}}}
|
--}}}
|
||||||
|
|
||||||
--{{{ Audio control
|
--{{{ Audio control
|
||||||
|
|
248
inspect.lua
Normal file
248
inspect.lua
Normal file
|
@ -0,0 +1,248 @@
|
||||||
|
-----------------------------------------------------------------------------------------------------------------------
|
||||||
|
-- inspect.lua - v1.2.0 (2012-10)
|
||||||
|
-- Enrique García Cota - enrique.garcia.cota [AT] gmail [DOT] com
|
||||||
|
-- human-readable representations of tables.
|
||||||
|
-- inspired by http://lua-users.org/wiki/TableSerialization
|
||||||
|
-----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
local inspect ={}
|
||||||
|
inspect.__VERSION = '1.2.0'
|
||||||
|
|
||||||
|
-- Apostrophizes the string if it has quotes, but not aphostrophes
|
||||||
|
-- Otherwise, it returns a regular quoted string
|
||||||
|
local function smartQuote(str)
|
||||||
|
if string.match( string.gsub(str,"[^'\"]",""), '^"+$' ) then
|
||||||
|
return "'" .. str .. "'"
|
||||||
|
end
|
||||||
|
return string.format("%q", str )
|
||||||
|
end
|
||||||
|
|
||||||
|
local controlCharsTranslation = {
|
||||||
|
["\a"] = "\\a", ["\b"] = "\\b", ["\f"] = "\\f", ["\n"] = "\\n",
|
||||||
|
["\r"] = "\\r", ["\t"] = "\\t", ["\v"] = "\\v", ["\\"] = "\\\\"
|
||||||
|
}
|
||||||
|
|
||||||
|
local function unescapeChar(c) return controlCharsTranslation[c] end
|
||||||
|
|
||||||
|
local function unescape(str)
|
||||||
|
local result, _ = string.gsub( str, "(%c)", unescapeChar )
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
local function isIdentifier(str)
|
||||||
|
return type(str) == 'string' and str:match( "^[_%a][_%a%d]*$" )
|
||||||
|
end
|
||||||
|
|
||||||
|
local function isArrayKey(k, length)
|
||||||
|
return type(k)=='number' and 1 <= k and k <= length
|
||||||
|
end
|
||||||
|
|
||||||
|
local function isDictionaryKey(k, length)
|
||||||
|
return not isArrayKey(k, length)
|
||||||
|
end
|
||||||
|
|
||||||
|
local sortOrdersByType = {
|
||||||
|
['number'] = 1, ['boolean'] = 2, ['string'] = 3, ['table'] = 4,
|
||||||
|
['function'] = 5, ['userdata'] = 6, ['thread'] = 7
|
||||||
|
}
|
||||||
|
|
||||||
|
local function sortKeys(a,b)
|
||||||
|
local ta, tb = type(a), type(b)
|
||||||
|
if ta ~= tb then return sortOrdersByType[ta] < sortOrdersByType[tb] end
|
||||||
|
if ta == 'string' or ta == 'number' then return a < b end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local function getDictionaryKeys(t)
|
||||||
|
local length = #t
|
||||||
|
local keys = {}
|
||||||
|
for k,_ in pairs(t) do
|
||||||
|
if isDictionaryKey(k, length) then table.insert(keys,k) end
|
||||||
|
end
|
||||||
|
table.sort(keys, sortKeys)
|
||||||
|
return keys
|
||||||
|
end
|
||||||
|
|
||||||
|
local function getToStringResultSafely(t, mt)
|
||||||
|
local __tostring = type(mt) == 'table' and mt.__tostring
|
||||||
|
local string, status
|
||||||
|
if type(__tostring) == 'function' then
|
||||||
|
status, string = pcall(__tostring, t)
|
||||||
|
string = status and string or 'error: ' .. tostring(string)
|
||||||
|
end
|
||||||
|
return string
|
||||||
|
end
|
||||||
|
|
||||||
|
local Inspector = {}
|
||||||
|
|
||||||
|
function Inspector:new(t, depth)
|
||||||
|
local inspector = {
|
||||||
|
buffer = {},
|
||||||
|
depth = depth,
|
||||||
|
level = 0,
|
||||||
|
maxIds = {
|
||||||
|
['function'] = 0,
|
||||||
|
['userdata'] = 0,
|
||||||
|
['thread'] = 0,
|
||||||
|
['table'] = 0,
|
||||||
|
['key'] = 0,
|
||||||
|
['tag'] = 0
|
||||||
|
},
|
||||||
|
ids = {
|
||||||
|
['function'] = setmetatable({}, {__mode = "kv"}),
|
||||||
|
['userdata'] = setmetatable({}, {__mode = "kv"}),
|
||||||
|
['thread'] = setmetatable({}, {__mode = "kv"}),
|
||||||
|
['table'] = setmetatable({}, {__mode = "kv"}),
|
||||||
|
['key'] = setmetatable({}, {__mode = "kv"}),
|
||||||
|
['tag'] = setmetatable({}, {__mode = "kv"})
|
||||||
|
},
|
||||||
|
tableAppearances = setmetatable({}, {__mode = "k"})
|
||||||
|
}
|
||||||
|
|
||||||
|
setmetatable(inspector, {__index = Inspector})
|
||||||
|
|
||||||
|
inspector:countTableAppearances(t)
|
||||||
|
|
||||||
|
return inspector:putValue(t)
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:countTableAppearances(t)
|
||||||
|
if type(t) == 'table' then
|
||||||
|
if not self.tableAppearances[t] then
|
||||||
|
self.tableAppearances[t] = 1
|
||||||
|
for k,v in pairs(t) do
|
||||||
|
self:countTableAppearances(k)
|
||||||
|
self:countTableAppearances(v)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
self.tableAppearances[t] = self.tableAppearances[t] + 1
|
||||||
|
end
|
||||||
|
self:countTableAppearances(getmetatable(t))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:tabify()
|
||||||
|
self:puts("\n", string.rep(" ", self.level))
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:up()
|
||||||
|
self.level = self.level - 1
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:down()
|
||||||
|
self.level = self.level + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:puts(...)
|
||||||
|
local args = {...}
|
||||||
|
local len = #self.buffer
|
||||||
|
for i=1, #args do
|
||||||
|
len = len + 1
|
||||||
|
self.buffer[len] = tostring(args[i])
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:commaControl(comma)
|
||||||
|
if comma then self:puts(',') end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:putTable(t)
|
||||||
|
if self:alreadyVisited(t) then
|
||||||
|
self:puts('<table ', self:getId(t), '>')
|
||||||
|
elseif self.depth and self.level >= self.depth then
|
||||||
|
self:puts('{...}')
|
||||||
|
else
|
||||||
|
if self.tableAppearances[t] > 1 then
|
||||||
|
self:puts('<',self:getId(t),'>')
|
||||||
|
end
|
||||||
|
self:puts('{')
|
||||||
|
self:down()
|
||||||
|
|
||||||
|
local length = #t
|
||||||
|
local mt = getmetatable(t)
|
||||||
|
|
||||||
|
local string = getToStringResultSafely(t, mt)
|
||||||
|
if type(string) == 'string' and #string > 0 then
|
||||||
|
self:puts(' -- ', unescape(string))
|
||||||
|
if length >= 1 then self:tabify() end -- tabify the array values
|
||||||
|
end
|
||||||
|
|
||||||
|
local comma = false
|
||||||
|
for i=1, length do
|
||||||
|
comma = self:commaControl(comma)
|
||||||
|
self:puts(' '):putValue(t[i])
|
||||||
|
end
|
||||||
|
|
||||||
|
local dictKeys = getDictionaryKeys(t)
|
||||||
|
|
||||||
|
for _,k in ipairs(dictKeys) do
|
||||||
|
comma = self:commaControl(comma)
|
||||||
|
self:tabify():putKey(k):puts(' = '):putValue(t[k])
|
||||||
|
end
|
||||||
|
|
||||||
|
if mt then
|
||||||
|
comma = self:commaControl(comma)
|
||||||
|
self:tabify():puts('<metatable> = '):putValue(mt)
|
||||||
|
end
|
||||||
|
|
||||||
|
self:up()
|
||||||
|
|
||||||
|
if #dictKeys > 0 or mt then -- dictionary table. Justify closing }
|
||||||
|
self:tabify()
|
||||||
|
elseif length > 0 then -- array tables have one extra space before closing }
|
||||||
|
self:puts(' ')
|
||||||
|
end
|
||||||
|
self:puts('}')
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:alreadyVisited(v)
|
||||||
|
return self.ids[type(v)][v] ~= nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:getId(v)
|
||||||
|
local tv = type(v)
|
||||||
|
local idtable = self.ids[tv]
|
||||||
|
local id = idtable and idtable[v] or nil
|
||||||
|
if not id then
|
||||||
|
id = self.maxIds[tv] + 1
|
||||||
|
self.maxIds[tv] = id
|
||||||
|
self.ids[tv][v] = id
|
||||||
|
end
|
||||||
|
return id
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:putValue(v)
|
||||||
|
local tv = type(v)
|
||||||
|
|
||||||
|
if tv == 'string' then
|
||||||
|
self:puts(smartQuote(unescape(v)))
|
||||||
|
elseif tv == 'number' or tv == 'boolean' or tv == 'nil' then
|
||||||
|
self:puts(tostring(v))
|
||||||
|
elseif tv == 'table' then
|
||||||
|
self:putTable(v)
|
||||||
|
else
|
||||||
|
self:puts('<',tv,' ',self:getId(v),'>')
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:putKey(k)
|
||||||
|
if isIdentifier(k) then return self:puts(k) end
|
||||||
|
return self:puts( "[" ):putValue(k):puts("]")
|
||||||
|
end
|
||||||
|
|
||||||
|
function Inspector:tostring()
|
||||||
|
return table.concat(self.buffer)
|
||||||
|
end
|
||||||
|
|
||||||
|
setmetatable(inspect, { __call = function(_,t,depth)
|
||||||
|
return Inspector:new(t, depth):tostring()
|
||||||
|
end })
|
||||||
|
|
||||||
|
return inspect
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
local M = {}
|
local modalbind = {}
|
||||||
|
local wibox = require("wibox")
|
||||||
local inited = false
|
local inited = false
|
||||||
local modewidget = {}
|
local modewidget = {}
|
||||||
local modewibox = { screen = -1 }
|
local modewibox = { screen = -1 }
|
||||||
|
local nesting = 0
|
||||||
|
|
||||||
--local functions
|
--local functions
|
||||||
|
|
||||||
|
@ -31,49 +33,54 @@ end
|
||||||
|
|
||||||
--- Change the opacity of the modebox.
|
--- Change the opacity of the modebox.
|
||||||
-- @param amount opacity between 0.0 and 1.0, or nil to use default
|
-- @param amount opacity between 0.0 and 1.0, or nil to use default
|
||||||
M.set_opacity = function (amount)
|
function set_opacity(amount)
|
||||||
settings.opacity = amount or defaults.opacity
|
settings.opacity = amount or defaults.opacity
|
||||||
update_settings()
|
update_settings()
|
||||||
end
|
end
|
||||||
|
modalbind.set_opacity = set_opacity
|
||||||
|
|
||||||
--- Change height of the modebox.
|
--- Change height of the modebox.
|
||||||
-- @param amount height in pixels, or nil to use default
|
-- @param amount height in pixels, or nil to use default
|
||||||
M.set_height = function (amount)
|
function set_height(amount)
|
||||||
settings.height = amount or defaults.height
|
settings.height = amount or defaults.height
|
||||||
update_settings()
|
update_settings()
|
||||||
end
|
end
|
||||||
|
modalbind.set_height = set_height
|
||||||
|
|
||||||
--- Change border width of the modebox.
|
--- Change border width of the modebox.
|
||||||
-- @param amount width in pixels, or nil to use default
|
-- @param amount width in pixels, or nil to use default
|
||||||
M.set_border_width = function (amount)
|
function set_border_width(amount)
|
||||||
settings.border_width = amount or defaults.border_width
|
settings.border_width = amount or defaults.border_width
|
||||||
update_settings()
|
update_settings()
|
||||||
end
|
end
|
||||||
|
modalbind.set_border_width = set_border_width
|
||||||
|
|
||||||
--- Change horizontal offset of the modebox.
|
--- Change horizontal offset of the modebox.
|
||||||
-- set location for the box with set_corner(). The box is shifted to the right
|
-- set location for the box with set_corner(). The box is shifted to the right
|
||||||
-- if it is in one of the left corners or to the left otherwise
|
-- if it is in one of the left corners or to the left otherwise
|
||||||
-- @param amount horizontal shift in pixels, or nil to use default
|
-- @param amount horizontal shift in pixels, or nil to use default
|
||||||
M.set_x_offset = function (amount)
|
function set_x_offset (amount)
|
||||||
settings.x_offset = amount or defaults.x_offset
|
settings.x_offset = amount or defaults.x_offset
|
||||||
update_settings()
|
update_settings()
|
||||||
end
|
end
|
||||||
|
modalbind.set_x_offset = set_x_offset
|
||||||
|
|
||||||
--- Change vertical offset of the modebox.
|
--- Change vertical offset of the modebox.
|
||||||
-- set location for the box with set_corner(). The box is shifted downwards if it
|
-- set location for the box with set_corner(). The box is shifted downwards if it
|
||||||
-- is in one of the upper corners or upwards otherwise.
|
-- is in one of the upper corners or upwards otherwise.
|
||||||
-- @param amount vertical shift in pixels, or nil to use default
|
-- @param amount vertical shift in pixels, or nil to use default
|
||||||
M.set_y_offset = function (amount)
|
function set_y_offset(amount)
|
||||||
settings.y_offset = amount or defaults.y_offset
|
settings.y_offset = amount or defaults.y_offset
|
||||||
update_settings()
|
update_settings()
|
||||||
end
|
end
|
||||||
|
modalbind.set_y_offset = set_y_offset
|
||||||
|
|
||||||
--- Set the corner, where the modebox will be displayed
|
--- Set the corner, where the modebox will be displayed
|
||||||
-- If a parameter is not a valid orientation (see below), the function returns
|
-- If a parameter is not a valid orientation (see below), the function returns
|
||||||
-- without doing anything
|
-- without doing anything
|
||||||
-- @param vertical either top or bottom
|
-- @param vertical either top or bottom
|
||||||
-- @param horizontal either left or right
|
-- @param horizontal either left or right
|
||||||
M.set_corner = function (vertical, horizontal)
|
function set_corner(vertical, horizontal)
|
||||||
if (vertical ~= "top" and vertical ~= "bottom") then
|
if (vertical ~= "top" and vertical ~= "bottom") then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -83,10 +90,12 @@ M.set_corner = function (vertical, horizontal)
|
||||||
settings.corner_v = vertical or defaults.corner_v
|
settings.corner_v = vertical or defaults.corner_v
|
||||||
settings.corner_h = horizontal or defaults.corner_h
|
settings.corner_h = horizontal or defaults.corner_h
|
||||||
end
|
end
|
||||||
|
modalbind.set_corner = set_corner
|
||||||
|
|
||||||
M.set_show_options = function (bool)
|
function set_show_options(bool)
|
||||||
settings.show_options = bool
|
settings.show_options = bool
|
||||||
end
|
end
|
||||||
|
modalbind.set_show_options = set_show_options
|
||||||
|
|
||||||
local function set_default(s)
|
local function set_default(s)
|
||||||
minwidth, minheight = modewidget[s]:fit(screen[s].geometry.width,
|
minwidth, minheight = modewidget[s]:fit(screen[s].geometry.width,
|
||||||
|
@ -151,12 +160,16 @@ local function hide_box()
|
||||||
if s ~= -1 then modewibox[s].visible = false end
|
if s ~= -1 then modewibox[s].visible = false end
|
||||||
end
|
end
|
||||||
|
|
||||||
M.grab = function(keymap, stay_in_mode)
|
function grab(keymap, stay_in_mode)
|
||||||
if keymap.name then show_box(mouse.screen, keymap) end
|
if keymap.name then
|
||||||
|
show_box(mouse.screen, keymap)
|
||||||
|
nesting = nesting + 1
|
||||||
|
end
|
||||||
|
|
||||||
keygrabber.run(function(mod, key, event)
|
keygrabber.run(function(mod, key, event)
|
||||||
if key == "Escape" then
|
if key == "Escape" then
|
||||||
keygrabber.stop()
|
keygrabber.stop()
|
||||||
|
nesting = 0
|
||||||
hide_box();
|
hide_box();
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
@ -167,9 +180,10 @@ M.grab = function(keymap, stay_in_mode)
|
||||||
keygrabber.stop()
|
keygrabber.stop()
|
||||||
keymap[key]()
|
keymap[key]()
|
||||||
if stay_in_mode then
|
if stay_in_mode then
|
||||||
M.grab(keymap, true)
|
grab(keymap, true)
|
||||||
else
|
else
|
||||||
hide_box()
|
nesting = nesting - 1
|
||||||
|
if nesting < 1 then hide_box() end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -177,10 +191,14 @@ M.grab = function(keymap, stay_in_mode)
|
||||||
return true
|
return true
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
M.grabf = function(keymap, stay_in_mode)
|
modalbind.grab = grab
|
||||||
return function() M.grab(keymap, stay_in_mode) end
|
|
||||||
|
function grabf(keymap, stay_in_mode)
|
||||||
|
return function() grab(keymap, stay_in_mode) end
|
||||||
end
|
end
|
||||||
|
modalbind.grabf = grabf
|
||||||
|
|
||||||
M.wibox = function() return modewibox[1] end
|
function modebox() return modewibox[1] end
|
||||||
|
modalbind.modebox = modebox
|
||||||
|
|
||||||
return M
|
return modalbind
|
||||||
|
|
74
mpd.lua
74
mpd.lua
|
@ -1,74 +1,46 @@
|
||||||
--assert(package.loadlib(MY_PATH .. "./mpdc.so", "luaopen_mpdc"))
|
|
||||||
require "mpdc"
|
|
||||||
local M = {}
|
local M = {}
|
||||||
local type = ""
|
|
||||||
local conf = conf
|
local conf = conf
|
||||||
|
local awful = awful
|
||||||
|
local log = log
|
||||||
|
|
||||||
-- local functions
|
-- local functions
|
||||||
local show, mpc_play_search, notify
|
local dmenu, mpc_play_search, notify, mpc
|
||||||
|
|
||||||
local conn = nil
|
|
||||||
|
|
||||||
local defaults = {}
|
local defaults = {}
|
||||||
local settings = {}
|
local settings = {}
|
||||||
|
|
||||||
defaults.host = "127.0.0.1"
|
|
||||||
defaults.port = 6600
|
|
||||||
defaults.replace_on_search = true
|
defaults.replace_on_search = true
|
||||||
|
|
||||||
for key, value in pairs(defaults) do
|
for key, value in pairs(defaults) do
|
||||||
settings[key] = value
|
settings[key] = value
|
||||||
end
|
end
|
||||||
|
|
||||||
-- {{{ basic functions
|
mpc = function(command)
|
||||||
|
awful.util.spawn("mpc " .. command)
|
||||||
M.connect = function ()
|
|
||||||
print("Connecting to mpd")
|
|
||||||
conn = mpdc.open(settings.host, settings.port)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
M.disconnect = function()
|
|
||||||
if conn ~= nil then conn:close() end
|
|
||||||
conn = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
M.ensure_connection = function()
|
|
||||||
-- connect on first call
|
|
||||||
if conn == nil then M.connect() end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ mpd.ctrl submodule
|
-- {{{ mpd.ctrl submodule
|
||||||
|
|
||||||
M.ctrl = {}
|
M.ctrl = {}
|
||||||
|
|
||||||
M.ctrl.toggle = function ()
|
M.ctrl.toggle = function ()
|
||||||
M.ensure_connection()
|
mpc("toggle")
|
||||||
conn:toggle()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
M.ctrl.play = function ()
|
M.ctrl.play = function ()
|
||||||
M.ensure_connection()
|
mpc("play")
|
||||||
conn:play()
|
|
||||||
-- TODO widget updating
|
|
||||||
end
|
end
|
||||||
|
|
||||||
M.ctrl.pause = function ()
|
M.ctrl.pause = function ()
|
||||||
M.ensure_connection()
|
mpc("pause")
|
||||||
conn:pause()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
M.ctrl.next = function ()
|
M.ctrl.next = function ()
|
||||||
M.ensure_connection()
|
mpc("next")
|
||||||
conn:next()
|
|
||||||
-- TODO widget updating
|
|
||||||
end
|
end
|
||||||
|
|
||||||
M.ctrl.prev = function ()
|
M.ctrl.prev = function ()
|
||||||
M.ensure_connection()
|
mpc("prev")
|
||||||
conn:prev()
|
|
||||||
-- TODO widget updating
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- }}}
|
-- }}}
|
||||||
|
@ -82,22 +54,23 @@ local clear_before = conf.mpd_prompt_clear_before == nil and
|
||||||
M.prompt = {}
|
M.prompt = {}
|
||||||
|
|
||||||
M.prompt.artist = function()
|
M.prompt.artist = function()
|
||||||
type = "artist"
|
dmenu("-a")
|
||||||
show()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
M.prompt.album = function()
|
M.prompt.album = function()
|
||||||
type = "album"
|
dmenu("-a -b")
|
||||||
show()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
M.prompt.title = function()
|
M.prompt.title = function()
|
||||||
type = "title"
|
dmenu("-a -b -t")
|
||||||
show()
|
|
||||||
end
|
end
|
||||||
M.prompt.title = title
|
M.prompt.title = title
|
||||||
|
|
||||||
|
function dmenu(opts)
|
||||||
|
awful.util.spawn("dmpc " .. (clear_before and "-r" or "-R") .. " " .. opts)
|
||||||
|
end
|
||||||
|
|
||||||
M.prompt.replace_on_search = function(bool)
|
M.prompt.replace_on_search = function(bool)
|
||||||
clear_before = bool
|
clear_before = bool
|
||||||
end
|
end
|
||||||
|
@ -109,19 +82,8 @@ M.prompt.toggle_replace_on_search = function()
|
||||||
).. " the playlist")
|
).. " the playlist")
|
||||||
end
|
end
|
||||||
|
|
||||||
function show()
|
|
||||||
obvious.popup_run_prompt.set_prompt_string("Play ".. type .. ":")
|
|
||||||
obvious.popup_run_prompt.set_cache("/mpd_ ".. type);
|
|
||||||
obvious.popup_run_prompt.set_run_function(mpc_play_search)
|
|
||||||
obvious.popup_run_prompt.run_prompt()
|
|
||||||
end
|
|
||||||
|
|
||||||
function mpc_play_search(s)
|
function mpc_play_search(s)
|
||||||
if clear_before then conn:clear() end
|
notify("Found " .. (s) .. " matches");
|
||||||
local result, num = conn:isearch(type, s)
|
|
||||||
notify("Found " .. (num) .. " matches");
|
|
||||||
conn:iadd(result)
|
|
||||||
conn:play()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- }}}
|
-- }}}
|
||||||
|
|
1
obvious
1
obvious
|
@ -1 +0,0 @@
|
||||||
Subproject commit c5b884459194a15a38b88c99d5558a64efaf4e89
|
|
2
rc.lua
2
rc.lua
|
@ -7,6 +7,7 @@ beautiful = require("autobeautiful")
|
||||||
naughty = require("naughty")
|
naughty = require("naughty")
|
||||||
conf = require("localconf")
|
conf = require("localconf")
|
||||||
require("errors")
|
require("errors")
|
||||||
|
inspect = require("inspect")
|
||||||
-- }}}
|
-- }}}
|
||||||
|
|
||||||
layouts = require('layouts')
|
layouts = require('layouts')
|
||||||
|
@ -22,6 +23,7 @@ log.add_logger(log.loggers.naughty, 2)
|
||||||
|
|
||||||
tags = require('tags')
|
tags = require('tags')
|
||||||
tags.setup()
|
tags.setup()
|
||||||
|
|
||||||
-- }}}
|
-- }}}
|
||||||
|
|
||||||
-- {{{ widgets
|
-- {{{ widgets
|
||||||
|
|
12
rules.lua
12
rules.lua
|
@ -129,6 +129,18 @@ local function setup(self)
|
||||||
opacity = 0.9
|
opacity = 0.9
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
rule = { class = "feh", name = "timetable" },
|
||||||
|
properties = {
|
||||||
|
tag = tags[rule_screen][13],
|
||||||
|
skip_taskbar = true,
|
||||||
|
type = desktop,
|
||||||
|
below = true,
|
||||||
|
focusable = false,
|
||||||
|
border_width = 0,
|
||||||
|
floating = true
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
rule = { instance = "Awesomelog" },
|
rule = { instance = "Awesomelog" },
|
||||||
properties = {
|
properties = {
|
||||||
|
|
|
@ -26,10 +26,10 @@ function loglv(msg, level)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function debug(msg)
|
function dbg(msg)
|
||||||
loglv(msg, 0)
|
loglv(msg, 0)
|
||||||
end
|
end
|
||||||
simplelog.debug = debug
|
simplelog.debug = dbg
|
||||||
|
|
||||||
function log(msg)
|
function log(msg)
|
||||||
loglv(msg, 1)
|
loglv(msg, 1)
|
||||||
|
@ -50,13 +50,11 @@ function add_logger(logger, level)
|
||||||
if level == nil then
|
if level == nil then
|
||||||
level = settings.defaultlevel
|
level = settings.defaultlevel
|
||||||
end
|
end
|
||||||
print(inspect(logger))
|
|
||||||
table.insert(settings.loggers, function(msg, severity)
|
table.insert(settings.loggers, function(msg, severity)
|
||||||
if severity >= level then
|
if severity >= level then
|
||||||
logger(msg, severity)
|
logger(msg, severity)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
print(inspect(settings.loggers))
|
|
||||||
end
|
end
|
||||||
simplelog.add_logger = add_logger
|
simplelog.add_logger = add_logger
|
||||||
|
|
||||||
|
|
47
uzbl.lua
47
uzbl.lua
|
@ -1,47 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
uzbltag = tags[rule_screen][2]
|
|
||||||
mytasklist = {}
|
|
||||||
mytasklist.buttons = awful.util.table.join(
|
|
||||||
awful.button({ }, 1, function (c)
|
|
||||||
if c == client.focus then
|
|
||||||
c.minimized = true
|
|
||||||
else
|
|
||||||
if not c:isvisible() then
|
|
||||||
awful.tag.viewonly(c:tags()[1])
|
|
||||||
end
|
|
||||||
-- This will also un-minimize
|
|
||||||
-- the client, if needed
|
|
||||||
client.focus = c
|
|
||||||
c:raise()
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
awful.button({ }, 3, function ()
|
|
||||||
if instance then
|
|
||||||
instance:hide()
|
|
||||||
instance = nil
|
|
||||||
else
|
|
||||||
instance = awful.menu.clients({ width=250 })
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
awful.button({ }, 4, function ()
|
|
||||||
awful.client.focus.byidx(1)
|
|
||||||
if client.focus then client.focus:raise() end
|
|
||||||
end),
|
|
||||||
awful.button({ }, 5, function ()
|
|
||||||
awful.client.focus.byidx(-1)
|
|
||||||
if client.focus then client.focus:raise() end
|
|
||||||
end))
|
|
||||||
|
|
||||||
mytasklist[rule_screen] = awful.widget.tasklist(function(c)
|
|
||||||
return awful.widget.tasklist.label.currenttags(c, rule_screen)
|
|
||||||
end, mytasklist.buttons)
|
|
||||||
uzblbox = {}
|
|
||||||
uzblbox = awful.wibox({ position = "top", screen = rule_screen })
|
|
||||||
uzblbox.visible = false
|
|
||||||
uzblbox.widgets = { mytasklist[rule_screen],
|
|
||||||
layout = awful.widget.layout.horizontal.rightleft }
|
|
||||||
|
|
||||||
uzbltag:add_signal("property::selected", function (tag)
|
|
||||||
uzblbox.visible = tag.selected
|
|
||||||
end)
|
|
|
@ -202,9 +202,9 @@ widgets.add.cpu = cpuwidget
|
||||||
|
|
||||||
-- battery
|
-- battery
|
||||||
local function batterywidget(name, screen, parent_layout, batname) --{{{
|
local function batterywidget(name, screen, parent_layout, batname) --{{{
|
||||||
|
print("creating batwidget '" .. name .. "' for battery '"..batname.."'")
|
||||||
local widget = wibox.widget.textbox()
|
local widget = wibox.widget.textbox()
|
||||||
local bg = wibox.widget.background()
|
local bg = wibox.widget.background()
|
||||||
print("creating batwidget '" .. name .. "' for battery '"..batname.."'")
|
|
||||||
bg:set_widget(widget)
|
bg:set_widget(widget)
|
||||||
vicious.register(widget, vicious.widgets.bat, function (widget, args)
|
vicious.register(widget, vicious.widgets.bat, function (widget, args)
|
||||||
if args[2] == 0 then return ""
|
if args[2] == 0 then return ""
|
||||||
|
|
Loading…
Reference in a new issue