Merge branch 'master' into testing
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
wp
|
||||||
|
wallpaper
|
6
.gitmodules
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[submodule "obvious"]
|
||||||
|
path = obvious
|
||||||
|
url = git://git.mercenariesguild.net/obvious.git
|
||||||
|
[submodule "vicious"]
|
||||||
|
path = vicious
|
||||||
|
url = http://git.sysphere.org/vicious
|
50
aweswt.lua
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
-- aweswt.lua
|
||||||
|
local io=io
|
||||||
|
local table=table
|
||||||
|
local pairs=pairs
|
||||||
|
local awful=awful
|
||||||
|
local client=client
|
||||||
|
local string=string
|
||||||
|
local USE_T=true
|
||||||
|
module("aweswt")
|
||||||
|
function get_out (a)
|
||||||
|
local f=io.popen (a)
|
||||||
|
t={}
|
||||||
|
for line in f:lines() do
|
||||||
|
table.insert(t, line )
|
||||||
|
end
|
||||||
|
return t
|
||||||
|
end
|
||||||
|
function get_input (a)
|
||||||
|
s1='echo -e "'..a..'"|dmenu -i'
|
||||||
|
return get_out(s1)
|
||||||
|
end
|
||||||
|
|
||||||
|
function switch()
|
||||||
|
local clients = client.get()
|
||||||
|
if table.getn(clients) == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local m1=""
|
||||||
|
local t2={}
|
||||||
|
local tmp
|
||||||
|
for i, c in pairs(clients) do
|
||||||
|
if USE_T then do
|
||||||
|
tmp=i..':'..string.sub(c['name'], 1, 20)
|
||||||
|
end
|
||||||
|
else do
|
||||||
|
tmp=i..':'..c['instance']..'.'..c['class']
|
||||||
|
end
|
||||||
|
end
|
||||||
|
m1=m1..tmp..'\n'
|
||||||
|
t2[tmp]=c
|
||||||
|
end
|
||||||
|
local t6=t2[get_input(m1)[1]]
|
||||||
|
if t6 then
|
||||||
|
local ctags = t6:tags()
|
||||||
|
awful.tag.viewonly(ctags[1])
|
||||||
|
client.focus = t6
|
||||||
|
t6:raise()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
469
back.rc.lua
|
@ -1,469 +0,0 @@
|
||||||
-- Standard awesome library
|
|
||||||
require("awful")
|
|
||||||
-- Theme handling library
|
|
||||||
require("beautiful")
|
|
||||||
-- Notification library
|
|
||||||
require("naughty")
|
|
||||||
|
|
||||||
-- Load Debian menu entries
|
|
||||||
require("debian.menu")
|
|
||||||
|
|
||||||
-- {{{ Variable definitions
|
|
||||||
-- Themes define colours, icons, and wallpapers
|
|
||||||
-- The default is a dark theme
|
|
||||||
theme_path = "/home/jack/.config/awesome/theme.lua"
|
|
||||||
-- Uncommment this for a lighter theme
|
|
||||||
-- theme_path = "/usr/share/awesome/themes/sky/theme.lua"
|
|
||||||
|
|
||||||
-- Actually load theme
|
|
||||||
beautiful.init(theme_path)
|
|
||||||
|
|
||||||
-- This is used later as the default terminal and editor to run.
|
|
||||||
terminal = "x-terminal-emulator"
|
|
||||||
editor = os.getenv("EDITOR") or "editor"
|
|
||||||
editor_cmd = terminal .. " -e " .. editor
|
|
||||||
|
|
||||||
-- Default modkey.
|
|
||||||
-- Usually, Mod4 is the key with a logo between Control and Alt.
|
|
||||||
-- If you do not like this or do not have such a key,
|
|
||||||
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
|
|
||||||
-- However, you can use another modifier like Mod1, but it may interact with others.
|
|
||||||
modkey = "Mod1"
|
|
||||||
|
|
||||||
-- Table of layouts to cover with awful.layout.inc, order matters.
|
|
||||||
layouts =
|
|
||||||
{
|
|
||||||
awful.layout.suit.tile,
|
|
||||||
awful.layout.suit.tile.left,
|
|
||||||
awful.layout.suit.tile.bottom,
|
|
||||||
awful.layout.suit.tile.top,
|
|
||||||
awful.layout.suit.fair,
|
|
||||||
awful.layout.suit.fair.horizontal,
|
|
||||||
awful.layout.suit.max,
|
|
||||||
awful.layout.suit.max.fullscreen,
|
|
||||||
awful.layout.suit.magnifier,
|
|
||||||
awful.layout.suit.floating
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Table of clients that should be set floating. The index may be either
|
|
||||||
-- the application class or instance. The instance is useful when running
|
|
||||||
-- a console app in a terminal like (Music on Console)
|
|
||||||
-- x-terminal-emulator -name mocp -e mocp
|
|
||||||
floatapps =
|
|
||||||
{
|
|
||||||
-- by class
|
|
||||||
["MPlayer"] = true,
|
|
||||||
["pinentry"] = true,
|
|
||||||
["gimp"] = true,
|
|
||||||
-- by instance
|
|
||||||
["mocp"] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Applications to be moved to a pre-defined tag by class or instance.
|
|
||||||
-- Use the screen and tags indices.
|
|
||||||
apptags =
|
|
||||||
{
|
|
||||||
-- ["Firefox"] = { screen = 1, tag = 2 },
|
|
||||||
-- ["mocp"] = { screen = 2, tag = 4 },
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Define if we want to use titlebar on all applications.
|
|
||||||
use_titlebar = false
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Tags
|
|
||||||
-- Define tags table.
|
|
||||||
tags = {}
|
|
||||||
tags.setup = {
|
|
||||||
{ name = "terms" },
|
|
||||||
{ name = "web" },
|
|
||||||
{ name = "music" },
|
|
||||||
{ name = "dls" },
|
|
||||||
{ name = "files" },
|
|
||||||
{ name = "images" },
|
|
||||||
{ name = "videos" },
|
|
||||||
{ name = "exps" },
|
|
||||||
{ name = "other" },
|
|
||||||
{ name = "nil" }
|
|
||||||
}
|
|
||||||
for s = 1, screen.count() do
|
|
||||||
tags[s] = {}
|
|
||||||
for i, t in ipairs(tags.setup) do
|
|
||||||
tags[s][i] = tag({ name = t.name })
|
|
||||||
tags[s][i].screen = s
|
|
||||||
awful.layout.set(layouts[1], tags[s][i])
|
|
||||||
end
|
|
||||||
tags[s][1].selected = true
|
|
||||||
end
|
|
||||||
--local tags = {}
|
|
||||||
-- tags.setup = {
|
|
||||||
-- { name = "term", layout = layouts[3] },
|
|
||||||
-- { name = "emacs", layout = layouts[1] },
|
|
||||||
-- { name = "web", layout = layouts[1] },
|
|
||||||
--{ name = "mail", layout = layouts[5] },
|
|
||||||
--{ name = "im", layout = layouts[1], mwfact = 0.13 },
|
|
||||||
-- { name = "6", layout = layouts[7], hide = true },
|
|
||||||
-- { name = "7", layout = layouts[7], hide = true },
|
|
||||||
-- { name = "rss", layout = layouts[6] },
|
|
||||||
-- { name = "media", layout = layouts[7] }
|
|
||||||
-- }
|
|
||||||
|
|
||||||
-- for s = 1, screen.count() do
|
|
||||||
-- tags[s] = {}
|
|
||||||
-- for i, t in ipairs(tags.setup) do
|
|
||||||
-- tags[s][i] = tag({ name = t.name })
|
|
||||||
-- tags[s][i].screen = s
|
|
||||||
-- awful.tag.setproperty(tags[s][i], "layout", t.layout)
|
|
||||||
-- awful.tag.setproperty(tags[s][i], "mwfact", t.mwfact)
|
|
||||||
-- awful.tag.setproperty(tags[s][i], "hide", t.hide)
|
|
||||||
-- end
|
|
||||||
-- tags[s][1].selected = true
|
|
||||||
-- end
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Wibox
|
|
||||||
-- Create a textbox widget
|
|
||||||
mytextbox = widget({ type = "textbox", align = "right" })
|
|
||||||
-- Set the default text in textbox
|
|
||||||
mytextbox.text = " loading... "
|
|
||||||
|
|
||||||
-- Create a laucher widget and a main menu
|
|
||||||
myawesomemenu = {
|
|
||||||
{ "manual", terminal .. " -e man awesome" },
|
|
||||||
{ "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" },
|
|
||||||
{ "restart", awesome.restart },
|
|
||||||
{ "quit", awesome.quit }
|
|
||||||
}
|
|
||||||
|
|
||||||
mymainmenu = awful.menu.new({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
|
|
||||||
{ "open terminal", terminal },
|
|
||||||
{ "Debian", debian.menu.Debian_menu.Debian }
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
|
|
||||||
menu = mymainmenu })
|
|
||||||
|
|
||||||
-- Create a systray
|
|
||||||
mysystray = widget({ type = "systray", align = "right" })
|
|
||||||
|
|
||||||
-- Create a wibox for each screen and add it
|
|
||||||
mywibox = {}
|
|
||||||
mypromptbox = {}
|
|
||||||
mylayoutbox = {}
|
|
||||||
mytaglist = {}
|
|
||||||
mytaglist.buttons = awful.util.table.join(
|
|
||||||
awful.button({ }, 1, awful.tag.viewonly),
|
|
||||||
awful.button({ modkey }, 1, awful.client.movetotag),
|
|
||||||
awful.button({ }, 3, function (tag) tag.selected = not tag.selected end),
|
|
||||||
awful.button({ modkey }, 3, awful.client.toggletag),
|
|
||||||
awful.button({ }, 4, awful.tag.viewnext),
|
|
||||||
awful.button({ }, 5, awful.tag.viewprev)
|
|
||||||
)
|
|
||||||
mytasklist = {}
|
|
||||||
mytasklist.buttons = awful.util.table.join(
|
|
||||||
awful.button({ }, 1, function (c)
|
|
||||||
if not c:isvisible() then
|
|
||||||
awful.tag.viewonly(c:tags()[1])
|
|
||||||
end
|
|
||||||
client.focus = c
|
|
||||||
c:raise()
|
|
||||||
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))
|
|
||||||
|
|
||||||
for s = 1, screen.count() do
|
|
||||||
-- Create a promptbox for each screen
|
|
||||||
mypromptbox[s] = awful.widget.prompt({ align = "left" })
|
|
||||||
-- Create an imagebox widget which will contains an icon indicating which layout we're using.
|
|
||||||
-- We need one layoutbox per screen.
|
|
||||||
mylayoutbox[s] = widget({ type = "imagebox", align = "right" })
|
|
||||||
mylayoutbox[s]:buttons(awful.util.table.join(
|
|
||||||
awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
|
|
||||||
awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
|
|
||||||
awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
|
|
||||||
awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
|
|
||||||
-- Create a taglist widget
|
|
||||||
mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons)
|
|
||||||
|
|
||||||
-- Create a tasklist widget
|
|
||||||
mytasklist[s] = awful.widget.tasklist(function(c)
|
|
||||||
return awful.widget.tasklist.label.currenttags(c, s)
|
|
||||||
end, mytasklist.buttons)
|
|
||||||
|
|
||||||
-- Create the wibox
|
|
||||||
mywibox[s] = wibox({ position = "top", fg = beautiful.fg_normal, bg = beautiful.bg_normal })
|
|
||||||
-- Add widgets to the wibox - order matters
|
|
||||||
mywibox[s].widgets = { mylauncher,
|
|
||||||
mytaglist[s],
|
|
||||||
--mylayoutbox[s],
|
|
||||||
--mytasklist[s],
|
|
||||||
mypromptbox[s],
|
|
||||||
mytextbox,
|
|
||||||
s == 1 and mysystray or nil }
|
|
||||||
mywibox[s].screen = s
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Mouse bindings
|
|
||||||
root.buttons(awful.util.table.join(
|
|
||||||
awful.button({ }, 3, function () mymainmenu:toggle() end),
|
|
||||||
awful.button({ }, 4, awful.tag.viewnext),
|
|
||||||
awful.button({ }, 5, awful.tag.viewprev)
|
|
||||||
))
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Key bindings
|
|
||||||
globalkeys = awful.util.table.join(
|
|
||||||
awful.key({ modkey, }, "comma", awful.tag.viewprev ),
|
|
||||||
awful.key({ modkey, }, "period", awful.tag.viewnext ),
|
|
||||||
awful.key({ modkey, }, "Escape", awful.tag.history.restore),
|
|
||||||
|
|
||||||
awful.key({ modkey, }, "t",
|
|
||||||
function ()
|
|
||||||
awful.client.focus.byidx( 1)
|
|
||||||
if client.focus then client.focus:raise() end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, }, "n",
|
|
||||||
function ()
|
|
||||||
awful.client.focus.byidx(-1)
|
|
||||||
if client.focus then client.focus:raise() end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, }, "w", function () mymainmenu:show(true) end),
|
|
||||||
|
|
||||||
-- Layout manipulation
|
|
||||||
awful.key({ modkey, "Shift" }, "t", function () awful.client.swap.byidx( 1) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "n", function () awful.client.swap.byidx( -1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "t", function () awful.screen.focus( 1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "n", function () awful.screen.focus(-1) end),
|
|
||||||
awful.key({ modkey, }, "u", awful.client.urgent.jumpto),
|
|
||||||
awful.key({ modkey, }, "Tab",
|
|
||||||
function ()
|
|
||||||
awful.client.focus.history.previous()
|
|
||||||
if client.focus then
|
|
||||||
client.focus:raise()
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
|
|
||||||
-- Standard program
|
|
||||||
awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end),
|
|
||||||
awful.key({ modkey, "Control" }, "r", awesome.restart),
|
|
||||||
awful.key({ modkey, "Shift" }, "q", awesome.quit),
|
|
||||||
|
|
||||||
awful.key({ modkey, }, "s", function () awful.tag.incmwfact( 0.05) end),
|
|
||||||
awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "s", function () awful.tag.incnmaster(-1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "s", function () awful.tag.incncol(-1) end),
|
|
||||||
awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end),
|
|
||||||
|
|
||||||
-- Prompt
|
|
||||||
awful.key({ modkey }, "apostrophe", function () mypromptbox[mouse.screen]:run() end),
|
|
||||||
|
|
||||||
awful.key({ modkey }, "x",
|
|
||||||
function ()
|
|
||||||
awful.prompt.run({ prompt = "Run Lua code: " },
|
|
||||||
mypromptbox[mouse.screen].widget,
|
|
||||||
awful.util.eval, nil,
|
|
||||||
awful.util.getdir("cache") .. "/history_eval")
|
|
||||||
end)
|
|
||||||
)
|
|
||||||
|
|
||||||
-- Client awful tagging: this is useful to tag some clients and then do stuff like move to tag on them
|
|
||||||
clientkeys = awful.util.table.join(
|
|
||||||
awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end),
|
|
||||||
awful.key({ modkey, }, "semicolon", function (c) c:kill() end),
|
|
||||||
awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ),
|
|
||||||
awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
|
|
||||||
awful.key({ modkey, }, "o", awful.client.movetoscreen ),
|
|
||||||
awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end),
|
|
||||||
awful.key({ modkey }, "w", awful.client.togglemarked),
|
|
||||||
awful.key({ modkey,}, "m",
|
|
||||||
function (c)
|
|
||||||
c.maximized_horizontal = not c.maximized_horizontal
|
|
||||||
c.maximized_vertical = not c.maximized_vertical
|
|
||||||
end)
|
|
||||||
)
|
|
||||||
|
|
||||||
-- Compute the maximum number of digit we need, limited to 9
|
|
||||||
keynumber = 0
|
|
||||||
for s = 1, screen.count() do
|
|
||||||
keynumber = math.min(9, math.max(#tags[s], keynumber));
|
|
||||||
end
|
|
||||||
|
|
||||||
for i = 1, keynumber do
|
|
||||||
globalkeys = awful.util.table.join(globalkeys,
|
|
||||||
awful.key({ modkey }, i,
|
|
||||||
function ()
|
|
||||||
local screen = mouse.screen
|
|
||||||
if tags[screen][i] then
|
|
||||||
awful.tag.viewonly(tags[screen][i])
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, "Control" }, i,
|
|
||||||
function ()
|
|
||||||
local screen = mouse.screen
|
|
||||||
if tags[screen][i] then
|
|
||||||
tags[screen][i].selected = not tags[screen][i].selected
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, "Shift" }, i,
|
|
||||||
function ()
|
|
||||||
if client.focus and tags[client.focus.screen][i] then
|
|
||||||
awful.client.movetotag(tags[client.focus.screen][i])
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, "Control", "Shift" }, i,
|
|
||||||
function ()
|
|
||||||
if client.focus and tags[client.focus.screen][i] then
|
|
||||||
awful.client.toggletag(tags[client.focus.screen][i])
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, "Shift" }, "F" .. i,
|
|
||||||
function ()
|
|
||||||
local screen = mouse.screen
|
|
||||||
if tags[screen][i] then
|
|
||||||
for k, c in pairs(awful.client.getmarked()) do
|
|
||||||
awful.client.movetotag(tags[screen][i], c)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end))
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Set keys
|
|
||||||
root.keys(globalkeys)
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Hooks
|
|
||||||
-- Hook function to execute when focusing a client.
|
|
||||||
awful.hooks.focus.register(function (c)
|
|
||||||
if not awful.client.ismarked(c) then
|
|
||||||
c.border_color = beautiful.border_focus
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook function to execute when unfocusing a client.
|
|
||||||
awful.hooks.unfocus.register(function (c)
|
|
||||||
if not awful.client.ismarked(c) then
|
|
||||||
c.border_color = beautiful.border_normal
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook function to execute when marking a client
|
|
||||||
awful.hooks.marked.register(function (c)
|
|
||||||
c.border_color = beautiful.border_marked
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook function to execute when unmarking a client.
|
|
||||||
awful.hooks.unmarked.register(function (c)
|
|
||||||
c.border_color = beautiful.border_focus
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook function to execute when the mouse enters a client.
|
|
||||||
awful.hooks.mouse_enter.register(function (c)
|
|
||||||
-- Sloppy focus, but disabled for magnifier layout
|
|
||||||
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
|
|
||||||
and awful.client.focus.filter(c) then
|
|
||||||
client.focus = c
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook function to execute when a new client appears.
|
|
||||||
awful.hooks.manage.register(function (c, startup)
|
|
||||||
-- If we are not managing this application at startup,
|
|
||||||
-- move it to the screen where the mouse is.
|
|
||||||
-- We only do it for filtered windows (i.e. no dock, etc).
|
|
||||||
if not startup and awful.client.focus.filter(c) then
|
|
||||||
c.screen = mouse.screen
|
|
||||||
end
|
|
||||||
|
|
||||||
if use_titlebar then
|
|
||||||
-- Add a titlebar
|
|
||||||
awful.titlebar.add(c, { modkey = modkey })
|
|
||||||
end
|
|
||||||
-- Add mouse bindings
|
|
||||||
c:buttons(awful.util.table.join(
|
|
||||||
awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
|
|
||||||
awful.button({ modkey }, 1, awful.mouse.client.move),
|
|
||||||
awful.button({ modkey }, 3, awful.mouse.client.resize)
|
|
||||||
))
|
|
||||||
-- New client may not receive focus
|
|
||||||
-- if they're not focusable, so set border anyway.
|
|
||||||
c.border_width = beautiful.border_width
|
|
||||||
c.border_color = beautiful.border_normal
|
|
||||||
|
|
||||||
-- Check if the application should be floating.
|
|
||||||
local cls = c.class
|
|
||||||
local inst = c.instance
|
|
||||||
if floatapps[cls] ~= nil then
|
|
||||||
awful.client.floating.set(c, floatapps[cls])
|
|
||||||
elseif floatapps[inst] ~= nil then
|
|
||||||
awful.client.floating.set(c, floatapps[inst])
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Check application->screen/tag mappings.
|
|
||||||
local target
|
|
||||||
if apptags[cls] then
|
|
||||||
target = apptags[cls]
|
|
||||||
elseif apptags[inst] then
|
|
||||||
target = apptags[inst]
|
|
||||||
end
|
|
||||||
if target then
|
|
||||||
c.screen = target.screen
|
|
||||||
awful.client.movetotag(tags[target.screen][target.tag], c)
|
|
||||||
end
|
|
||||||
c.size_hints_honor = false
|
|
||||||
-- Do this after tag mapping, so you don't see it on the wrong tag for a split second.
|
|
||||||
client.focus = c
|
|
||||||
|
|
||||||
-- Set key bindings
|
|
||||||
c:keys(clientkeys)
|
|
||||||
|
|
||||||
-- Set the windows at the slave,
|
|
||||||
-- i.e. put it at the end of others instead of setting it master.
|
|
||||||
-- awful.client.setslave(c)
|
|
||||||
|
|
||||||
-- Honor size hints: if you want to drop the gaps between windows, set this to false.
|
|
||||||
-- c.size_hints_honor = false
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook function to execute when arranging the screen.
|
|
||||||
-- (tag switch, new client, etc)
|
|
||||||
awful.hooks.arrange.register(function (screen)
|
|
||||||
local layout = awful.layout.getname(awful.layout.get(screen))
|
|
||||||
if layout and beautiful["layout_" ..layout] then
|
|
||||||
mylayoutbox[screen].image = image(beautiful["layout_" .. layout])
|
|
||||||
else
|
|
||||||
mylayoutbox[screen].image = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Give focus to the latest client in history if no window has focus
|
|
||||||
-- or if the current window is a desktop or a dock one.
|
|
||||||
if not client.focus then
|
|
||||||
local c = awful.client.focus.history.get(screen, 0)
|
|
||||||
if c then client.focus = c end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook called every minute
|
|
||||||
awful.hooks.timer.register(10, function ()
|
|
||||||
awful.util.spawn("awst")
|
|
||||||
end)
|
|
||||||
-- }}}
|
|
177
bindings.lua
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
|
||||||
|
-- {{{ Mouse bindings
|
||||||
|
root.buttons(awful.util.table.join(
|
||||||
|
awful.button({ }, 4, awful.tag.viewnext),
|
||||||
|
awful.button({ }, 5, awful.tag.viewprev)
|
||||||
|
))
|
||||||
|
-- }}}
|
||||||
|
|
||||||
|
-- {{{ Key bindings
|
||||||
|
globalkeys = awful.util.table.join(
|
||||||
|
--{{{
|
||||||
|
awful.key({ modkey, }, "Left", awful.tag.viewprev ),
|
||||||
|
awful.key({ modkey, }, "Right", awful.tag.viewnext ),
|
||||||
|
awful.key({ modkey, }, "Escape", awful.tag.history.restore),
|
||||||
|
awful.key({ }, "XF86Word", awful.tag.viewprev ),
|
||||||
|
awful.key({ }, "XF86WebCam", awful.tag.viewnext ),
|
||||||
|
awful.key({ }, "XF86Away", awful.tag.history.restore),
|
||||||
|
|
||||||
|
awful.key({ modkey, }, "j",
|
||||||
|
function ()
|
||||||
|
awful.client.focus.byidx( 1)
|
||||||
|
if client.focus then client.focus:raise() end
|
||||||
|
end),
|
||||||
|
awful.key({ modkey, }, "k",
|
||||||
|
function ()
|
||||||
|
awful.client.focus.byidx(-1)
|
||||||
|
if client.focus then client.focus:raise() end
|
||||||
|
end),
|
||||||
|
awful.key({ modkey, }, "w", function () mymainmenu:show(true) end),
|
||||||
|
--}}}
|
||||||
|
--{{{ Layout manipulation
|
||||||
|
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),
|
||||||
|
awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end),
|
||||||
|
awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end),
|
||||||
|
awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end),
|
||||||
|
awful.key({ modkey, }, "u", awful.client.urgent.jumpto),
|
||||||
|
awful.key({ modkey, }, "Tab",
|
||||||
|
function ()
|
||||||
|
awful.client.focus.history.previous()
|
||||||
|
if client.focus then
|
||||||
|
client.focus:raise()
|
||||||
|
end
|
||||||
|
end),
|
||||||
|
awful.key({ "Mod1", }, "Tab",
|
||||||
|
function ()
|
||||||
|
awful.client.focus.history.previous()
|
||||||
|
if client.focus then
|
||||||
|
client.focus:raise()
|
||||||
|
end
|
||||||
|
end),
|
||||||
|
--}}}
|
||||||
|
-- Standard program
|
||||||
|
awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end),
|
||||||
|
-- awful.key({ modkey, }, "f", function () awful.util.spawn("firefox") end),
|
||||||
|
-- awful.key({ modkey, }, "t", function () awful.util.spawn("thunderbird") end),
|
||||||
|
-- awful.key({ modkey, }, "p", function () awful.util.spawn("pidgin") end),
|
||||||
|
-- awful.key({ modkey, }, "s", function () awful.util.spawn("sunbird") end),
|
||||||
|
-- awful.key({ modkey, }, "g", function () awful.util.spawn("gmpc") end),
|
||||||
|
awful.key({ modkey, }, "f", function () awful.util.spawn("firefox") end),
|
||||||
|
awful.key({ modkey, }, "t", function () awful.util.spawn("claws-mail") end),
|
||||||
|
awful.key({ modkey, }, "p", function () awful.util.spawn("pidgin") end),
|
||||||
|
awful.key({ modkey, }, "s", function () awful.util.spawn("sunbird") end),
|
||||||
|
awful.key({ modkey, }, "g", function () awful.util.spawn("gmpc") end),
|
||||||
|
awful.key({ }, "XF86Mail", function () awful.util.spawn("xset dpms force off") end),
|
||||||
|
awful.key({ }, "XF86Mail", function () awful.util.spawn("xset dpms force off") end),
|
||||||
|
awful.key({ modkey }, "XF86Mail", function () awful.util.spawn("urslock") end),
|
||||||
|
awful.key({ modkey, "Control" }, "r", awesome.restart),
|
||||||
|
awful.key({ modkey, "Shift" }, "q", awesome.quit),
|
||||||
|
awful.key({ }, "Menu", aweswt.switch),
|
||||||
|
|
||||||
|
|
||||||
|
--tabletpc keys
|
||||||
|
awful.key({ hyper }, "6", function () awful.util.spawn("/usr/local/bin/rotate") end),
|
||||||
|
--awful.key({ modkey }, "x", function () awful.util.spawn("cellwriter --show-window") end),
|
||||||
|
awful.key({ modkey }, "x", function () teardrop("cellwriter","top","center", 0.99, 0.4)end ),
|
||||||
|
awful.key({ modkey, "Control" }, "Delete", function () awful.util.spawn("xlock") end),
|
||||||
|
|
||||||
|
-- Audio control
|
||||||
|
awful.key({ }, "Print", function () teardrop("urxvtc -e alsamixer","top","center", 0.99, 0.4)end ),
|
||||||
|
awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set Front 2dB-")end ),
|
||||||
|
awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set Front 2dB+")end ),
|
||||||
|
awful.key({ }, "XF86AudioMute", function () awful.util.spawn("amixer set Front toggle") end),
|
||||||
|
awful.key({ modkey , "Shift" }, "m", function () awful.util.spawn("mpdmenu -a") end),
|
||||||
|
awful.key({ modkey , "Control" }, "m", function () awful.util.spawn("mpdmenu -t") end),
|
||||||
|
awful.key({ modkey }, "m", function () awful.util.spawn("mpc toggle") end),
|
||||||
|
awful.key({ modkey }, "n", function () awful.util.spawn("mpc next") end),
|
||||||
|
awful.key({ modkey , "Shift"}, "n", function () awful.util.spawn("mpc prev") end),
|
||||||
|
awful.key({ }, "XF86AudioPlay", function () awful.util.spawn("mpc toggle") end),
|
||||||
|
awful.key({ }, "XF86AudioNext", function () awful.util.spawn("mpc next") end),
|
||||||
|
awful.key({ }, "XF86AudioPrev", function () awful.util.spawn("mpc prev") end),
|
||||||
|
awful.key({ }, "XF86AudioStop", function () awful.util.spawn("mpdmenu -a") end),
|
||||||
|
awful.key({ modkey , "Control" }, "n", function () awful.util.spawn("mpdmenu -j") end),
|
||||||
|
-- Prompt
|
||||||
|
awful.key({ modkey }, "r", function () obvious.popup_run_prompt.run_prompt() end),
|
||||||
|
awful.key({ }, "Scroll_Lock", function () awful.util.spawn("wli") end),
|
||||||
|
awful.key({ }, "F12", function () teardrop("urxvtc -e screen -l","center","center", 0.99, 0.7)end ),
|
||||||
|
|
||||||
|
|
||||||
|
--{{{Default
|
||||||
|
awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end),
|
||||||
|
awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end),
|
||||||
|
awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end),
|
||||||
|
awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end),
|
||||||
|
awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end),
|
||||||
|
awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end),
|
||||||
|
awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end),
|
||||||
|
awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, 0) end)
|
||||||
|
|
||||||
|
--}}}
|
||||||
|
)
|
||||||
|
|
||||||
|
clientkeys = awful.util.table.join(
|
||||||
|
awful.key({ modkey, "Shift" }, "f", function (c) c.fullscreen = not c.fullscreen end),
|
||||||
|
awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end),
|
||||||
|
awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ),
|
||||||
|
awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
|
||||||
|
awful.key({ modkey, }, "o", function (c) c.ontop = not c.ontop end),
|
||||||
|
awful.key({ modkey, }, "a", function (c) c.sticky = not c.sticky end),
|
||||||
|
awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end),
|
||||||
|
awful.key({ modkey, }, "n", function (c) c.minimized = not c.minimized end)
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Compute the maximum number of digit we need, limited to 9
|
||||||
|
keynumber = 0
|
||||||
|
for s = 1, screen.count() do
|
||||||
|
keynumber = math.min(22, math.max(#tags[s], keynumber));
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Bind all key numbers to tags.
|
||||||
|
-- Be careful: we use keycodes to make it works on any keyboard layout.
|
||||||
|
-- This should map on the top row of your keyboard, usually 1 to 9.
|
||||||
|
-- FKeys: 67-78
|
||||||
|
for i = 1, keynumber do
|
||||||
|
if i < 10 then
|
||||||
|
k = "#" .. i + 9
|
||||||
|
elseif i == 10 then
|
||||||
|
k = "#19"
|
||||||
|
elseif i > 10 then
|
||||||
|
k = "F" .. i - 10
|
||||||
|
end
|
||||||
|
globalkeys = awful.util.table.join(globalkeys,
|
||||||
|
awful.key({ modkey }, k,
|
||||||
|
function ()
|
||||||
|
local screen = mouse.screen
|
||||||
|
if tags[screen][i] then
|
||||||
|
awful.tag.viewonly(tags[screen][i])
|
||||||
|
end
|
||||||
|
end),
|
||||||
|
awful.key({ modkey, "Control" }, k,
|
||||||
|
function ()
|
||||||
|
local screen = mouse.screen
|
||||||
|
if tags[screen][i] then
|
||||||
|
awful.tag.viewtoggle(tags[screen][i])
|
||||||
|
end
|
||||||
|
end),
|
||||||
|
awful.key({ modkey, "Shift" }, k,
|
||||||
|
function ()
|
||||||
|
if client.focus and tags[client.focus.screen][i] then
|
||||||
|
awful.client.movetotag(tags[client.focus.screen][i])
|
||||||
|
end
|
||||||
|
end),
|
||||||
|
awful.key({ modkey, "Control", "Shift" }, k,
|
||||||
|
function ()
|
||||||
|
if client.focus and tags[client.focus.screen][i] then
|
||||||
|
awful.client.toggletag(tags[client.focus.screen][i])
|
||||||
|
end
|
||||||
|
end))
|
||||||
|
end
|
||||||
|
|
||||||
|
clientbuttons = awful.util.table.join(
|
||||||
|
awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
|
||||||
|
awful.button({ modkey }, 1, awful.mouse.client.move),
|
||||||
|
awful.button({ modkey }, 3, awful.mouse.client.resize))
|
||||||
|
|
||||||
|
-- Set keys
|
||||||
|
root.keys(globalkeys)
|
||||||
|
-- }}}
|
437
gitrc.lua
|
@ -1,437 +0,0 @@
|
||||||
--###
|
|
||||||
-- Standard awesome library
|
|
||||||
require("awful")
|
|
||||||
-- Theme handling library
|
|
||||||
require("beautiful")
|
|
||||||
-- Notification library
|
|
||||||
require("naughty")
|
|
||||||
-- Dynamic tagging with shifty
|
|
||||||
require("lib/shifty")
|
|
||||||
|
|
||||||
-- Wicked
|
|
||||||
require("wicked")
|
|
||||||
|
|
||||||
-- {{{ Variable definitions
|
|
||||||
-- Themes define colours, icons, and wallpapers
|
|
||||||
-- Just link your theme to ~/.awesome_theme
|
|
||||||
theme_path = os.getenv("HOME") .. "/.config/awesome/theme.lua"
|
|
||||||
|
|
||||||
-- Actually load theme
|
|
||||||
beautiful.init(theme_path)
|
|
||||||
|
|
||||||
-- Default applications
|
|
||||||
terminal = "terminal"
|
|
||||||
-- Editor to use
|
|
||||||
editor = "terminal -e vim"
|
|
||||||
-- this is the default level when adding a todo note
|
|
||||||
todo_level = "high"
|
|
||||||
-- Default modkey. l
|
|
||||||
-- Usually, Mod4 is the key with a logo between Control and Alt.
|
|
||||||
-- If you do not like this or do not have such a key,
|
|
||||||
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
|
|
||||||
-- However, you can use another modifier like Mod1, but it may interact with others.
|
|
||||||
modkey = "Mod1"
|
|
||||||
-- Table of layouts to cover with awful.layout.inc, order matters.
|
|
||||||
layouts =
|
|
||||||
{
|
|
||||||
awful.layout.suit.tile,
|
|
||||||
awful.layout.suit.tile.left,
|
|
||||||
awful.layout.suit.tile.bottom,
|
|
||||||
awful.layout.suit.tile.top,
|
|
||||||
awful.layout.suit.fair,
|
|
||||||
awful.layout.suit.fair.horizontal,
|
|
||||||
awful.layout.suit.max,
|
|
||||||
awful.layout.suit.max.fullscreen,
|
|
||||||
awful.layout.suit.floating
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Table of clients that should be set floating. The index may be either
|
|
||||||
-- the application class or instance. The instance is useful when running
|
|
||||||
-- a console app in a terminal like (Music on Console)
|
|
||||||
-- xterm -name mocp -e mocp
|
|
||||||
floatapps =
|
|
||||||
{
|
|
||||||
-- by class
|
|
||||||
["MPlayer"] = true,
|
|
||||||
["Xmessage"] = true,
|
|
||||||
["Wireshark"] = true,
|
|
||||||
["XBoard"] = true,
|
|
||||||
["feh"] = true,
|
|
||||||
["nitrogen"] = true,
|
|
||||||
["Wicd-client.py"] = true,
|
|
||||||
["gimp"] = true,
|
|
||||||
["XCalc"] = true,
|
|
||||||
["display"] = true,
|
|
||||||
["Preferences"] = true,
|
|
||||||
["XClipboard"] = true,
|
|
||||||
["Imagemagick"] = true,
|
|
||||||
["Snes9X"] = true,
|
|
||||||
["Add-ons"] = true,
|
|
||||||
["Wine desktop"] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Define if we want to use titlebar on all applications.
|
|
||||||
use_titlebar = false
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
--{{{ Shifty
|
|
||||||
|
|
||||||
shifty.config.defaults = {
|
|
||||||
layout = "tilebottom",
|
|
||||||
}
|
|
||||||
shifty.config.tags = {
|
|
||||||
["1:terms"] = { init = true, },
|
|
||||||
["2:web"] = { init = true, nopopup = true },
|
|
||||||
["3:music"] = { init =false, nopopup = true, position = 3, spawn = "ario" },
|
|
||||||
["4:dls"] = { init =false, nopopup =false, position = 4, spawn = "dtella && linuxdcpp" },
|
|
||||||
["5:files"] = { init =false, nopopup =false, position = 5 },
|
|
||||||
["6:images"] = { init =false, nopopup =false, position = 6, layout = "float" },
|
|
||||||
["7:videos"] = { init =false, nopopup =false, position = 7, layout = "float" },
|
|
||||||
["8:exps"] = { init =false, nopopup =false, position = 8, layout = "float" },
|
|
||||||
["9:work"] = { init =false, nopopup =false, position = 9 },
|
|
||||||
}
|
|
||||||
|
|
||||||
shifty.config.apps = {
|
|
||||||
{ match = { "VLC.*" }, float = true },
|
|
||||||
{ match = { "" }, honorsizehints= false,
|
|
||||||
buttons = {
|
|
||||||
button({ }, 1, function (c) client.focus = c; c:raise() end),
|
|
||||||
button({ modkey }, 1, function (c) awful.mouse.client.move() end),
|
|
||||||
button({ modkey }, 3, awful.mouse.client.resize ), }, },
|
|
||||||
}
|
|
||||||
|
|
||||||
-- tag defaults
|
|
||||||
shifty.config.defaults = {
|
|
||||||
layout = "tilebottom",
|
|
||||||
ncol = 1,
|
|
||||||
floatBars = true,
|
|
||||||
}
|
|
||||||
shifty.config.layouts = layouts
|
|
||||||
shifty.config.guess_position = true
|
|
||||||
shifty.config.remember_index = true
|
|
||||||
shifty.init()
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Widgets
|
|
||||||
-- Create a systray
|
|
||||||
mysystray = widget({ type = "systray", align = "right" })
|
|
||||||
|
|
||||||
-- Create a wibox for each screen and add it
|
|
||||||
mywibox = {}
|
|
||||||
mypromptbox = {}
|
|
||||||
mylayoutbox = {}
|
|
||||||
mytaglist = {}
|
|
||||||
mytaglist.buttons = { button({ }, 1, awful.tag.viewonly),
|
|
||||||
button({ modkey }, 1, awful.client.movetotag),
|
|
||||||
button({ }, 3, function (tag) tag.selected = not tag.selected end),
|
|
||||||
button({ modkey }, 3, awful.client.toggletag),
|
|
||||||
button({ }, 4, awful.tag.viewnext),
|
|
||||||
button({ }, 5, awful.tag.viewprev) }
|
|
||||||
shifty.taglist = mytaglist
|
|
||||||
mytasklist = {}
|
|
||||||
mytasklist.buttons = { button({ }, 1, function (c) client.focus = c; c:raise() end),
|
|
||||||
button({ }, 3, function () awful.menu.clients({ width=250 }) end),
|
|
||||||
button({ }, 4, function () awful.client.focus.byidx(1) end),
|
|
||||||
button({ }, 5, function () awful.client.focus.byidx(-1) end) }
|
|
||||||
|
|
||||||
for s = 1, screen.count() do
|
|
||||||
-- Create a promptbox for each screen
|
|
||||||
mypromptbox[s] = widget({ type = "textbox" })
|
|
||||||
|
|
||||||
-- Create a datebox widget
|
|
||||||
datebox = widget({ type = "textbox", align = "right" })
|
|
||||||
-- Create an imagebox widget which will contains an icon indicating which layout we're using.
|
|
||||||
-- We need one layoutbox per screen.
|
|
||||||
mylayoutbox[s] = widget({ type = "imagebox" })
|
|
||||||
mylayoutbox[s]:buttons({ button({ }, 1, function () awful.layout.inc(layouts, 1) end),
|
|
||||||
button({ }, 3, function () awful.layout.inc(layouts, -1) end),
|
|
||||||
button({ }, 4, function () awful.layout.inc(layouts, 1) end),
|
|
||||||
button({ }, 5, function () awful.layout.inc(layouts, -1) end) })
|
|
||||||
-- Create a taglist widget
|
|
||||||
mytaglist[s] = awful.widget.taglist.new(s, awful.widget.taglist.label.all, mytaglist.buttons)
|
|
||||||
-- Create a tasklist widget
|
|
||||||
mytasklist[s] = awful.widget.tasklist.new(function(c)
|
|
||||||
return awful.widget.tasklist.label.currenttags(c, s)
|
|
||||||
end, mytasklist.buttons)
|
|
||||||
--}}}
|
|
||||||
|
|
||||||
--{{{ Wibox
|
|
||||||
mywibox[s] = wibox({ position = "top", fg = beautiful.fg_normal, bg = beautiful.bg_normal })
|
|
||||||
-- Add widgets to the wibox - order matters
|
|
||||||
mywibox[s].widgets = {
|
|
||||||
mylayoutbox[s],
|
|
||||||
mytaglist[s],
|
|
||||||
mypromptbox[s],
|
|
||||||
mysystray,
|
|
||||||
datebox,
|
|
||||||
}
|
|
||||||
mywibox[s].screen = s
|
|
||||||
end
|
|
||||||
--}}}
|
|
||||||
|
|
||||||
--{{{ Functions
|
|
||||||
|
|
||||||
--{{{ Add a todo note
|
|
||||||
|
|
||||||
function addtodo (todo)
|
|
||||||
infobox.text = "| <b><u>todo:</u></b> " .. "<span color='#FF00FF'>" .. awful.util.spawn("todo --add --priority high " .. "'" .. todo .. "'") .. "</span>"
|
|
||||||
end
|
|
||||||
--}}}
|
|
||||||
|
|
||||||
--{{{ Show todos
|
|
||||||
function show_todo()
|
|
||||||
local todo = awful.util.pread("todo --mono")
|
|
||||||
todo = naughty.notify({
|
|
||||||
text = string.format(os.date("%a, %d %B %Y") .. "\n" .. todo),
|
|
||||||
timeout = 6,
|
|
||||||
width = 300,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
--}}}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--}}}
|
|
||||||
|
|
||||||
--{{{ Keybindings
|
|
||||||
-- {{{ Mouse bindings
|
|
||||||
root.buttons(awful.util.table.join(
|
|
||||||
awful.button({ }, 4, awful.tag.viewnext),
|
|
||||||
awful.button({ }, 5, awful.tag.viewprev)
|
|
||||||
))
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Key bindings
|
|
||||||
globalkeys = awful.util.table.join(
|
|
||||||
-- Bindings for shifty
|
|
||||||
awful.key({ modkey, }, "comma", awful.tag.viewprev ),
|
|
||||||
awful.key({ modkey, "Shift" }, "comma", shifty.shift_prev ),
|
|
||||||
awful.key({ modkey, "Shift" }, "period", shifty.shift_next ),
|
|
||||||
awful.key({ modkey, }, "period", awful.tag.viewnext ),
|
|
||||||
awful.key({ modkey, }, "Escape", awful.tag.history.restore),
|
|
||||||
awful.key({ modkey }, "t", function() shifty.add({ rel_index = 1 }) end),
|
|
||||||
awful.key({ modkey, "Control" }, "t", function() shifty.add({ rel_index = 1, nopopup = true }) end),
|
|
||||||
awful.key({ modkey }, "r", shifty.rename),
|
|
||||||
awful.key({ modkey }, "w", shifty.delete),
|
|
||||||
awful.key({ modkey, "Shift" }, "o", function() shifty.set(awful.tag.selected(mouse.screen), { screen = awful.util.cycle(screen.count() , mouse.screen + 1) }) end),
|
|
||||||
awful.key({ modkey, }, "y", function() list = naughty.notify({
|
|
||||||
text = get_albumart(),
|
|
||||||
width = 400 }) end),
|
|
||||||
awful.key({ modkey, }, "j",
|
|
||||||
function ()
|
|
||||||
awful.client.focus.byidx( 1)
|
|
||||||
if client.focus then client.focus:raise() end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, }, "k",
|
|
||||||
function ()
|
|
||||||
awful.client.focus.byidx(-1)
|
|
||||||
if client.focus then client.focus:raise() end
|
|
||||||
end),
|
|
||||||
|
|
||||||
-- Layout manipulation
|
|
||||||
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "j", function () awful.screen.focus( 1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "k", function () awful.screen.focus(-1) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "u", awful.client.urgent.jumpto),
|
|
||||||
awful.key({ modkey, }, "Tab",
|
|
||||||
function ()
|
|
||||||
awful.client.focus.byidx( 1)
|
|
||||||
if client.focus then client.focus:raise() end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, "Shift" }, "Tab",
|
|
||||||
function ()
|
|
||||||
awful.client.focus.byidx(-1)
|
|
||||||
if client.focus then client.focus:raise() end
|
|
||||||
end),
|
|
||||||
|
|
||||||
|
|
||||||
-- Standard program
|
|
||||||
awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "Return", function () awful.util.spawn(editor) end),
|
|
||||||
awful.key({ modkey, "Control" }, "r", awesome.restart),
|
|
||||||
awful.key({ modkey, "Shift" }, "q", awesome.quit),
|
|
||||||
|
|
||||||
-- display playlist
|
|
||||||
awful.key({ modkey, }, "p", function() list = naughty.notify({
|
|
||||||
text = get_playlist(),
|
|
||||||
width = 400 }) end),
|
|
||||||
|
|
||||||
-- Display the todo list
|
|
||||||
awful.key({ modkey, }, "d", function () show_todo() end),
|
|
||||||
|
|
||||||
-- Paste content of the xbuffer
|
|
||||||
awful.key({ modkey, "Control" }, "p", function ()
|
|
||||||
awful.prompt.run({ prompt = "<b>Paste to:</b> "},
|
|
||||||
mypromptbox[mouse.screen],
|
|
||||||
function (s) paste(s) end,
|
|
||||||
awful.completion.shell) end),
|
|
||||||
-- Lock the screen
|
|
||||||
|
|
||||||
awful.key({ modkey }, "t", function() shifty.add({ rel_index = 1 }) end),
|
|
||||||
awful.key({ modkey, "Control" }, "t", function() shifty.add({ rel_index = 1, nopopup = true }) end),
|
|
||||||
awful.key({ modkey }, "r", shifty.rename),
|
|
||||||
awful.key({ modkey }, "w", shifty.del),
|
|
||||||
awful.key({ modkey, "Control" }, "o", function () shifty.set(awful.tag.selected(mouse.screen), { screen = awful.util.cycle(mouse.screen + 1, screen.count()) }) end),
|
|
||||||
awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end),
|
|
||||||
awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end),
|
|
||||||
awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end),
|
|
||||||
|
|
||||||
-- Prompt
|
|
||||||
-- add a todo
|
|
||||||
awful.key({ modkey, "Shift" }, "d",
|
|
||||||
function ()
|
|
||||||
awful.prompt.run({ prompt = " Add Todo Note: " },
|
|
||||||
mypromptbox[mouse.screen],
|
|
||||||
addtodo(t), t,
|
|
||||||
awful.util.getdir("cache") .. "/todos")
|
|
||||||
end),
|
|
||||||
awful.key({ modkey }, "F2",
|
|
||||||
function ()
|
|
||||||
awful.prompt.run({ fg_cursor = 'orange', bg_cursor = beautiful.bg_normal,
|
|
||||||
ul_cursor = "single", prompt = " Run: " },
|
|
||||||
mypromptbox[mouse.screen],
|
|
||||||
awful.util.spawn, awful.completion.shell,
|
|
||||||
awful.util.getdir("cache") .. "/history")
|
|
||||||
end),
|
|
||||||
awful.key({ modkey }, "F4",
|
|
||||||
function ()
|
|
||||||
awful.prompt.run({ prompt = " Run Lua code: " },
|
|
||||||
mypromptbox[mouse.screen],
|
|
||||||
awful.util.eval, nil,
|
|
||||||
awful.util.getdir("cache") .. "/history_eval")
|
|
||||||
end)
|
|
||||||
)
|
|
||||||
|
|
||||||
-- Client awful tagging: this is useful to tag some clients and then do stuff like move to tag on them
|
|
||||||
clientkeys = awful.util.table.join(
|
|
||||||
awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end),
|
|
||||||
awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end),
|
|
||||||
awful.key({ modkey, }, "semicolon", function (c) c:kill() end),
|
|
||||||
awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ),
|
|
||||||
awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
|
|
||||||
awful.key({ modkey, }, "o", awful.client.movetoscreen ),
|
|
||||||
awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end),
|
|
||||||
awful.key({ modkey }, "t", awful.client.togglemarked),
|
|
||||||
awful.key({ modkey,}, "m",
|
|
||||||
function (c)
|
|
||||||
c.maximized_horizontal = not c.maximized_horizontal
|
|
||||||
c.maximized_vertical = not c.maximized_vertical
|
|
||||||
end)
|
|
||||||
)
|
|
||||||
|
|
||||||
for i=1,9 do
|
|
||||||
|
|
||||||
globalkeys = awful.util.table.join(globalkeys, awful.key({ modkey }, i,
|
|
||||||
function ()
|
|
||||||
local t = awful.tag.viewonly(shifty.getpos(i))
|
|
||||||
end))
|
|
||||||
globalkeys = awful.util.table.join(globalkeys, awful.key({ modkey, "Control" }, i,
|
|
||||||
function ()
|
|
||||||
local t = shifty.getpos(i)
|
|
||||||
t.selected = not t.selected
|
|
||||||
end))
|
|
||||||
globalkeys = awful.util.table.join(globalkeys, awful.key({ modkey, "Control", "Shift" }, i,
|
|
||||||
function ()
|
|
||||||
if client.focus then
|
|
||||||
awful.client.toggletag(shifty.getpos(i))
|
|
||||||
end
|
|
||||||
end))
|
|
||||||
-- move clients to other tags
|
|
||||||
globalkeys = awful.util.table.join(globalkeys, awful.key({ modkey, "Shift" }, i,
|
|
||||||
function ()
|
|
||||||
if client.focus then
|
|
||||||
local t = shifty.getpos(i)
|
|
||||||
awful.client.movetotag(t)
|
|
||||||
awful.tag.viewonly(t)
|
|
||||||
end
|
|
||||||
end))
|
|
||||||
end
|
|
||||||
-- Set keys
|
|
||||||
root.keys(globalkeys)
|
|
||||||
shifty.config.globalkeys = globalkeys
|
|
||||||
shifty.config.clientkeys = clientkeys
|
|
||||||
--}}}
|
|
||||||
--}}}
|
|
||||||
|
|
||||||
-- {{{ Hooks
|
|
||||||
-- Hook function to execute when focusing a client.
|
|
||||||
awful.hooks.focus.register(function (c)
|
|
||||||
if not awful.client.ismarked(c) then
|
|
||||||
c.border_color = beautiful.border_focus
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook function to execute when unfocusing a client.
|
|
||||||
awful.hooks.unfocus.register(function (c)
|
|
||||||
if not awful.client.ismarked(c) then
|
|
||||||
c.border_color = beautiful.border_normal
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook function to execute when marking a client
|
|
||||||
awful.hooks.marked.register(function (c)
|
|
||||||
c.border_color = beautiful.border_marked
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook function to execute when unmarking a client.
|
|
||||||
awful.hooks.unmarked.register(function (c)
|
|
||||||
c.border_color = beautiful.border_focus
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook function to execute when the mouse enters a client.
|
|
||||||
awful.hooks.mouse_enter.register(function (c)
|
|
||||||
-- Sloppy focus, but disabled for magnifier layout
|
|
||||||
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
|
|
||||||
and awful.client.focus.filter(c) then
|
|
||||||
client.focus = c
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook function to execute when arranging the screen.
|
|
||||||
-- (tag switch, new client, etc)
|
|
||||||
awful.hooks.arrange.register(function (screen)
|
|
||||||
local layout = awful.layout.getname(awful.layout.get(screen))
|
|
||||||
if layout and beautiful["layout_" ..layout] then
|
|
||||||
mylayoutbox[screen].image = image(beautiful["layout_" .. layout])
|
|
||||||
else
|
|
||||||
mylayoutbox[screen].image = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Give focus to the latest client in history if no window has focus
|
|
||||||
-- or if the current window is a desktop or a dock one.
|
|
||||||
if not client.focus then
|
|
||||||
local c = awful.client.focus.history.get(screen, 0)
|
|
||||||
if c then client.focus = c end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Hook called every 15 seconds, displays info
|
|
||||||
function hook_date ()
|
|
||||||
-- writes status to .status
|
|
||||||
os.execute("echo $(mpc | grep -) $(gmail.py) $(acpi -b | sed -e 's/%.*/%/;s/.*, //') $(date +'%a %d %b') $(date +'%I:%M') > ~/.status")
|
|
||||||
-- read .status
|
|
||||||
io.input("/home/jack/.status")
|
|
||||||
datebox.text = io.read("*line")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Set timers for the hooks
|
|
||||||
awful.hooks.timer.register(15, hook_date)
|
|
||||||
|
|
||||||
-- run the hook so we don't have to wait
|
|
||||||
hook_date()
|
|
||||||
|
|
||||||
--}}}
|
|
||||||
|
|
||||||
-- startup commands
|
|
||||||
os.execute("xmodmap ~/.xmodmap &")
|
|
||||||
os.execute("xbindkeys &")
|
|
||||||
os.execute("nitrogen --restore &")
|
|
||||||
os.execute("xsetroot -cursor_name left_ptr &")
|
|
||||||
|
|
||||||
-- vim: foldmethod=marker:filetype=lua:expandtab:shiftwidth=2:tabstop=2:softtabstop=2:encoding=utf-8:textwidth=80
|
|
53
helpers.lua
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
--- Spawns cmd if no client can be found matching properties
|
||||||
|
-- If such a client can be found, pop to first tag where it is visible, and give it focus
|
||||||
|
-- @param cmd the command to execute
|
||||||
|
-- @param properties a table of properties to match against clients. Possible entries: any properties of the client object
|
||||||
|
|
||||||
|
function runraise(cmd, properties)
|
||||||
|
local clients = client.get()
|
||||||
|
local focused = awful.client.next(0)
|
||||||
|
local findex = 0
|
||||||
|
local matched_clients = {}
|
||||||
|
local n = 0
|
||||||
|
for i, c in pairs(clients) do
|
||||||
|
--make an array of matched clients
|
||||||
|
if awful.rules.match(properties, c) then
|
||||||
|
n = n + 1
|
||||||
|
matched_clients[n] = c
|
||||||
|
if c == focused then
|
||||||
|
findex = n
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if n > 0 then
|
||||||
|
local c = matched_clients[1]
|
||||||
|
-- if the focused window matched switch focus to next in list
|
||||||
|
if 0 < findex and findex < n then
|
||||||
|
c = matched_clients[findex+1]
|
||||||
|
end
|
||||||
|
local ctags = c:tags()
|
||||||
|
if table.getn(ctags) == 0 then
|
||||||
|
-- ctags is empty, show client on current tag
|
||||||
|
local curtag = awful.tag.selected()
|
||||||
|
awful.client.movetotag(curtag, c)
|
||||||
|
else
|
||||||
|
-- Otherwise, pop to first tag client is visible on
|
||||||
|
awful.tag.viewonly(ctags[1])
|
||||||
|
end
|
||||||
|
-- And then focus the client
|
||||||
|
client.focus = c
|
||||||
|
c:raise()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
awful.util.spawn(cmd)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Returns true if all pairs in table1 are present in table2
|
||||||
|
function match (table1, table2)
|
||||||
|
for k, v in pairs(table1) do
|
||||||
|
if table2[k] ~= v and not table2[k]:find(v) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
515
json.lua
|
@ -1,515 +0,0 @@
|
||||||
--[[
|
|
||||||
|
|
||||||
JSON Encoder and Parser for Lua 5.1
|
|
||||||
|
|
||||||
Copyright © 2007 Shaun Brown (http://www.chipmunkav.com).
|
|
||||||
All Rights Reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
|
||||||
obtaining a copy of this software to deal in the Software without
|
|
||||||
restriction, including without limitation the rights to use,
|
|
||||||
copy, modify, merge, publish, distribute, sublicense, and/or
|
|
||||||
sell copies of the Software, and to permit persons to whom the
|
|
||||||
Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
If you find this software useful please give www.chipmunkav.com a mention.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
|
||||||
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
|
||||||
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
|
|
||||||
-- Lua script:
|
|
||||||
local t = {
|
|
||||||
["name1"] = "value1",
|
|
||||||
["name2"] = {1, false, true, 23.54, "a \021 string"},
|
|
||||||
name3 = Json.Null()
|
|
||||||
}
|
|
||||||
|
|
||||||
local json = Json.Encode (t)
|
|
||||||
print (json)
|
|
||||||
--> {"name1":"value1","name3":null,"name2":[1,false,true,23.54,"a \u0015 string"]}
|
|
||||||
|
|
||||||
local t = Json.Decode(json)
|
|
||||||
print(t.name2[4])
|
|
||||||
--> 23.54
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
1) Encodable Lua types: string, number, boolean, table, nil
|
|
||||||
2) Use Json.Null() to insert a null value into a Json object
|
|
||||||
3) All control chars are encoded to \uXXXX format eg "\021" encodes to "\u0015"
|
|
||||||
4) All Json \uXXXX chars are decoded to chars (0-255 byte range only)
|
|
||||||
5) Json single line // and /* */ block comments are discarded during decoding
|
|
||||||
6) Numerically indexed Lua arrays are encoded to Json Lists eg [1,2,3]
|
|
||||||
7) Lua dictionary tables are converted to Json objects eg {"one":1,"two":2}
|
|
||||||
8) Json nulls are decoded to Lua nil and treated by Lua in the normal way
|
|
||||||
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local string = string
|
|
||||||
local math = math
|
|
||||||
local table = table
|
|
||||||
local error = error
|
|
||||||
local tonumber = tonumber
|
|
||||||
local tostring = tostring
|
|
||||||
local type = type
|
|
||||||
local setmetatable = setmetatable
|
|
||||||
local pairs = pairs
|
|
||||||
local ipairs = ipairs
|
|
||||||
local assert = assert
|
|
||||||
local Chipmunk = Chipmunk
|
|
||||||
|
|
||||||
module("Json")
|
|
||||||
|
|
||||||
local StringBuilder = {
|
|
||||||
buffer = {}
|
|
||||||
}
|
|
||||||
|
|
||||||
function StringBuilder:New()
|
|
||||||
local o = {}
|
|
||||||
setmetatable(o, self)
|
|
||||||
self.__index = self
|
|
||||||
o.buffer = {}
|
|
||||||
return o
|
|
||||||
end
|
|
||||||
|
|
||||||
function StringBuilder:Append(s)
|
|
||||||
self.buffer[#self.buffer+1] = s
|
|
||||||
end
|
|
||||||
|
|
||||||
function StringBuilder:ToString()
|
|
||||||
return table.concat(self.buffer)
|
|
||||||
end
|
|
||||||
|
|
||||||
local JsonWriter = {
|
|
||||||
backslashes = {
|
|
||||||
['\b'] = "\\b",
|
|
||||||
['\t'] = "\\t",
|
|
||||||
['\n'] = "\\n",
|
|
||||||
['\f'] = "\\f",
|
|
||||||
['\r'] = "\\r",
|
|
||||||
['"'] = "\\\"",
|
|
||||||
['\\'] = "\\\\",
|
|
||||||
['/'] = "\\/"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function JsonWriter:New()
|
|
||||||
local o = {}
|
|
||||||
o.writer = StringBuilder:New()
|
|
||||||
setmetatable(o, self)
|
|
||||||
self.__index = self
|
|
||||||
return o
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonWriter:Append(s)
|
|
||||||
self.writer:Append(s)
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonWriter:ToString()
|
|
||||||
return self.writer:ToString()
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonWriter:Write(o)
|
|
||||||
local t = type(o)
|
|
||||||
if t == "nil" then
|
|
||||||
self:WriteNil()
|
|
||||||
elseif t == "boolean" then
|
|
||||||
self:WriteString(o)
|
|
||||||
elseif t == "number" then
|
|
||||||
self:WriteString(o)
|
|
||||||
elseif t == "string" then
|
|
||||||
self:ParseString(o)
|
|
||||||
elseif t == "table" then
|
|
||||||
self:WriteTable(o)
|
|
||||||
elseif t == "function" then
|
|
||||||
self:WriteFunction(o)
|
|
||||||
elseif t == "thread" then
|
|
||||||
self:WriteError(o)
|
|
||||||
elseif t == "userdata" then
|
|
||||||
self:WriteError(o)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonWriter:WriteNil()
|
|
||||||
self:Append("null")
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonWriter:WriteString(o)
|
|
||||||
self:Append(tostring(o))
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonWriter:ParseString(s)
|
|
||||||
self:Append('"')
|
|
||||||
self:Append(string.gsub(s, "[%z%c\\\"/]", function(n)
|
|
||||||
local c = self.backslashes[n]
|
|
||||||
if c then return c end
|
|
||||||
return string.format("\\u%.4X", string.byte(n))
|
|
||||||
end))
|
|
||||||
self:Append('"')
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonWriter:IsArray(t)
|
|
||||||
local count = 0
|
|
||||||
local isindex = function(k)
|
|
||||||
if type(k) == "number" and k > 0 then
|
|
||||||
if math.floor(k) == k then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
for k,v in pairs(t) do
|
|
||||||
if not isindex(k) then
|
|
||||||
return false, '{', '}'
|
|
||||||
else
|
|
||||||
count = math.max(count, k)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return true, '[', ']', count
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonWriter:WriteTable(t)
|
|
||||||
local ba, st, et, n = self:IsArray(t)
|
|
||||||
self:Append(st)
|
|
||||||
if ba then
|
|
||||||
for i = 1, n do
|
|
||||||
self:Write(t[i])
|
|
||||||
if i < n then
|
|
||||||
self:Append(',')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
local first = true;
|
|
||||||
for k, v in pairs(t) do
|
|
||||||
if not first then
|
|
||||||
self:Append(',')
|
|
||||||
end
|
|
||||||
first = false;
|
|
||||||
self:ParseString(k)
|
|
||||||
self:Append(':')
|
|
||||||
self:Write(v)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
self:Append(et)
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonWriter:WriteError(o)
|
|
||||||
error(string.format(
|
|
||||||
"Encoding of %s unsupported",
|
|
||||||
tostring(o)))
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonWriter:WriteFunction(o)
|
|
||||||
if o == Null then
|
|
||||||
self:WriteNil()
|
|
||||||
else
|
|
||||||
self:WriteError(o)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local StringReader = {
|
|
||||||
s = "",
|
|
||||||
i = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
function StringReader:New(s)
|
|
||||||
local o = {}
|
|
||||||
setmetatable(o, self)
|
|
||||||
self.__index = self
|
|
||||||
o.s = s or o.s
|
|
||||||
return o
|
|
||||||
end
|
|
||||||
|
|
||||||
function StringReader:Peek()
|
|
||||||
local i = self.i + 1
|
|
||||||
if i <= #self.s then
|
|
||||||
return string.sub(self.s, i, i)
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
function StringReader:Next()
|
|
||||||
self.i = self.i+1
|
|
||||||
if self.i <= #self.s then
|
|
||||||
return string.sub(self.s, self.i, self.i)
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
function StringReader:All()
|
|
||||||
return self.s
|
|
||||||
end
|
|
||||||
|
|
||||||
local JsonReader = {
|
|
||||||
escapes = {
|
|
||||||
['t'] = '\t',
|
|
||||||
['n'] = '\n',
|
|
||||||
['f'] = '\f',
|
|
||||||
['r'] = '\r',
|
|
||||||
['b'] = '\b',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function JsonReader:New(s)
|
|
||||||
local o = {}
|
|
||||||
o.reader = StringReader:New(s)
|
|
||||||
setmetatable(o, self)
|
|
||||||
self.__index = self
|
|
||||||
return o;
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:Read()
|
|
||||||
self:SkipWhiteSpace()
|
|
||||||
local peek = self:Peek()
|
|
||||||
if peek == nil then
|
|
||||||
error(string.format(
|
|
||||||
"Nil string: '%s'",
|
|
||||||
self:All()))
|
|
||||||
elseif peek == '{' then
|
|
||||||
return self:ReadObject()
|
|
||||||
elseif peek == '[' then
|
|
||||||
return self:ReadArray()
|
|
||||||
elseif peek == '"' then
|
|
||||||
return self:ReadString()
|
|
||||||
elseif string.find(peek, "[%+%-%d]") then
|
|
||||||
return self:ReadNumber()
|
|
||||||
elseif peek == 't' then
|
|
||||||
return self:ReadTrue()
|
|
||||||
elseif peek == 'f' then
|
|
||||||
return self:ReadFalse()
|
|
||||||
elseif peek == 'n' then
|
|
||||||
return self:ReadNull()
|
|
||||||
elseif peek == '/' then
|
|
||||||
self:ReadComment()
|
|
||||||
return self:Read()
|
|
||||||
else
|
|
||||||
error(string.format(
|
|
||||||
"Invalid input: '%s'",
|
|
||||||
self:All()))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:ReadTrue()
|
|
||||||
self:TestReservedWord{'t','r','u','e'}
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:ReadFalse()
|
|
||||||
self:TestReservedWord{'f','a','l','s','e'}
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:ReadNull()
|
|
||||||
self:TestReservedWord{'n','u','l','l'}
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:TestReservedWord(t)
|
|
||||||
for i, v in ipairs(t) do
|
|
||||||
if self:Next() ~= v then
|
|
||||||
error(string.format(
|
|
||||||
"Error reading '%s': %s",
|
|
||||||
table.concat(t),
|
|
||||||
self:All()))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:ReadNumber()
|
|
||||||
local result = self:Next()
|
|
||||||
local peek = self:Peek()
|
|
||||||
while peek ~= nil and string.find(
|
|
||||||
peek,
|
|
||||||
"[%+%-%d%.eE]") do
|
|
||||||
result = result .. self:Next()
|
|
||||||
peek = self:Peek()
|
|
||||||
end
|
|
||||||
result = tonumber(result)
|
|
||||||
if result == nil then
|
|
||||||
error(string.format(
|
|
||||||
"Invalid number: '%s'",
|
|
||||||
result))
|
|
||||||
else
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:ReadString()
|
|
||||||
local result = ""
|
|
||||||
assert(self:Next() == '"')
|
|
||||||
while self:Peek() ~= '"' do
|
|
||||||
local ch = self:Next()
|
|
||||||
if ch == '\\' then
|
|
||||||
ch = self:Next()
|
|
||||||
if self.escapes[ch] then
|
|
||||||
ch = self.escapes[ch]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
result = result .. ch
|
|
||||||
end
|
|
||||||
assert(self:Next() == '"')
|
|
||||||
local fromunicode = function(m)
|
|
||||||
return string.char(tonumber(m, 16))
|
|
||||||
end
|
|
||||||
return string.gsub(
|
|
||||||
result,
|
|
||||||
"u%x%x(%x%x)",
|
|
||||||
fromunicode)
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:ReadComment()
|
|
||||||
assert(self:Next() == '/')
|
|
||||||
local second = self:Next()
|
|
||||||
if second == '/' then
|
|
||||||
self:ReadSingleLineComment()
|
|
||||||
elseif second == '*' then
|
|
||||||
self:ReadBlockComment()
|
|
||||||
else
|
|
||||||
error(string.format(
|
|
||||||
"Invalid comment: %s",
|
|
||||||
self:All()))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:ReadBlockComment()
|
|
||||||
local done = false
|
|
||||||
while not done do
|
|
||||||
local ch = self:Next()
|
|
||||||
if ch == '*' and self:Peek() == '/' then
|
|
||||||
done = true
|
|
||||||
end
|
|
||||||
if not done and
|
|
||||||
ch == '/' and
|
|
||||||
self:Peek() == "*" then
|
|
||||||
error(string.format(
|
|
||||||
"Invalid comment: %s, '/*' illegal.",
|
|
||||||
self:All()))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
self:Next()
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:ReadSingleLineComment()
|
|
||||||
local ch = self:Next()
|
|
||||||
while ch ~= '\r' and ch ~= '\n' do
|
|
||||||
ch = self:Next()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:ReadArray()
|
|
||||||
local result = {}
|
|
||||||
assert(self:Next() == '[')
|
|
||||||
local done = false
|
|
||||||
if self:Peek() == ']' then
|
|
||||||
done = true;
|
|
||||||
end
|
|
||||||
while not done do
|
|
||||||
local item = self:Read()
|
|
||||||
result[#result+1] = item
|
|
||||||
self:SkipWhiteSpace()
|
|
||||||
if self:Peek() == ']' then
|
|
||||||
done = true
|
|
||||||
end
|
|
||||||
if not done then
|
|
||||||
local ch = self:Next()
|
|
||||||
if ch ~= ',' then
|
|
||||||
error(string.format(
|
|
||||||
"Invalid array: '%s' due to: '%s'",
|
|
||||||
self:All(), ch))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
assert(']' == self:Next())
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:ReadObject()
|
|
||||||
local result = {}
|
|
||||||
assert(self:Next() == '{')
|
|
||||||
local done = false
|
|
||||||
if self:Peek() == '}' then
|
|
||||||
done = true
|
|
||||||
end
|
|
||||||
while not done do
|
|
||||||
local key = self:Read()
|
|
||||||
if type(key) ~= "string" then
|
|
||||||
error(string.format(
|
|
||||||
"Invalid non-string object key: %s",
|
|
||||||
key))
|
|
||||||
end
|
|
||||||
self:SkipWhiteSpace()
|
|
||||||
local ch = self:Next()
|
|
||||||
if ch ~= ':' then
|
|
||||||
error(string.format(
|
|
||||||
"Invalid object: '%s' due to: '%s'",
|
|
||||||
self:All(),
|
|
||||||
ch))
|
|
||||||
end
|
|
||||||
self:SkipWhiteSpace()
|
|
||||||
local val = self:Read()
|
|
||||||
result[key] = val
|
|
||||||
self:SkipWhiteSpace()
|
|
||||||
if self:Peek() == '}' then
|
|
||||||
done = true
|
|
||||||
end
|
|
||||||
if not done then
|
|
||||||
ch = self:Next()
|
|
||||||
if ch ~= ',' then
|
|
||||||
error(string.format(
|
|
||||||
"Invalid array: '%s' near: '%s'",
|
|
||||||
self:All(),
|
|
||||||
ch))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
assert(self:Next() == "}")
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:SkipWhiteSpace()
|
|
||||||
local p = self:Peek()
|
|
||||||
while p ~= nil and string.find(p, "[%s/]") do
|
|
||||||
if p == '/' then
|
|
||||||
self:ReadComment()
|
|
||||||
else
|
|
||||||
self:Next()
|
|
||||||
end
|
|
||||||
p = self:Peek()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:Peek()
|
|
||||||
return self.reader:Peek()
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:Next()
|
|
||||||
return self.reader:Next()
|
|
||||||
end
|
|
||||||
|
|
||||||
function JsonReader:All()
|
|
||||||
return self.reader:All()
|
|
||||||
end
|
|
||||||
|
|
||||||
function Encode(o)
|
|
||||||
local writer = JsonWriter:New()
|
|
||||||
writer:Write(o)
|
|
||||||
return writer:ToString()
|
|
||||||
end
|
|
||||||
|
|
||||||
function Decode(s)
|
|
||||||
local reader = JsonReader:New(s)
|
|
||||||
return reader:Read()
|
|
||||||
end
|
|
||||||
|
|
||||||
function Null()
|
|
||||||
return Null
|
|
||||||
end
|
|
||||||
|
|
48
keymaps/actions.lua
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
-- Client manipulation
|
||||||
|
modkey = "Mod4"
|
||||||
|
|
||||||
|
keybinding({ "Mod1" }, "Tab", function () awful.client.focus.byidx(1); if client.focus then client.focus:raise() end end):add()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--From Here default config
|
||||||
|
|
||||||
|
keybinding({ modkey, "Shift" }, "f", function () if client.focus then client.focus.fullscreen = not client.focus.fullscreen end end):add()
|
||||||
|
keybinding({ modkey, "Shift" }, "c", function () if client.focus then client.focus:kill() end end):add()
|
||||||
|
keybinding({ modkey }, "j", function () awful.client.focus.byidx(1); if client.focus then client.focus:raise() end end):add()
|
||||||
|
keybinding({ modkey }, "k", function () awful.client.focus.byidx(-1); if client.focus then client.focus:raise() end end):add()
|
||||||
|
keybinding({ modkey, "Shift" }, "j", function () awful.client.swap.byidx(1) end):add()
|
||||||
|
keybinding({ modkey, "Shift" }, "k", function () awful.client.swap.byidx(-1) end):add()
|
||||||
|
keybinding({ modkey, "Control" }, "j", function () awful.screen.focus(1) end):add()
|
||||||
|
keybinding({ modkey, "Control" }, "k", function () awful.screen.focus(-1) end):add()
|
||||||
|
keybinding({ modkey, "Control" }, "space", awful.client.togglefloating):add()
|
||||||
|
keybinding({ modkey, "Control" }, "Return", function () if client.focus then client.focus:swap(awful.client.getmaster()) end end):add()
|
||||||
|
keybinding({ modkey }, "o", awful.client.movetoscreen):add()
|
||||||
|
keybinding({ modkey }, "Tab", awful.client.focus.history.previous):add()
|
||||||
|
keybinding({ modkey }, "u", awful.client.urgent.jumpto):add()
|
||||||
|
keybinding({ modkey, "Shift" }, "r", function () if client.focus then client.focus:redraw() end end):add()
|
||||||
|
|
||||||
|
-- Layout manipulation
|
||||||
|
keybinding({ modkey }, "l", function () awful.tag.incmwfact(0.05) end):add()
|
||||||
|
keybinding({ modkey }, "h", function () awful.tag.incmwfact(-0.05) end):add()
|
||||||
|
keybinding({ modkey, "Shift" }, "h", function () awful.tag.incnmaster(1) end):add()
|
||||||
|
keybinding({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end):add()
|
||||||
|
keybinding({ modkey, "Control" }, "h", function () awful.tag.incncol(1) end):add()
|
||||||
|
keybinding({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end):add()
|
||||||
|
keybinding({ modkey }, "space", function () awful.layout.inc(layouts, 1) end):add()
|
||||||
|
keybinding({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end):add()
|
||||||
|
|
||||||
|
-- Client awful tagging: this is useful to tag some clients and then do stuff like move to tag on them
|
||||||
|
keybinding({ modkey }, "t", awful.client.togglemarked):add()
|
||||||
|
|
||||||
|
for i = 1, keynumber do
|
||||||
|
keybinding({ modkey, "Shift" }, "F" .. i,
|
||||||
|
function ()
|
||||||
|
local screen = mouse.screen
|
||||||
|
if tags[screen][i] then
|
||||||
|
for k, c in pairs(awful.client.getmarked()) do
|
||||||
|
awful.client.movetotag(tags[screen][i], c)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end):add()
|
||||||
|
end
|
73
keymaps/spawn.lua
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
|
||||||
|
|
||||||
|
keybinding({ modkey }, "Return", function () awful.util.spawn(terminal) end):add()
|
||||||
|
keybinding({ modkey }, "f", function () awful.util.spawn("firefox") end):add()
|
||||||
|
keybinding({ }, "XF86AudioLowerVolume", function () awful.util.spawn("voldown 3") end):add()
|
||||||
|
keybinding({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("volup 3") end):add()
|
||||||
|
keybinding({ "Shift" }, "XF86AudioLowerVolume", function () awful.util.spawn("voldown 10") end):add()
|
||||||
|
keybinding({ "Shift" }, "XF86AudioRaiseVolume", function () awful.util.spawn("volup 10") end):add()
|
||||||
|
keybinding({ modkey }, "XF86Mail", function () awful.util.spawn("xset dpms force off") end):add()
|
||||||
|
keybinding({ modkey }, "XF86WWW", function () awful.util.spawn(terminal .. " -e apselect") end):add()
|
||||||
|
|
||||||
|
|
||||||
|
keybinding({ }, "XF86AudioPlay", function () awful.util.spawn("mpc toggle") end):add()
|
||||||
|
keybinding({ }, "XF86AudioNext", function () awful.util.spawn("mpc next") end):add()
|
||||||
|
keybinding({ }, "XF86AudioPrev", function () awful.util.spawn("mpc prev") end):add()
|
||||||
|
keybinding({ }, "XF86AudioStop", function () awful.util.spawn("mpc stop") end):add()
|
||||||
|
keybinding({ modkey }, "XF86AudioStop", function () awful.util.spawn("mpc clear") end):add()
|
||||||
|
keybinding({ modkey }, "XF86AudioPlay", function ()
|
||||||
|
awful.prompt.run({ prompt = "Play Band: " },
|
||||||
|
mypromptbox[mouse.screen], playband,
|
||||||
|
awful.completion.bash,
|
||||||
|
awful.util.getdir("cache") .. "/history")
|
||||||
|
end):add()
|
||||||
|
|
||||||
|
function playband(b)
|
||||||
|
return awful.util.spawn("playband " .. b)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
keybinding({ modkey }, "Return", function () awful.util.spawn(terminal) end):add()
|
||||||
|
|
||||||
|
keybinding({ modkey }, "F1", function ()
|
||||||
|
awful.prompt.run({ prompt = "Run: " },
|
||||||
|
mypromptbox[mouse.screen], awful.util.spawn,
|
||||||
|
awful.completion.bash,
|
||||||
|
awful.util.getdir("cache") .. "/history")
|
||||||
|
end):add()
|
||||||
|
|
||||||
|
keybinding({ modkey }, "F4", function ()
|
||||||
|
awful.prompt.run({ prompt = "Run Lua code: " },
|
||||||
|
mypromptbox[mouse.screen],
|
||||||
|
awful.util.eval,
|
||||||
|
awful.prompt.bash,
|
||||||
|
awful.util.getdir("cache") .. "/history_eval")
|
||||||
|
end):add()
|
||||||
|
|
||||||
|
keybinding({ modkey, "Ctrl" }, "i", function ()
|
||||||
|
local s = mouse.screen
|
||||||
|
if mypromptbox[s].text then
|
||||||
|
mypromptbox[s].text = nil
|
||||||
|
elseif client.focus then
|
||||||
|
mypromptbox[s].text = nil
|
||||||
|
if client.focus.class then
|
||||||
|
mypromptbox[s].text = "Class: " .. client.focus.class .. " "
|
||||||
|
end
|
||||||
|
if client.focus.instance then
|
||||||
|
mypromptbox[s].text = mypromptbox[s].text .. "Instance: "
|
||||||
|
.. client.focus.instance .. " "
|
||||||
|
end
|
||||||
|
if client.focus.role then
|
||||||
|
mypromptbox[s].text = mypromptbox[s].text .. "Role: "
|
||||||
|
.. client.focus.role
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end):add()
|
||||||
|
|
||||||
|
|
||||||
|
keybinding({}, "F12", function ()
|
||||||
|
|
||||||
|
tags[1][10].selected = not tags[1][10].selected;
|
||||||
|
|
||||||
|
end):add()
|
||||||
|
|
49
keymaps/wmbase.lua
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
|
||||||
|
-- Bind keyboard digits
|
||||||
|
-- Compute the maximum number of digit we need, limited to 9
|
||||||
|
keynumber = 0
|
||||||
|
for s = 1, screen.count() do
|
||||||
|
keynumber = math.min(9, math.max(#tags[s], keynumber));
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 1, keynumber do
|
||||||
|
keybinding({ modkey }, i,
|
||||||
|
function ()
|
||||||
|
local screen = mouse.screen
|
||||||
|
if tags[screen][i] then
|
||||||
|
awful.tag.viewonly(tags[screen][i])
|
||||||
|
end
|
||||||
|
end):add()
|
||||||
|
keybinding({ modkey, "Control" }, i,
|
||||||
|
function ()
|
||||||
|
local screen = mouse.screen
|
||||||
|
if tags[screen][i] then
|
||||||
|
tags[screen][i].selected = not tags[screen][i].selected
|
||||||
|
end
|
||||||
|
end):add()
|
||||||
|
keybinding({ modkey, "Shift" }, i,
|
||||||
|
function ()
|
||||||
|
if client.focus then
|
||||||
|
if tags[client.focus.screen][i] then
|
||||||
|
awful.client.movetotag(tags[client.focus.screen][i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end):add()
|
||||||
|
keybinding({ modkey, "Control", "Shift" }, i,
|
||||||
|
function ()
|
||||||
|
if client.focus then
|
||||||
|
if tags[client.focus.screen][i] then
|
||||||
|
awful.client.toggletag(tags[client.focus.screen][i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end):add()
|
||||||
|
end
|
||||||
|
|
||||||
|
keybinding({ modkey }, "Left", awful.tag.viewprev):add()
|
||||||
|
keybinding({ modkey }, "Right", awful.tag.viewnext):add()
|
||||||
|
keybinding({ modkey }, "Escape", awful.tag.history.restore):add()
|
||||||
|
|
||||||
|
keybinding({ modkey, "Control" }, "r", function ()
|
||||||
|
mypromptbox[mouse.screen].text = awful.util.escape(awful.util.restart())
|
||||||
|
end):add()
|
||||||
|
keybinding({ modkey, "Shift" }, "q", awesome.quit):add()
|
371
rc.lua
|
@ -1,380 +1,39 @@
|
||||||
|
terminal = "urxvtc -e screen"
|
||||||
|
editor_cmd = "urxvt -e vim"
|
||||||
|
modkey = "Mod4"
|
||||||
|
hyper = "Mod3"
|
||||||
|
|
||||||
-- Standard awesome library
|
-- Standard awesome library
|
||||||
require("awful")
|
require("awful")
|
||||||
require("awful.autofocus")
|
require("awful.autofocus")
|
||||||
require("awful.rules")
|
require("awful.rules")
|
||||||
-- Theme handling library
|
|
||||||
require("beautiful")
|
require("beautiful")
|
||||||
-- Notification library
|
|
||||||
require("naughty")
|
require("naughty")
|
||||||
require("teardrop")
|
require("teardrop")
|
||||||
require("mpdprompt")
|
|
||||||
require("obvious.battery")
|
|
||||||
require("obvious.popup_run_prompt")
|
require("obvious.popup_run_prompt")
|
||||||
require("vicious")
|
require("vicious")
|
||||||
|
require("aweswt")
|
||||||
|
|
||||||
-- {{{ Variable definitions
|
|
||||||
-- Themes define colours, icons, and wallpapers
|
-- Themes define colours, icons, and wallpapers
|
||||||
beautiful.init("/home/crater2150/.config/awesome/zenburn/theme.lua")
|
beautiful.init("/home/crater2150/.config/awesome/zenburn/theme.lua")
|
||||||
|
|
||||||
-- This is used later as the default terminal and editor to run.
|
|
||||||
terminal = "sakura -e screen"
|
|
||||||
editor_cmd = "sakura -e vim"
|
|
||||||
|
|
||||||
-- Default modkey.
|
|
||||||
-- Usually, Mod4 is the key with a logo between Control and Alt.
|
|
||||||
-- If you do not like this or do not have such a key,
|
|
||||||
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
|
|
||||||
-- However, you can use another modifier like Mod1, but it may interact with others.
|
|
||||||
modkey = "Mod4"
|
|
||||||
|
|
||||||
-- Table of layouts to cover with awful.layout.inc, order matters.
|
-- Table of layouts to cover with awful.layout.inc, order matters.
|
||||||
layouts =
|
layouts =
|
||||||
{
|
{
|
||||||
awful.layout.suit.tile,
|
|
||||||
awful.layout.suit.tile.left,
|
|
||||||
awful.layout.suit.tile.bottom,
|
|
||||||
awful.layout.suit.tile.top,
|
|
||||||
awful.layout.suit.fair,
|
awful.layout.suit.fair,
|
||||||
awful.layout.suit.fair.horizontal,
|
awful.layout.suit.fair.horizontal,
|
||||||
|
awful.layout.suit.tile,
|
||||||
|
awful.layout.suit.tile.bottom,
|
||||||
awful.layout.suit.max,
|
awful.layout.suit.max,
|
||||||
awful.layout.suit.max.fullscreen,
|
awful.layout.suit.max.fullscreen,
|
||||||
awful.layout.suit.floating
|
awful.layout.suit.floating
|
||||||
}
|
}
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Tags
|
MY_PATH = os.getenv("HOME") .. "/.config/awesome/"
|
||||||
local tags = {}
|
dofile (MY_PATH .. "helpers.lua")
|
||||||
tags.setup = {
|
dofile (MY_PATH .. "tags.lua")
|
||||||
{ name = "1:⚙", layout = layouts[1] },
|
dofile (MY_PATH .. "wibox.lua")
|
||||||
{ name = "2:⌘", layout = layouts[7] },
|
dofile (MY_PATH .. "bindings.lua")
|
||||||
{ name = "3:☻", layout = layouts[2], mwfact = 0.20 },
|
dofile (MY_PATH .. "rules.lua")
|
||||||
{ name = "4:✉", layout = layouts[7] },
|
dofile (MY_PATH .. "signals.lua")
|
||||||
{ name = "5:☑", layout = layouts[7] },
|
|
||||||
{ name = "6:♫", layout = layouts[1] },
|
|
||||||
{ name = "7:☣", layout = layouts[1] },
|
|
||||||
{ name = "8:☕", layout = layouts[1] },
|
|
||||||
{ name = "9:⚂", layout = layouts[1] }
|
|
||||||
}
|
|
||||||
|
|
||||||
for s = 1, screen.count() do
|
|
||||||
tags[s] = {}
|
|
||||||
for i, t in ipairs(tags.setup) do
|
|
||||||
tags[s][i] = tag({ name = t.name })
|
|
||||||
tags[s][i].screen = s
|
|
||||||
awful.tag.setproperty(tags[s][i], "layout", t.layout)
|
|
||||||
awful.tag.setproperty(tags[s][i], "mwfact", t.mwfact)
|
|
||||||
awful.tag.setproperty(tags[s][i], "hide", t.hide)
|
|
||||||
end
|
|
||||||
tags[s][1].selected = true
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Reusable separators
|
|
||||||
spacer = widget({ type = "textbox", name = "spacer" })
|
|
||||||
spacer.text = " "
|
|
||||||
|
|
||||||
separator = widget({ type = "textbox", name = "separator", align = "center" })
|
|
||||||
separator.text = " )( "
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Wibox
|
|
||||||
|
|
||||||
--popup run
|
|
||||||
|
|
||||||
-- Create a textclock widget
|
|
||||||
--clock = awful.widget.textclock({ align = "right" })
|
|
||||||
mysystray = widget({ type = "systray" })
|
|
||||||
|
|
||||||
clock = widget({ type = "textbox" })
|
|
||||||
vicious.register(clock, vicious.widgets.date, "%b %d, %R", 60)
|
|
||||||
|
|
||||||
memwidget = widget({ type = "textbox" })
|
|
||||||
vicious.register(memwidget, vicious.widgets.mem, "⌸ $1% ($2MB / $3MB) ", 13)
|
|
||||||
|
|
||||||
--batwidget = obvious.battery();
|
|
||||||
batwidget = widget({ type = "textbox" })
|
|
||||||
vicious.register(batwidget, vicious.widgets.batat, "⌁ $1$2% - $3", 61)
|
|
||||||
|
|
||||||
cpuwidget = awful.widget.progressbar()
|
|
||||||
cpulabel = widget({ type = "textbox" })
|
|
||||||
cpuwidget:set_width(50)
|
|
||||||
cpuwidget:set_background_color("#494B4F")
|
|
||||||
cpuwidget:set_color("#FF5656")
|
|
||||||
cpuwidget:set_gradient_colors({ "#FF5656", "#88A175", "#AECF96" })
|
|
||||||
vicious.register(cpuwidget, vicious.widgets.cpu, "$1",41)
|
|
||||||
vicious.register(cpulabel, vicious.widgets.cpu, "CPU: $1%")
|
|
||||||
|
|
||||||
|
|
||||||
wlanwidget = widget({ type = "textbox" })
|
|
||||||
vicious.register(wlanwidget, vicious.widgets.wifi, "WLAN ${ssid} @ ${sign}, Q:${link}/70", 31, "wlan0")
|
|
||||||
-- Create a wibox for each screen and add it
|
|
||||||
leftwibox = {}
|
|
||||||
rightwibox = {}
|
|
||||||
mylayoutbox = {}
|
|
||||||
mytaglist = {}
|
|
||||||
mytaglist.buttons = awful.util.table.join(
|
|
||||||
awful.button({ }, 1, awful.tag.viewonly),
|
|
||||||
awful.button({ modkey }, 1, awful.client.movetotag),
|
|
||||||
awful.button({ }, 3, awful.tag.viewtoggle),
|
|
||||||
awful.button({ modkey }, 3, awful.client.toggletag),
|
|
||||||
awful.button({ }, 4, awful.tag.viewnext),
|
|
||||||
awful.button({ }, 5, awful.tag.viewprev)
|
|
||||||
)
|
|
||||||
|
|
||||||
for s = 1, screen.count() do
|
|
||||||
-- Create an imagebox widget which will contains an icon indicating which layout we're using.
|
|
||||||
-- We need one layoutbox per screen.
|
|
||||||
mylayoutbox[s] = awful.widget.layoutbox(s)
|
|
||||||
mylayoutbox[s]:buttons(awful.util.table.join(
|
|
||||||
awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
|
|
||||||
awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
|
|
||||||
awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
|
|
||||||
awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
|
|
||||||
-- Create a taglist widget
|
|
||||||
mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons)
|
|
||||||
|
|
||||||
|
|
||||||
-- Create the wibox
|
|
||||||
leftwibox[s] = awful.wibox({ position = "left", screen = s })
|
|
||||||
rightwibox[s] = awful.wibox({ position = "right", screen = s })
|
|
||||||
-- Add widgets to the wibox - order matters
|
|
||||||
leftwibox[s].widgets = {
|
|
||||||
mytaglist[s],
|
|
||||||
mylayoutbox[s],
|
|
||||||
clock,
|
|
||||||
separator, spacer, batwidget,
|
|
||||||
spacer,
|
|
||||||
layout = awful.widget.layout.horizontal.rightleft
|
|
||||||
}
|
|
||||||
rightwibox[s].widgets = {
|
|
||||||
{
|
|
||||||
memwidget,
|
|
||||||
separator, spacer, batwidget,
|
|
||||||
separator, spacer, wlanwidget,
|
|
||||||
separator, spacer, cpulabel, cpuwidget,
|
|
||||||
spacer,
|
|
||||||
layout = awful.widget.layout.horizontal.leftright
|
|
||||||
},
|
|
||||||
separator, spacer, s == 1 and mysystray or nil,
|
|
||||||
layout = awful.widget.layout.horizontal.leftright
|
|
||||||
}
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Mouse bindings
|
|
||||||
root.buttons(awful.util.table.join(
|
|
||||||
awful.button({ }, 3, function () mymainmenu:toggle() end),
|
|
||||||
awful.button({ }, 4, awful.tag.viewnext),
|
|
||||||
awful.button({ }, 5, awful.tag.viewprev)
|
|
||||||
))
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Key bindings
|
|
||||||
globalkeys = awful.util.table.join(
|
|
||||||
--{{{
|
|
||||||
awful.key({ modkey, }, "Left", awful.tag.viewprev ),
|
|
||||||
awful.key({ modkey, }, "Right", awful.tag.viewnext ),
|
|
||||||
awful.key({ modkey, }, "Escape", awful.tag.history.restore),
|
|
||||||
awful.key({ }, "XF86Word", awful.tag.viewprev ),
|
|
||||||
awful.key({ }, "XF86WebCam", awful.tag.viewnext ),
|
|
||||||
awful.key({ }, "XF86Away", awful.tag.history.restore),
|
|
||||||
|
|
||||||
awful.key({ modkey, }, "j",
|
|
||||||
function ()
|
|
||||||
awful.client.focus.byidx( 1)
|
|
||||||
if client.focus then client.focus:raise() end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, }, "k",
|
|
||||||
function ()
|
|
||||||
awful.client.focus.byidx(-1)
|
|
||||||
if client.focus then client.focus:raise() end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, }, "w", function () mymainmenu:show(true) end),
|
|
||||||
--}}}
|
|
||||||
--{{{ Layout manipulation
|
|
||||||
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end),
|
|
||||||
awful.key({ modkey, }, "u", awful.client.urgent.jumpto),
|
|
||||||
awful.key({ modkey, }, "Tab",
|
|
||||||
function ()
|
|
||||||
awful.client.focus.history.previous()
|
|
||||||
if client.focus then
|
|
||||||
client.focus:raise()
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
awful.key({ "Mod1", }, "Tab",
|
|
||||||
function ()
|
|
||||||
awful.client.focus.history.previous()
|
|
||||||
if client.focus then
|
|
||||||
client.focus:raise()
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
--}}}
|
|
||||||
-- Standard program
|
|
||||||
awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end),
|
|
||||||
awful.key({ modkey, }, "f", function () awful.util.spawn("firefox") end),
|
|
||||||
awful.key({ modkey, }, "t", function () awful.util.spawn("thunderbird") end),
|
|
||||||
awful.key({ modkey, }, "p", function () awful.util.spawn("pidgin") end),
|
|
||||||
awful.key({ modkey, }, "s", function () awful.util.spawn("sunbird") end),
|
|
||||||
awful.key({ modkey, }, "g", function () awful.util.spawn("gmpc") end),
|
|
||||||
awful.key({ }, "XF86Mail", function () awful.util.spawn("xset dpms force off") end),
|
|
||||||
awful.key({ modkey }, "XF86Mail", function () awful.util.spawn("slock") end),
|
|
||||||
awful.key({ modkey, "Control" }, "r", awesome.restart),
|
|
||||||
awful.key({ modkey, "Shift" }, "q", awesome.quit),
|
|
||||||
|
|
||||||
-- Audio control
|
|
||||||
awful.key({ modkey }, "F9", function () teardrop("sakura -e alsamixer","top","center", 0.99, 0.4)end ),
|
|
||||||
awful.key({ modkey }, "F1", function () mpdprompt("top","center")end ),
|
|
||||||
awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set Front 2dB-")end ),
|
|
||||||
awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set Front 2dB+")end ),
|
|
||||||
awful.key({ }, "XF86AudioMute", function () awful.util.spawn("amixer set Front toggle") end),
|
|
||||||
awful.key({ modkey , "Shift" }, "m", function () awful.util.spawn("mpdmenu -a") end),
|
|
||||||
awful.key({ modkey , "Control" }, "m", function () awful.util.spawn("mpdmenu -t") end),
|
|
||||||
awful.key({ modkey }, "m", function () awful.util.spawn("mpc toggle") end),
|
|
||||||
awful.key({ modkey }, "n", function () awful.util.spawn("mpc next") end),
|
|
||||||
awful.key({ modkey , "Shift"}, "n", function () awful.util.spawn("mpc prev") end),
|
|
||||||
awful.key({ }, "XF86AudioPlay", function () awful.util.spawn("mpc toggle") end),
|
|
||||||
awful.key({ }, "XF86AudioNext", function () awful.util.spawn("mpc next") end),
|
|
||||||
awful.key({ }, "XF86AudioPrev", function () awful.util.spawn("mpc prev") end),
|
|
||||||
awful.key({ }, "XF86AudioStop", function () awful.util.spawn("mpdmenu -a") end),
|
|
||||||
awful.key({ modkey , "Control" }, "n", function () awful.util.spawn("mpdmenu -j") end),
|
|
||||||
-- Prompt
|
|
||||||
awful.key({ modkey }, "r", function () obvious.popup_run_prompt.run_prompt() end),
|
|
||||||
awful.key({ }, "Scroll_Lock", function () awful.util.spawn("wli") end),
|
|
||||||
awful.key({ }, "F12", function () teardrop("sakura -e 'screen -l'","center","center", 0.99, 0.7)end ),
|
|
||||||
|
|
||||||
|
|
||||||
--{{{Default
|
|
||||||
awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end),
|
|
||||||
awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end),
|
|
||||||
awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end),
|
|
||||||
awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end),
|
|
||||||
awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, 0) end)
|
|
||||||
|
|
||||||
--}}}
|
|
||||||
)
|
|
||||||
|
|
||||||
clientkeys = awful.util.table.join(
|
|
||||||
awful.key({ modkey, }, "F11", function (c) c.fullscreen = not c.fullscreen end),
|
|
||||||
awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end),
|
|
||||||
awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ),
|
|
||||||
awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
|
|
||||||
awful.key({ modkey, }, "o", function (c) c.ontop = not c.ontop end),
|
|
||||||
awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end),
|
|
||||||
awful.key({ modkey, }, "n", function (c) c.minimized = not c.minimized end)
|
|
||||||
)
|
|
||||||
|
|
||||||
-- Compute the maximum number of digit we need, limited to 9
|
|
||||||
keynumber = 0
|
|
||||||
for s = 1, screen.count() do
|
|
||||||
keynumber = math.min(9, math.max(#tags[s], keynumber));
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Bind all key numbers to tags.
|
|
||||||
-- Be careful: we use keycodes to make it works on any keyboard layout.
|
|
||||||
-- This should map on the top row of your keyboard, usually 1 to 9.
|
|
||||||
for i = 1, keynumber do
|
|
||||||
globalkeys = awful.util.table.join(globalkeys,
|
|
||||||
awful.key({ modkey }, "#" .. i + 9,
|
|
||||||
function ()
|
|
||||||
local screen = mouse.screen
|
|
||||||
if tags[screen][i] then
|
|
||||||
awful.tag.viewonly(tags[screen][i])
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, "Control" }, "#" .. i + 9,
|
|
||||||
function ()
|
|
||||||
local screen = mouse.screen
|
|
||||||
if tags[screen][i] then
|
|
||||||
awful.tag.viewtoggle(tags[screen][i])
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, "Shift" }, "#" .. i + 9,
|
|
||||||
function ()
|
|
||||||
if client.focus and tags[client.focus.screen][i] then
|
|
||||||
awful.client.movetotag(tags[client.focus.screen][i])
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
|
|
||||||
function ()
|
|
||||||
if client.focus and tags[client.focus.screen][i] then
|
|
||||||
awful.client.toggletag(tags[client.focus.screen][i])
|
|
||||||
end
|
|
||||||
end))
|
|
||||||
end
|
|
||||||
|
|
||||||
clientbuttons = awful.util.table.join(
|
|
||||||
awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
|
|
||||||
awful.button({ modkey }, 1, awful.mouse.client.move),
|
|
||||||
awful.button({ modkey }, 3, awful.mouse.client.resize))
|
|
||||||
|
|
||||||
-- Set keys
|
|
||||||
root.keys(globalkeys)
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Rules
|
|
||||||
awful.rules.rules = {
|
|
||||||
-- All clients will match this rule.
|
|
||||||
{ rule = { },
|
|
||||||
properties = { border_width = beautiful.border_width,
|
|
||||||
border_color = beautiful.border_normal,
|
|
||||||
focus = true,
|
|
||||||
size_hints_honor = false,
|
|
||||||
keys = clientkeys,
|
|
||||||
buttons = clientbuttons } },
|
|
||||||
{ rule = { class = "MPlayer" },
|
|
||||||
properties = { floating = true,
|
|
||||||
size_hints_honor = true } },
|
|
||||||
{ rule = { class = "pinentry" },
|
|
||||||
properties = { floating = true } },
|
|
||||||
{ rule = { class = "gimp" },
|
|
||||||
properties = { floating = true } },
|
|
||||||
-- Set Firefox to always map on tags number 2 of screen 1.
|
|
||||||
{ rule = { class = "Firefox" },
|
|
||||||
properties = { tag = tags[1][2] } },
|
|
||||||
{ rule = { class = "Pidgin" },
|
|
||||||
properties = { tag = tags[1][3] } },
|
|
||||||
{ rule = { role = "buddy_list" },
|
|
||||||
properties = { master = true } },
|
|
||||||
{ rule = { class = "Thunderbird" },
|
|
||||||
properties = { tag = tags[1][4] } },
|
|
||||||
{ rule = { class = "Sunbird-bin" },
|
|
||||||
properties = { tag = tags[1][5] } },
|
|
||||||
}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Signals
|
|
||||||
-- Signal function to execute when a new client appears.
|
|
||||||
client.add_signal("manage", function (c, startup)
|
|
||||||
-- Add a titlebar
|
|
||||||
-- awful.titlebar.add(c, { modkey = modkey })
|
|
||||||
|
|
||||||
-- Enable sloppy focus
|
|
||||||
c:add_signal("mouse::enter", function(c)
|
|
||||||
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
|
|
||||||
and awful.client.focus.filter(c) then
|
|
||||||
client.focus = c
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
if not startup then
|
|
||||||
-- Set the windows at the slave,
|
|
||||||
-- i.e. put it at the end of others instead of setting it master.
|
|
||||||
-- awful.client.setslave(c)
|
|
||||||
|
|
||||||
-- Put windows in a smart way, only if they does not set an initial position.
|
|
||||||
if not c.size_hints.user_position and not c.size_hints.program_position then
|
|
||||||
awful.placement.no_overlap(c)
|
|
||||||
awful.placement.no_offscreen(c)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end)
|
|
||||||
client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
|
|
||||||
-- }}}
|
|
||||||
|
|
63
rules.lua
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
|
||||||
|
-- {{{ Rules
|
||||||
|
awful.rules.rules = {
|
||||||
|
-- All clients will match this rule.
|
||||||
|
{ rule = { },
|
||||||
|
properties = { border_width = beautiful.border_width,
|
||||||
|
border_color = beautiful.border_normal,
|
||||||
|
focus = true,
|
||||||
|
size_hints_honor = false,
|
||||||
|
keys = clientkeys,
|
||||||
|
buttons = clientbuttons } },
|
||||||
|
{ rule = { class = "MPlayer" },
|
||||||
|
properties = { floating = true,
|
||||||
|
size_hints_honor = true } },
|
||||||
|
{ rule = { class = "Passprompt" },
|
||||||
|
properties = { floating = true,
|
||||||
|
ontop = true,
|
||||||
|
focus = true } },
|
||||||
|
{ rule = { class = "Teardrop" },
|
||||||
|
properties = { floating = true } },
|
||||||
|
{ rule = { class = "pinentry" },
|
||||||
|
properties = { floating = true } },
|
||||||
|
{ rule = { class = "gimp" },
|
||||||
|
properties = { floating = true } },
|
||||||
|
-- Set Firefox to always map on tags number 2 of screen 1.
|
||||||
|
{ rule = { class = "Firefox" },
|
||||||
|
properties = { tag = tags[1][2],
|
||||||
|
floating = false } },
|
||||||
|
{ rule = { class = "Pidgin" },
|
||||||
|
properties = { tag = tags[1][3]} },
|
||||||
|
{ rule = { role = "buddy_list" },
|
||||||
|
properties = { master = true } },
|
||||||
|
{ rule = { role = "conversation" },
|
||||||
|
callback = awful.client.setslave},
|
||||||
|
{ rule = { class = "Irssi"},
|
||||||
|
properties = { tag = tags[1][3]} ,
|
||||||
|
callback = awful.client.setslave},
|
||||||
|
{ rule = { class = "Claws-mail" },
|
||||||
|
properties = { tag = tags[1][4] } },
|
||||||
|
{ rule = { class = "Thunderbird" },
|
||||||
|
properties = { tag = tags[1][4] } },
|
||||||
|
{ rule = { class = "Claws-mail" },
|
||||||
|
properties = { tag = tags[1][4] } },
|
||||||
|
{ rule = { class = "Sunbird-bin" },
|
||||||
|
properties = { tag = tags[1][5] } },
|
||||||
|
{ rule = { class = "Gmpc" },
|
||||||
|
properties = { tag = tags[1][6] } },
|
||||||
|
{ rule = { class = "Deluge" },
|
||||||
|
properties = { tag = tags[1][7] } },
|
||||||
|
{ rule = { class = "Xhtop" },
|
||||||
|
properties = { tag = tags[1][22] } },
|
||||||
|
--{ rule = { class = "OpenOffice.org 3.2" },
|
||||||
|
--properties = { floating = false } },
|
||||||
|
{ rule = { class = "Cellwriter" },
|
||||||
|
properties = { tag = tags[1][1],
|
||||||
|
ontop = true,
|
||||||
|
size_hints_honor = true,
|
||||||
|
float = true,
|
||||||
|
sticky = true,
|
||||||
|
fullscreen = true
|
||||||
|
} },
|
||||||
|
}
|
||||||
|
-- }}}
|
136
scratchpad.lua
|
@ -1,136 +0,0 @@
|
||||||
---------------------------------------------------------------
|
|
||||||
-- Basic scratchpad manager for the awesome window manager
|
|
||||||
---------------------------------------------------------------
|
|
||||||
-- Adrian C. <anrxc.sysphere.org>
|
|
||||||
-- Licensed under the WTFPL version 2
|
|
||||||
-- * http://sam.zoy.org/wtfpl/COPYING
|
|
||||||
---------------------------------------------------------------
|
|
||||||
-- To use this module add:
|
|
||||||
-- require("scratchpad")
|
|
||||||
-- to the top of your rc.lua, and call:
|
|
||||||
-- scratchpad.set(c, width, height, sticky, screen)
|
|
||||||
-- from a clientkeys binding, and:
|
|
||||||
-- scratchpad.toggle(screen)
|
|
||||||
-- from a globalkeys binding.
|
|
||||||
--
|
|
||||||
-- Parameters:
|
|
||||||
-- c - Client to scratch or un-scratch
|
|
||||||
-- width - Width in absolute pixels, or width percentage
|
|
||||||
-- when < 1 (0.50 (50% of the screen) by default)
|
|
||||||
-- height - Height in absolute pixels, or height percentage
|
|
||||||
-- when < 1 (0.50 (50% of the screen) by default)
|
|
||||||
-- sticky - Visible on all tags, false by default
|
|
||||||
-- screen - Screen (optional), mouse.screen by default
|
|
||||||
---------------------------------------------------------------
|
|
||||||
|
|
||||||
-- Grab environment
|
|
||||||
local awful = require("awful")
|
|
||||||
local capi = {
|
|
||||||
mouse = mouse,
|
|
||||||
client = client,
|
|
||||||
screen = screen
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Scratchpad: Basic scratchpad manager for the awesome window manager
|
|
||||||
module("scratchpad")
|
|
||||||
|
|
||||||
local scratch = {}
|
|
||||||
|
|
||||||
-- Scratch the focused client, or un-scratch and tile it. If another
|
|
||||||
-- client is already scratched, replace it with the focused client.
|
|
||||||
function set(c, width, height, sticky, screen)
|
|
||||||
local width = width or 0.50
|
|
||||||
local height = height or 0.50
|
|
||||||
local sticky = sticky or false
|
|
||||||
local screen = screen or capi.mouse.screen
|
|
||||||
|
|
||||||
local function setscratch(c)
|
|
||||||
-- Scratchpad is floating
|
|
||||||
awful.client.floating.set(c, true)
|
|
||||||
|
|
||||||
-- Scratchpad geometry and placement
|
|
||||||
local screengeom = capi.screen[screen].workarea
|
|
||||||
|
|
||||||
if width < 1 then width = screengeom.width * width end
|
|
||||||
if height < 1 then height = screengeom.height * height end
|
|
||||||
|
|
||||||
c:geometry({ -- Client is always centered on screen
|
|
||||||
x = screengeom.x + (screengeom.width - width) / 2,
|
|
||||||
y = screengeom.y + (screengeom.height - height) / 2,
|
|
||||||
width = width, height = height
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Scratchpad properties
|
|
||||||
c.ontop = true
|
|
||||||
c.above = true
|
|
||||||
c.skip_taskbar = true
|
|
||||||
if sticky then c.sticky = true end
|
|
||||||
if c.titlebar then awful.titlebar.remove(c) end
|
|
||||||
|
|
||||||
-- Scratchpad should not loose focus
|
|
||||||
c:raise()
|
|
||||||
capi.client.focus = c
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Prepare a table for storing clients,
|
|
||||||
if not scratch["pad"] then scratch["pad"] = {}
|
|
||||||
-- add unmanage signal for scratchpad clients
|
|
||||||
capi.client.add_signal("unmanage", function (c)
|
|
||||||
local oc = scratch["pad"][screen]
|
|
||||||
if oc == c then
|
|
||||||
scratch["pad"][screen] = nil
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- If the scratcphad is emtpy, store the client,
|
|
||||||
if not scratch["pad"][screen] then
|
|
||||||
scratch["pad"][screen] = c
|
|
||||||
-- then apply geometry and properties
|
|
||||||
setscratch(c)
|
|
||||||
else -- If a client is already scratched,
|
|
||||||
local oc = scratch["pad"][screen]
|
|
||||||
-- compare it with the focused client
|
|
||||||
if oc == c then
|
|
||||||
-- If it matches then unscratch and clear the table
|
|
||||||
awful.client.floating.toggle(oc); oc.sticky = false
|
|
||||||
oc.ontop = false; oc.above = false
|
|
||||||
scratch["pad"][screen] = nil
|
|
||||||
else -- If they don't match, unscratch and replace it
|
|
||||||
oc.hidden = false; oc.sticky = false
|
|
||||||
oc.ontop = false; oc.above = false
|
|
||||||
awful.client.floating.toggle(oc)
|
|
||||||
scratch["pad"][screen] = c
|
|
||||||
setscratch(c)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Move the scratchpad to the current workspace, focus and raise it
|
|
||||||
-- when it's hidden, or hide it when it's visible.
|
|
||||||
function toggle(screen)
|
|
||||||
local screen = screen or capi.mouse.screen
|
|
||||||
|
|
||||||
-- Check if we have a client on storage,
|
|
||||||
if scratch["pad"] and
|
|
||||||
scratch["pad"][screen] ~= nil
|
|
||||||
then -- and get it out, to play
|
|
||||||
local c = scratch["pad"][screen]
|
|
||||||
|
|
||||||
-- If it's visible on another tag hide it,
|
|
||||||
if c:isvisible() == false then c.hidden = true;
|
|
||||||
-- and move it to the current worskpace
|
|
||||||
awful.client.movetotag(awful.tag.selected(screen), c)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Focus and raise if it's hidden,
|
|
||||||
if c.hidden then
|
|
||||||
awful.placement.centered(c)
|
|
||||||
c.hidden = false
|
|
||||||
c:raise()
|
|
||||||
capi.client.focus = c
|
|
||||||
else -- hide it if it's not
|
|
||||||
c.hidden = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
31
signals.lua
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
|
||||||
|
-- {{{ Signals
|
||||||
|
-- Signal function to execute when a new client appears.
|
||||||
|
client.add_signal("manage", function (c, startup)
|
||||||
|
-- Add a titlebar
|
||||||
|
-- awful.titlebar.add(c, { modkey = modkey })
|
||||||
|
|
||||||
|
-- Enable sloppy focus
|
||||||
|
c:add_signal("mouse::enter", function(c)
|
||||||
|
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
|
||||||
|
and awful.client.focus.filter(c) then
|
||||||
|
client.focus = c
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
if not startup then
|
||||||
|
-- Set the windows at the slave,
|
||||||
|
-- i.e. put it at the end of others instead of setting it master.
|
||||||
|
-- awful.client.setslave(c)
|
||||||
|
|
||||||
|
-- Put windows in a smart way, only if they does not set an initial position.
|
||||||
|
if not c.size_hints.user_position and not c.size_hints.program_position then
|
||||||
|
awful.placement.no_overlap(c)
|
||||||
|
awful.placement.no_offscreen(c)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end)
|
||||||
|
client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
|
||||||
|
-- }}}
|
40
tags.lua
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
|
||||||
|
-- {{{ Tags
|
||||||
|
tags={}
|
||||||
|
tags.setup = {
|
||||||
|
{ name = "1:⚙", layout = layouts[1] },
|
||||||
|
{ name = "2:⌘", layout = layouts[5] },
|
||||||
|
{ name = "3:☻", layout = layouts[3], mwfact = 0.20 },
|
||||||
|
{ name = "4:✉", layout = layouts[5] },
|
||||||
|
{ name = "5:☑", layout = layouts[1] },
|
||||||
|
{ name = "6:♫", layout = layouts[1] },
|
||||||
|
{ name = "7:☣", layout = layouts[1] },
|
||||||
|
{ name = "8:☕", layout = layouts[1] },
|
||||||
|
{ name = "9:⚂", layout = layouts[1] },
|
||||||
|
{ name = "0:☠", layout = layouts[1] },
|
||||||
|
{ name = "F1:☭", layout = layouts[1] },
|
||||||
|
{ name = "F2:♚", layout = layouts[1] },
|
||||||
|
{ name = "F3:♛", layout = layouts[1] },
|
||||||
|
{ name = "F4:♜", layout = layouts[1] },
|
||||||
|
{ name = "F5:♝", layout = layouts[1] },
|
||||||
|
{ name = "F6:♞", layout = layouts[1] },
|
||||||
|
{ name = "F7:♟", layout = layouts[1] },
|
||||||
|
{ name = "F8:⚖", layout = layouts[1] },
|
||||||
|
{ name = "F9:⚛", layout = layouts[1] },
|
||||||
|
{ name = "F10:⚡", layout = layouts[1] },
|
||||||
|
{ name = "F11:⚰", layout = layouts[1] },
|
||||||
|
{ name = "F12:⚙", layout = layouts[1] }
|
||||||
|
}
|
||||||
|
|
||||||
|
for s = 1, screen.count() do
|
||||||
|
tags[s] = {}
|
||||||
|
for i, t in ipairs(tags.setup) do
|
||||||
|
tags[s][i] = tag({ name = t.name })
|
||||||
|
tags[s][i].screen = s
|
||||||
|
awful.tag.setproperty(tags[s][i], "layout", t.layout)
|
||||||
|
awful.tag.setproperty(tags[s][i], "mwfact", t.mwfact)
|
||||||
|
awful.tag.setproperty(tags[s][i], "hide", t.hide)
|
||||||
|
end
|
||||||
|
tags[s][1].selected = true
|
||||||
|
end
|
||||||
|
-- }}}
|
142
theme.lua
|
@ -1,142 +0,0 @@
|
||||||
-------------------------------
|
|
||||||
-- "Zenburn" awesome theme --
|
|
||||||
-- By Adrian C. (anrxc) --
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
-- {{{ Main
|
|
||||||
theme = {}
|
|
||||||
confdir = awful.util.getdir("config")
|
|
||||||
theme.wallpaper_cmd = { "/usr/bin/nitrogen --restore" }
|
|
||||||
--theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/zenburn/zenburn-background.png" }
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
|
|
||||||
-- {{{ Styles
|
|
||||||
theme.font = "fixed 6"
|
|
||||||
|
|
||||||
-- {{{ Colors
|
|
||||||
theme.fg_normal = "#DCDCCC"
|
|
||||||
theme.fg_focus = "#F0DFAF"
|
|
||||||
theme.fg_urgent = "#CC9393"
|
|
||||||
theme.bg_normal = "#3F3F3F"
|
|
||||||
theme.bg_focus = "#1E2320"
|
|
||||||
theme.bg_urgent = "#3F3F3F"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Borders
|
|
||||||
theme.border_width = "1"
|
|
||||||
theme.border_normal = "#3F3F3F"
|
|
||||||
theme.border_focus = "#6F6F6F"
|
|
||||||
theme.border_marked = "#CC9393"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Titlebars
|
|
||||||
theme.titlebar_bg_focus = "#5F5F5F"
|
|
||||||
theme.titlebar_bg_normal = "#3F3F3F"
|
|
||||||
-- theme.titlebar_[normal|focus]
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Widgets
|
|
||||||
theme.fg_widget = "#AECF96"
|
|
||||||
theme.fg_center_widget = "#88A175"
|
|
||||||
theme.fg_end_widget = "#FF5656"
|
|
||||||
theme.fg_off_widget = "#494B4F"
|
|
||||||
theme.fg_netup_widget = "#7F9F7F"
|
|
||||||
theme.fg_netdn_widget = "#CC9393"
|
|
||||||
theme.bg_widget = "#3F3F3F"
|
|
||||||
theme.border_widget = "#3F3F3F"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Mouse finder
|
|
||||||
theme.mouse_finder_color = "#CC9393"
|
|
||||||
-- theme.mouse_finder_[timeout|animate_timeout|radius|factor]
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Tooltips
|
|
||||||
-- theme.tooltip_[font|opacity|fg_color|bg_color|border_width|border_color]
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Taglist and Tasklist
|
|
||||||
-- theme.[taglist|tasklist]_[bg|fg]_[focus|urgent]
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Menu
|
|
||||||
-- theme.menu_[height|width]
|
|
||||||
-- theme.menu_[bg|fg]_[normal|focus]
|
|
||||||
-- theme.menu_[border_color|border_width]
|
|
||||||
-- }}}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
|
|
||||||
-- {{{ Icons
|
|
||||||
--
|
|
||||||
-- {{{ Taglist icons
|
|
||||||
theme.taglist_squares_sel = confdir .. "/icons/taglist/squarefw.png"
|
|
||||||
theme.taglist_squares_unsel = confdir .. "/icons/taglist/squarew.png"
|
|
||||||
--theme.taglist_squares_resize = "false"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Misc icons
|
|
||||||
--theme.awesome_icon = confdir .. "/icons/awesome.png"
|
|
||||||
--theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png"
|
|
||||||
--theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/floatingw.png"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Layout icons
|
|
||||||
theme.layout_tile = confdir .. "/icons/layouts/tilew.png"
|
|
||||||
theme.layout_tileleft = confdir .. "/icons/layouts/tileleftw.png"
|
|
||||||
theme.layout_tilebottom = confdir .. "/icons/layouts/tilebottomw.png"
|
|
||||||
theme.layout_tiletop = confdir .. "/icons/layouts/tiletopw.png"
|
|
||||||
theme.layout_fairv = confdir .. "/icons/layouts/fairvw.png"
|
|
||||||
theme.layout_fairh = confdir .. "/icons/layouts/fairhw.png"
|
|
||||||
theme.layout_spiral = confdir .. "/icons/layouts/spiralw.png"
|
|
||||||
theme.layout_dwindle = confdir .. "/icons/layouts/dwindlew.png"
|
|
||||||
theme.layout_max = confdir .. "/icons/layouts/maxw.png"
|
|
||||||
theme.layout_fullscreen = confdir .. "/icons/layouts/fullscreenw.png"
|
|
||||||
theme.layout_magnifier = confdir .. "/icons/layouts/magnifierw.png"
|
|
||||||
theme.layout_floating = confdir .. "/icons/layouts/floatingw.png"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Widget icons
|
|
||||||
theme.widget_cpu = confdir .. "/icons/cpu.png"
|
|
||||||
theme.widget_bat = confdir .. "/icons/bat.png"
|
|
||||||
theme.widget_mem = confdir .. "/icons/mem.png"
|
|
||||||
theme.widget_fs = confdir .. "/icons/disk.png"
|
|
||||||
theme.widget_net = confdir .. "/icons/down.png"
|
|
||||||
theme.widget_netup = confdir .. "/icons/up.png"
|
|
||||||
theme.widget_mail = confdir .. "/icons/mail.png"
|
|
||||||
theme.widget_vol = confdir .. "/icons/vol.png"
|
|
||||||
theme.widget_org = confdir .. "/icons/cal.png"
|
|
||||||
theme.widget_date = confdir .. "/icons/time.png"
|
|
||||||
theme.widget_crypto = confdir .. "/icons/crypto.png"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Titlebar icons
|
|
||||||
theme.titlebar_close_button_focus = confdir .. "/icons/titlebar/close_focus.png"
|
|
||||||
theme.titlebar_close_button_normal = confdir .. "/icons/titlebar/close_normal.png"
|
|
||||||
|
|
||||||
theme.titlebar_ontop_button_focus_active = confdir .. "/icons/titlebar/ontop_focus_active.png"
|
|
||||||
theme.titlebar_ontop_button_normal_active = confdir .. "/icons/titlebar/ontop_normal_active.png"
|
|
||||||
theme.titlebar_ontop_button_focus_inactive = confdir .. "/icons/titlebar/ontop_focus_inactive.png"
|
|
||||||
theme.titlebar_ontop_button_normal_inactive = confdir .. "/icons/titlebar/ontop_normal_inactive.png"
|
|
||||||
|
|
||||||
theme.titlebar_sticky_button_focus_active = confdir .. "/icons/titlebar/sticky_focus_active.png"
|
|
||||||
theme.titlebar_sticky_button_normal_active = confdir .. "/icons/titlebar/sticky_normal_active.png"
|
|
||||||
theme.titlebar_sticky_button_focus_inactive = confdir .. "/icons/titlebar/sticky_focus_inactive.png"
|
|
||||||
theme.titlebar_sticky_button_normal_inactive = confdir .. "/icons/titlebar/sticky_normal_inactive.png"
|
|
||||||
|
|
||||||
theme.titlebar_floating_button_focus_active = confdir .. "/icons/titlebar/floating_focus_active.png"
|
|
||||||
theme.titlebar_floating_button_normal_active = confdir .. "/icons/titlebar/floating_normal_active.png"
|
|
||||||
theme.titlebar_floating_button_focus_inactive = confdir .. "/icons/titlebar/floating_focus_inactive.png"
|
|
||||||
theme.titlebar_floating_button_normal_inactive = confdir .. "/icons/titlebar/floating_normal_inactive.png"
|
|
||||||
|
|
||||||
theme.titlebar_maximized_button_focus_active = confdir .. "/icons/titlebar/maximized_focus_active.png"
|
|
||||||
theme.titlebar_maximized_button_normal_active = confdir .. "/icons/titlebar/maximized_normal_active.png"
|
|
||||||
theme.titlebar_maximized_button_focus_inactive = confdir .. "/icons/titlebar/maximized_focus_inactive.png"
|
|
||||||
theme.titlebar_maximized_button_normal_inactive = confdir .. "/icons/titlebar/maximized_normal_inactive.png"
|
|
||||||
-- }}}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
|
|
||||||
return theme
|
|
91
wibox.lua
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
|
||||||
|
-- {{{ Reusable separators
|
||||||
|
spacer = widget({ type = "textbox", name = "spacer" })
|
||||||
|
spacer.text = " "
|
||||||
|
|
||||||
|
separator = widget({ type = "textbox", name = "separator", align = "center" })
|
||||||
|
separator.text = " )( "
|
||||||
|
-- }}}
|
||||||
|
|
||||||
|
-- {{{ Wibox
|
||||||
|
|
||||||
|
--popup run
|
||||||
|
|
||||||
|
-- Create a textclock widget
|
||||||
|
--clock = awful.widget.textclock({ align = "right" })
|
||||||
|
mysystray = widget({ type = "systray" })
|
||||||
|
|
||||||
|
clock = widget({ type = "textbox" })
|
||||||
|
vicious.register(clock, vicious.widgets.date, "%b %d, %R", 60)
|
||||||
|
|
||||||
|
memwidget = widget({ type = "textbox" })
|
||||||
|
vicious.register(memwidget, vicious.widgets.mem, "⌸ $1% ($2MB / $3MB) ", 13)
|
||||||
|
|
||||||
|
--batwidget = obvious.battery();
|
||||||
|
batwidget = widget({ type = "textbox" })
|
||||||
|
vicious.register(batwidget, vicious.widgets.bat, "⌁ $1$2% - $3", 61)
|
||||||
|
|
||||||
|
cpuwidget = awful.widget.progressbar()
|
||||||
|
cpulabel = widget({ type = "textbox" })
|
||||||
|
cpuwidget:set_width(50)
|
||||||
|
cpuwidget:set_background_color("#494B4F")
|
||||||
|
cpuwidget:set_color("#FF5656")
|
||||||
|
cpuwidget:set_gradient_colors({ "#FF5656", "#88A175", "#AECF96" })
|
||||||
|
vicious.register(cpuwidget, vicious.widgets.cpu, "$1",41)
|
||||||
|
vicious.register(cpulabel, vicious.widgets.cpu, "CPU: $1%")
|
||||||
|
|
||||||
|
|
||||||
|
wlanwidget = widget({ type = "textbox" })
|
||||||
|
vicious.register(wlanwidget, vicious.widgets.wifi, "WLAN ${ssid} @ ${sign}, Q:${link}/70", 31, "wlan0")
|
||||||
|
-- Create a wibox for each screen and add it
|
||||||
|
leftwibox = {}
|
||||||
|
rightwibox = {}
|
||||||
|
mylayoutbox = {}
|
||||||
|
mytaglist = {}
|
||||||
|
mytaglist.buttons = awful.util.table.join(
|
||||||
|
awful.button({ }, 1, awful.tag.viewonly),
|
||||||
|
awful.button({ modkey }, 1, awful.client.movetotag),
|
||||||
|
awful.button({ }, 3, awful.tag.viewtoggle),
|
||||||
|
awful.button({ modkey }, 3, awful.client.toggletag),
|
||||||
|
awful.button({ }, 4, awful.tag.viewnext),
|
||||||
|
awful.button({ }, 5, awful.tag.viewprev)
|
||||||
|
)
|
||||||
|
|
||||||
|
for s = 1, screen.count() do
|
||||||
|
-- Create an imagebox widget which will contains an icon indicating which layout we're using.
|
||||||
|
-- We need one layoutbox per screen.
|
||||||
|
mylayoutbox[s] = awful.widget.layoutbox(s)
|
||||||
|
mylayoutbox[s]:buttons(awful.util.table.join(
|
||||||
|
awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
|
||||||
|
awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
|
||||||
|
awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
|
||||||
|
awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
|
||||||
|
-- Create a taglist widget
|
||||||
|
mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons)
|
||||||
|
|
||||||
|
|
||||||
|
-- Create the wibox
|
||||||
|
leftwibox[s] = awful.wibox({ position = "left", screen = s })
|
||||||
|
rightwibox[s] = awful.wibox({ position = "right", screen = s })
|
||||||
|
-- Add widgets to the wibox - order matters
|
||||||
|
leftwibox[s].widgets = {
|
||||||
|
mytaglist[s],
|
||||||
|
mylayoutbox[s],
|
||||||
|
spacer,
|
||||||
|
layout = awful.widget.layout.horizontal.rightleft
|
||||||
|
}
|
||||||
|
rightwibox[s].widgets = {
|
||||||
|
{
|
||||||
|
clock,
|
||||||
|
separator, spacer, memwidget,
|
||||||
|
separator, spacer, batwidget,
|
||||||
|
separator, spacer, wlanwidget,
|
||||||
|
separator, spacer, cpulabel, cpuwidget,
|
||||||
|
spacer,
|
||||||
|
layout = awful.widget.layout.horizontal.leftright
|
||||||
|
},
|
||||||
|
separator, spacer, s == 1 and mysystray or nil,
|
||||||
|
layout = awful.widget.layout.horizontal.leftright
|
||||||
|
}
|
||||||
|
end
|
||||||
|
-- }}}
|
848
wicked.lua
|
@ -1,848 +0,0 @@
|
||||||
---------------------------------------------------------------------------
|
|
||||||
-- Wicked widgets for the awesome window manager
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
-- Lucas de Vries <lucas@glacicle.com>
|
|
||||||
-- Licensed under the WTFPL
|
|
||||||
-- Version: v1.0pre-awe3.0rc4
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- Require libs
|
|
||||||
require("awful")
|
|
||||||
|
|
||||||
---- {{{ Grab environment
|
|
||||||
local ipairs = ipairs
|
|
||||||
local pairs = pairs
|
|
||||||
local print = print
|
|
||||||
local type = type
|
|
||||||
local tonumber = tonumber
|
|
||||||
local tostring = tostring
|
|
||||||
local math = math
|
|
||||||
local table = table
|
|
||||||
local awful = awful
|
|
||||||
local os = os
|
|
||||||
local io = io
|
|
||||||
local string = string
|
|
||||||
|
|
||||||
-- Grab C API
|
|
||||||
local capi =
|
|
||||||
{
|
|
||||||
awesome = awesome,
|
|
||||||
screen = screen,
|
|
||||||
client = client,
|
|
||||||
mouse = mouse,
|
|
||||||
button = button,
|
|
||||||
titlebar = titlebar,
|
|
||||||
widget = widget,
|
|
||||||
hooks = hooks,
|
|
||||||
keygrabber = keygrabber
|
|
||||||
}
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- Wicked: Widgets for the awesome window manager
|
|
||||||
module("wicked")
|
|
||||||
|
|
||||||
---- {{{ Initialise variables
|
|
||||||
local registered = {}
|
|
||||||
local widget_cache = {}
|
|
||||||
|
|
||||||
-- Initialise function tables
|
|
||||||
widgets = {}
|
|
||||||
helper = {}
|
|
||||||
|
|
||||||
local nets = {}
|
|
||||||
local cpu_total = {}
|
|
||||||
local cpu_active = {}
|
|
||||||
local cpu_usage = {}
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Helper functions
|
|
||||||
|
|
||||||
----{{{ Max width
|
|
||||||
function helper.max_width(str, width)
|
|
||||||
l = str:len()
|
|
||||||
|
|
||||||
if l > width then
|
|
||||||
r = math.floor(width/2)
|
|
||||||
a = str:sub(1,r)
|
|
||||||
b = str:sub(l-r, l)
|
|
||||||
str = a .. "..." .. b
|
|
||||||
end
|
|
||||||
|
|
||||||
return str
|
|
||||||
end
|
|
||||||
----}}}
|
|
||||||
|
|
||||||
----{{{ Force a fixed width on a string with spaces
|
|
||||||
function helper.fixed_width(str, width)
|
|
||||||
l = str:len()
|
|
||||||
n = width-l
|
|
||||||
if n >= 0 then
|
|
||||||
for i = 1, n do
|
|
||||||
str = str.." "
|
|
||||||
end
|
|
||||||
else
|
|
||||||
str = str:sub(0, l+n)
|
|
||||||
end
|
|
||||||
return str
|
|
||||||
end
|
|
||||||
----}}}
|
|
||||||
|
|
||||||
---- {{{ Format a string with args
|
|
||||||
function helper.format(format, args)
|
|
||||||
-- TODO: Find a more efficient way to do this
|
|
||||||
|
|
||||||
-- Format a string
|
|
||||||
for var,val in pairs(args) do
|
|
||||||
format = string.gsub(format, '$'..var, val)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Return formatted string
|
|
||||||
return format
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Padd a number to a minimum amount of digits
|
|
||||||
function helper.padd(number, padding)
|
|
||||||
s = tostring(number)
|
|
||||||
|
|
||||||
if padding == nil then
|
|
||||||
return s
|
|
||||||
end
|
|
||||||
|
|
||||||
for i=1,padding do
|
|
||||||
if math.floor(number/math.pow(10,(i-1))) == 0 then
|
|
||||||
s = "0"..s
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if number == 0 then
|
|
||||||
s = s:sub(2)
|
|
||||||
end
|
|
||||||
|
|
||||||
return s
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Convert amount of bytes to string
|
|
||||||
function helper.bytes_to_string(bytes, sec, padding)
|
|
||||||
if bytes == nil or tonumber(bytes) == nil then
|
|
||||||
return ''
|
|
||||||
end
|
|
||||||
|
|
||||||
bytes = tonumber(bytes)
|
|
||||||
|
|
||||||
signs = {}
|
|
||||||
signs[1] = ' b'
|
|
||||||
signs[2] = 'KiB'
|
|
||||||
signs[3] = 'MiB'
|
|
||||||
signs[4] = 'GiB'
|
|
||||||
signs[5] = 'TiB'
|
|
||||||
|
|
||||||
sign = 1
|
|
||||||
|
|
||||||
while bytes/1024 > 1 and signs[sign+1] ~= nil do
|
|
||||||
bytes = bytes/1024
|
|
||||||
sign = sign+1
|
|
||||||
end
|
|
||||||
|
|
||||||
bytes = bytes*10
|
|
||||||
bytes = math.floor(bytes)/10
|
|
||||||
|
|
||||||
if padding then
|
|
||||||
bytes = helper.padd(bytes*10, padding+1)
|
|
||||||
bytes = bytes:sub(1, bytes:len()-1).."."..bytes:sub(bytes:len())
|
|
||||||
end
|
|
||||||
|
|
||||||
if sec then
|
|
||||||
return tostring(bytes)..signs[sign]..'ps'
|
|
||||||
else
|
|
||||||
return tostring(bytes)..signs[sign]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Split by whitespace
|
|
||||||
function helper.splitbywhitespace(str)
|
|
||||||
values = {}
|
|
||||||
start = 1
|
|
||||||
splitstart, splitend = string.find(str, ' ', start)
|
|
||||||
|
|
||||||
while splitstart do
|
|
||||||
m = string.sub(str, start, splitstart-1)
|
|
||||||
if m:gsub(' ','') ~= '' then
|
|
||||||
table.insert(values, m)
|
|
||||||
end
|
|
||||||
|
|
||||||
start = splitend+1
|
|
||||||
splitstart, splitend = string.find(str, ' ', start)
|
|
||||||
end
|
|
||||||
|
|
||||||
m = string.sub(str, start)
|
|
||||||
if m:gsub(' ','') ~= '' then
|
|
||||||
table.insert(values, m)
|
|
||||||
end
|
|
||||||
|
|
||||||
return values
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
--{{{ Escape a string
|
|
||||||
function helper.escape(text)
|
|
||||||
if text then
|
|
||||||
text = text:gsub("&", "&")
|
|
||||||
text = text:gsub("<", "<")
|
|
||||||
text = text:gsub(">", ">")
|
|
||||||
text = text:gsub("'", "'")
|
|
||||||
text = text:gsub("\"", """)
|
|
||||||
end
|
|
||||||
return text
|
|
||||||
end
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Widget types
|
|
||||||
|
|
||||||
---- {{{ MPD widget type
|
|
||||||
function widgets.mpd()
|
|
||||||
---- Get data from mpc
|
|
||||||
local nowplaying_file = io.popen('mpc')
|
|
||||||
local nowplaying = nowplaying_file:read()
|
|
||||||
|
|
||||||
-- Close the command
|
|
||||||
nowplaying_file:close()
|
|
||||||
|
|
||||||
-- Check that it's not nil
|
|
||||||
if nowplaying == nil then
|
|
||||||
return {''}
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Escape
|
|
||||||
nowplaying = helper.escape(nowplaying)
|
|
||||||
|
|
||||||
-- Return it
|
|
||||||
return {nowplaying}
|
|
||||||
end
|
|
||||||
|
|
||||||
widget_cache[widgets.mpd] = {}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ MOCP widget type
|
|
||||||
function widgets.mocp(format, max_width)
|
|
||||||
local playing = ''
|
|
||||||
|
|
||||||
---- Get data from mocp
|
|
||||||
local info = io.popen('mocp -i')
|
|
||||||
local state = info:read()
|
|
||||||
state = state.gsub(state, 'State: ', '')
|
|
||||||
|
|
||||||
if (state == "PLAY") then
|
|
||||||
local file = info:read()
|
|
||||||
file = file.gsub(file, 'File: ', '')
|
|
||||||
local title = info:read()
|
|
||||||
title = title.gsub(title, 'Title: ', '')
|
|
||||||
local artist = info:read()
|
|
||||||
artist = artist.gsub(artist, 'Artist: ', '')
|
|
||||||
local songtitle = info:read()
|
|
||||||
songtitle = songtitle.gsub(songtitle, 'SongTitle: ', '')
|
|
||||||
local album = info:read()
|
|
||||||
album = album.gsub(album, 'Album: ', '')
|
|
||||||
|
|
||||||
-- Try artist - (song)title
|
|
||||||
if (artist:len() > 0) then
|
|
||||||
playing = artist .. ' - ' .. (songtitle ~= '' and songtitle or title)
|
|
||||||
|
|
||||||
-- Else try title or songtitle
|
|
||||||
elseif (artist:len() == 0 and (title:len() > 0 or songtitle:len() > 0)) then
|
|
||||||
playing = (title ~= '' and title or songtitle)
|
|
||||||
|
|
||||||
-- Else use the filename
|
|
||||||
else
|
|
||||||
file = string.reverse(file)
|
|
||||||
i = string.find(file, '/')
|
|
||||||
if (i ~= nil) then
|
|
||||||
file = string.sub(file, 0, i-1)
|
|
||||||
end
|
|
||||||
playing = string.reverse(file)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
playing = state
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Close file
|
|
||||||
info:close()
|
|
||||||
|
|
||||||
-- Apply maximum width
|
|
||||||
if (max_width ~= nil) then
|
|
||||||
playing = helper.max_width(playing, max_width)
|
|
||||||
end
|
|
||||||
|
|
||||||
playing = helper.escape(playing)
|
|
||||||
|
|
||||||
-- Return it
|
|
||||||
return {playing}
|
|
||||||
end
|
|
||||||
|
|
||||||
widget_cache[widgets.mocp] = {}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ CPU widget type
|
|
||||||
function widgets.cpu(format, padding)
|
|
||||||
-- Calculate CPU usage for all available CPUs / cores and return the
|
|
||||||
-- usage
|
|
||||||
|
|
||||||
-- Perform a new measurement
|
|
||||||
---- Get /proc/stat
|
|
||||||
local cpu_lines = {}
|
|
||||||
local cpu_usage_file = io.open('/proc/stat')
|
|
||||||
for line in cpu_usage_file:lines() do
|
|
||||||
if string.sub(line, 1, 3) == 'cpu' then
|
|
||||||
table.insert(cpu_lines, helper.splitbywhitespace(line))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
cpu_usage_file:close()
|
|
||||||
|
|
||||||
---- Ensure tables are initialized correctly
|
|
||||||
while #cpu_total < #cpu_lines do
|
|
||||||
table.insert(cpu_total, 0)
|
|
||||||
end
|
|
||||||
while #cpu_active < #cpu_lines do
|
|
||||||
table.insert(cpu_active, 0)
|
|
||||||
end
|
|
||||||
while #cpu_usage < #cpu_lines do
|
|
||||||
table.insert(cpu_usage, 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
---- Setup tables
|
|
||||||
total_new = {}
|
|
||||||
active_new = {}
|
|
||||||
diff_total = {}
|
|
||||||
diff_active = {}
|
|
||||||
|
|
||||||
for i,v in ipairs(cpu_lines) do
|
|
||||||
---- Calculate totals
|
|
||||||
total_new[i] = 0
|
|
||||||
for j = 2, #v do
|
|
||||||
total_new[i] = total_new[i] + v[j]
|
|
||||||
end
|
|
||||||
active_new[i] = v[2] + v[3] + v[4]
|
|
||||||
|
|
||||||
---- Calculate percentage
|
|
||||||
diff_total[i] = total_new[i] - cpu_total[i]
|
|
||||||
diff_active[i] = active_new[i] - cpu_active[i]
|
|
||||||
cpu_usage[i] = math.floor(diff_active[i] / diff_total[i] * 100)
|
|
||||||
|
|
||||||
---- Store totals
|
|
||||||
cpu_total[i] = total_new[i]
|
|
||||||
cpu_active[i] = active_new[i]
|
|
||||||
end
|
|
||||||
|
|
||||||
if padding ~= nil then
|
|
||||||
for k,v in pairs(cpu_usage) do
|
|
||||||
if type(padding) == "table" then
|
|
||||||
p = padding[k]
|
|
||||||
else
|
|
||||||
p = padding
|
|
||||||
end
|
|
||||||
|
|
||||||
cpu_usage[k] = helper.padd(cpu_usage[k], p)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return cpu_usage
|
|
||||||
end
|
|
||||||
|
|
||||||
widget_cache[widgets.cpu] = {}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Memory widget type
|
|
||||||
function widgets.mem(format, padding)
|
|
||||||
-- Return MEM usage values
|
|
||||||
local f = io.open('/proc/meminfo')
|
|
||||||
|
|
||||||
---- Get data
|
|
||||||
for line in f:lines() do
|
|
||||||
line = helper.splitbywhitespace(line)
|
|
||||||
|
|
||||||
if line[1] == 'MemTotal:' then
|
|
||||||
mem_total = math.floor(line[2]/1024)
|
|
||||||
elseif line[1] == 'MemFree:' then
|
|
||||||
free = math.floor(line[2]/1024)
|
|
||||||
elseif line[1] == 'Buffers:' then
|
|
||||||
buffers = math.floor(line[2]/1024)
|
|
||||||
elseif line[1] == 'Cached:' then
|
|
||||||
cached = math.floor(line[2]/1024)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
f:close()
|
|
||||||
|
|
||||||
---- Calculate percentage
|
|
||||||
mem_free=free+buffers+cached
|
|
||||||
mem_inuse=mem_total-mem_free
|
|
||||||
mem_usepercent = math.floor(mem_inuse/mem_total*100)
|
|
||||||
|
|
||||||
if padding then
|
|
||||||
if type(padding) == "table" then
|
|
||||||
mem_usepercent = helper.padd(mem_usepercent, padding[1])
|
|
||||||
mem_inuse = helper.padd(mem_inuse, padding[2])
|
|
||||||
mem_total = helper.padd(mem_total, padding[3])
|
|
||||||
mem_free = helper.padd(mem_free, padding[4])
|
|
||||||
else
|
|
||||||
mem_usepercent = helper.padd(mem_usepercent, padding)
|
|
||||||
mem_inuse = helper.padd(mem_inuse, padding)
|
|
||||||
mem_total = helper.padd(mem_total, padding)
|
|
||||||
mem_free = helper.padd(mem_free, padding)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return {mem_usepercent, mem_inuse, mem_total, mem_free}
|
|
||||||
end
|
|
||||||
|
|
||||||
widget_cache[widgets.mem] = {}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Swap widget type
|
|
||||||
function widgets.swap(format, padding)
|
|
||||||
-- Return SWAP usage values
|
|
||||||
local f = io.open('/proc/meminfo')
|
|
||||||
|
|
||||||
---- Get data
|
|
||||||
for line in f:lines() do
|
|
||||||
line = helper.splitbywhitespace(line)
|
|
||||||
|
|
||||||
if line[1] == 'SwapTotal:' then
|
|
||||||
swap_total = math.floor(line[2]/1024)
|
|
||||||
elseif line[1] == 'SwapFree:' then
|
|
||||||
free = math.floor(line[2]/1024)
|
|
||||||
elseif line[1] == 'SwapCached:' then
|
|
||||||
cached = math.floor(line[2]/1024)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
f:close()
|
|
||||||
|
|
||||||
---- Calculate percentage
|
|
||||||
swap_free=free+cached
|
|
||||||
swap_inuse=swap_total-swap_free
|
|
||||||
swap_usepercent = math.floor(swap_inuse/swap_total*100)
|
|
||||||
|
|
||||||
if padding then
|
|
||||||
if type(padding) == "table" then
|
|
||||||
swap_usepercent = helper.padd(swap_usepercent, padding[1])
|
|
||||||
swap_inuse = helper.padd(swap_inuse, padding[2])
|
|
||||||
swap_total = helper.padd(swap_total, padding[3])
|
|
||||||
swap_free = helper.padd(swap_free, padding[4])
|
|
||||||
else
|
|
||||||
swap_usepercent = helper.padd(swap_usepercent, padding)
|
|
||||||
swap_inuse = helper.padd(swap_inuse, padding)
|
|
||||||
swap_total = helper.padd(swap_total, padding)
|
|
||||||
swap_free = helper.padd(swap_free, padding)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return {swap_usepercent, swap_inuse, swap_total, swap_free}
|
|
||||||
end
|
|
||||||
|
|
||||||
widget_cache[widgets.swap] = {}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Date widget type
|
|
||||||
function widgets.date(format)
|
|
||||||
-- Get format
|
|
||||||
if format == nil then
|
|
||||||
return os.date()
|
|
||||||
else
|
|
||||||
return os.date(format)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Filesystem widget type
|
|
||||||
function widgets.fs(format, padding)
|
|
||||||
local f = io.popen('df -hP')
|
|
||||||
local args = {}
|
|
||||||
|
|
||||||
for line in f:lines() do
|
|
||||||
vars = helper.splitbywhitespace(line)
|
|
||||||
|
|
||||||
if vars[1] ~= 'Filesystem' and #vars == 6 then
|
|
||||||
vars[5] = vars[5]:gsub('%%','')
|
|
||||||
|
|
||||||
if padding then
|
|
||||||
if type(padding) == "table" then
|
|
||||||
vars[2] = helper.padd(vars[2], padding[1])
|
|
||||||
vars[3] = helper.padd(vars[3], padding[2])
|
|
||||||
vars[4] = helper.padd(vars[4], padding[3])
|
|
||||||
vars[5] = helper.padd(vars[5], padding[4])
|
|
||||||
else
|
|
||||||
vars[2] = helper.padd(vars[2], padding)
|
|
||||||
vars[3] = helper.padd(vars[3], padding)
|
|
||||||
vars[4] = helper.padd(vars[4], padding)
|
|
||||||
vars[5] = helper.padd(vars[5], padding)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
args['{'..vars[6]..' size}'] = vars[2]
|
|
||||||
args['{'..vars[6]..' used}'] = vars[3]
|
|
||||||
args['{'..vars[6]..' avail}'] = vars[4]
|
|
||||||
args['{'..vars[6]..' usep}'] = vars[5]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
f:close()
|
|
||||||
return args
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Net widget type
|
|
||||||
function widgets.net(format, padding)
|
|
||||||
local f = io.open('/proc/net/dev')
|
|
||||||
args = {}
|
|
||||||
|
|
||||||
for line in f:lines() do
|
|
||||||
line = helper.splitbywhitespace(line)
|
|
||||||
|
|
||||||
local p = line[1]:find(':')
|
|
||||||
if p ~= nil then
|
|
||||||
name = line[1]:sub(0,p-1)
|
|
||||||
line[1] = line[1]:sub(p+1)
|
|
||||||
|
|
||||||
if tonumber(line[1]) == nil then
|
|
||||||
line[1] = line[2]
|
|
||||||
line[9] = line[10]
|
|
||||||
end
|
|
||||||
|
|
||||||
if padding then
|
|
||||||
args['{'..name..' rx}'] = helper.bytes_to_string(line[1], nil, padding)
|
|
||||||
args['{'..name..' tx}'] = helper.bytes_to_string(line[9], nil, padding)
|
|
||||||
else
|
|
||||||
args['{'..name..' rx}'] = helper.bytes_to_string(line[1])
|
|
||||||
args['{'..name..' tx}'] = helper.bytes_to_string(line[9])
|
|
||||||
end
|
|
||||||
|
|
||||||
args['{'..name..' rx_b}'] = math.floor(line[1]*10)/10
|
|
||||||
args['{'..name..' tx_b}'] = math.floor(line[9]*10)/10
|
|
||||||
|
|
||||||
args['{'..name..' rx_kb}'] = math.floor(line[1]/1024*10)/10
|
|
||||||
args['{'..name..' tx_kb}'] = math.floor(line[9]/1024*10)/10
|
|
||||||
|
|
||||||
args['{'..name..' rx_mb}'] = math.floor(line[1]/1024/1024*10)/10
|
|
||||||
args['{'..name..' tx_mb}'] = math.floor(line[9]/1024/1024*10)/10
|
|
||||||
|
|
||||||
args['{'..name..' rx_gb}'] = math.floor(line[1]/1024/1024/1024*10)/10
|
|
||||||
args['{'..name..' tx_gb}'] = math.floor(line[9]/1024/1024/1024*10)/10
|
|
||||||
|
|
||||||
if nets[name] == nil then
|
|
||||||
nets[name] = {}
|
|
||||||
args['{'..name..' down}'] = 'n/a'
|
|
||||||
args['{'..name..' up}'] = 'n/a'
|
|
||||||
|
|
||||||
args['{'..name..' down_b}'] = 0
|
|
||||||
args['{'..name..' up_b}'] = 0
|
|
||||||
|
|
||||||
args['{'..name..' down_kb}'] = 0
|
|
||||||
args['{'..name..' up_kb}'] = 0
|
|
||||||
|
|
||||||
args['{'..name..' down_mb}'] = 0
|
|
||||||
args['{'..name..' up_mb}'] = 0
|
|
||||||
|
|
||||||
args['{'..name..' down_gb}'] = 0
|
|
||||||
args['{'..name..' up_gb}'] = 0
|
|
||||||
|
|
||||||
nets[name].time = os.time()
|
|
||||||
else
|
|
||||||
interval = os.time()-nets[name].time
|
|
||||||
nets[name].time = os.time()
|
|
||||||
|
|
||||||
down = (line[1]-nets[name][1])/interval
|
|
||||||
up = (line[9]-nets[name][2])/interval
|
|
||||||
|
|
||||||
if padding then
|
|
||||||
args['{'..name..' down}'] = helper.bytes_to_string(down, true, padding)
|
|
||||||
args['{'..name..' up}'] = helper.bytes_to_string(up, true, padding)
|
|
||||||
else
|
|
||||||
args['{'..name..' down}'] = helper.bytes_to_string(down, true)
|
|
||||||
args['{'..name..' up}'] = helper.bytes_to_string(up, true)
|
|
||||||
end
|
|
||||||
|
|
||||||
args['{'..name..' down_b}'] = math.floor(down*10)/10
|
|
||||||
args['{'..name..' up_b}'] = math.floor(up*10)/10
|
|
||||||
|
|
||||||
args['{'..name..' down_kb}'] = math.floor(down/1024*10)/10
|
|
||||||
args['{'..name..' up_kb}'] = math.floor(up/1024*10)/10
|
|
||||||
|
|
||||||
args['{'..name..' down_mb}'] = math.floor(down/1024/1024*10)/10
|
|
||||||
args['{'..name..' up_mb}'] = math.floor(up/1024/1024*10)/10
|
|
||||||
|
|
||||||
args['{'..name..' down_gb}'] = math.floor(down/1024/1024/1024*10)/10
|
|
||||||
args['{'..name..' up_gb}'] = math.floor(up/1024/1024/1024*10)/10
|
|
||||||
end
|
|
||||||
|
|
||||||
nets[name][1] = line[1]
|
|
||||||
nets[name][2] = line[9]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
f:close()
|
|
||||||
return args
|
|
||||||
end
|
|
||||||
widget_cache[widgets.net] = {}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Uptime widget type
|
|
||||||
function widgets.uptime(format, padding)
|
|
||||||
--Get uptime from /proc/uptime
|
|
||||||
local f = io.open("/proc/uptime")
|
|
||||||
uptime_line = f:read()
|
|
||||||
|
|
||||||
f:close()
|
|
||||||
|
|
||||||
args = {}
|
|
||||||
--/proc/uptime has the format "<up time> <idle time>"
|
|
||||||
if uptime_line:find(" ") ~= nil then
|
|
||||||
|
|
||||||
pend = uptime_line:find(" ",0,true)
|
|
||||||
|
|
||||||
uptime_line_part = uptime_line:sub(0,pend-1)
|
|
||||||
|
|
||||||
total_uptime = math.floor( tonumber(uptime_line_part) )
|
|
||||||
|
|
||||||
uptime_days = math.floor( total_uptime / (3600 * 24) )
|
|
||||||
uptime_hours = math.floor( ( total_uptime % (3600 * 24) ) / 3600 )
|
|
||||||
uptime_minutes = math.floor( ( ( total_uptime % (3600 * 24) ) % 3600 ) / 60 )
|
|
||||||
uptime_seconds = math.floor( ( ( total_uptime % (3600 * 24) ) % 3600) % 60 )
|
|
||||||
|
|
||||||
if padding then
|
|
||||||
|
|
||||||
if type(padding) == "table" then
|
|
||||||
total_uptime = helper.padd(total_uptime , padding[1])
|
|
||||||
uptime_days = helper.padd(uptime_days , padding[2])
|
|
||||||
uptime_hours = helper.padd(uptime_hours , padding[3])
|
|
||||||
uptime_minutes = helper.padd(uptime_minutes , padding[4])
|
|
||||||
uptime_seconds = helper.padd(uptime_seconds , padding[5])
|
|
||||||
else
|
|
||||||
total_uptime = helper.padd(total_uptime , padding)
|
|
||||||
uptime_days = helper.padd(uptime_days , padding)
|
|
||||||
uptime_hours = helper.padd(uptime_hours , padding)
|
|
||||||
uptime_minutes = helper.padd(uptime_minutes , padding)
|
|
||||||
uptime_seconds = helper.padd(uptime_seconds , padding)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return {total_uptime, uptime_days, uptime_hours, uptime_minutes, uptime_seconds}
|
|
||||||
|
|
||||||
end
|
|
||||||
widget_cache[widgets.uptime] = {}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- For backwards compatibility: custom function
|
|
||||||
widgets["function"] = function ()
|
|
||||||
return {}
|
|
||||||
end
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Main functions
|
|
||||||
---- {{{ Register widget
|
|
||||||
function register(widget, wtype, format, timer, field, padd)
|
|
||||||
local reg = {}
|
|
||||||
local widget = widget
|
|
||||||
|
|
||||||
-- Set properties
|
|
||||||
reg.type = wtype
|
|
||||||
reg.format = format
|
|
||||||
reg.timer = timer
|
|
||||||
reg.field = field
|
|
||||||
reg.padd = padd
|
|
||||||
reg.widget = widget
|
|
||||||
|
|
||||||
-- Update function
|
|
||||||
reg.update = function ()
|
|
||||||
update(widget, reg)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Default to timer=1
|
|
||||||
if reg.timer == nil then
|
|
||||||
reg.timer = 1
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Allow using a string widget type
|
|
||||||
if type(reg.type) == "string" then
|
|
||||||
reg.type = widgets[reg.type]
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Register reg object
|
|
||||||
regregister(reg)
|
|
||||||
|
|
||||||
-- Return reg object for reuse
|
|
||||||
return reg
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Register from reg object
|
|
||||||
function regregister(reg)
|
|
||||||
if not reg.running then
|
|
||||||
-- Put widget in table
|
|
||||||
if registered[reg.widget] == nil then
|
|
||||||
registered[reg.widget] = {}
|
|
||||||
table.insert(registered[reg.widget], reg)
|
|
||||||
else
|
|
||||||
already = false
|
|
||||||
|
|
||||||
for w, i in pairs(registered) do
|
|
||||||
if w == reg.widget then
|
|
||||||
for k,v in pairs(i) do
|
|
||||||
if v == reg then
|
|
||||||
already = true
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if already then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if not already then
|
|
||||||
table.insert(registered[reg.widget], reg)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Start timer
|
|
||||||
if reg.timer > 0 then
|
|
||||||
awful.hooks.timer.register(reg.timer, reg.update)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Initial update
|
|
||||||
reg.update()
|
|
||||||
|
|
||||||
-- Set running
|
|
||||||
reg.running = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Unregister widget
|
|
||||||
function unregister(widget, keep, reg)
|
|
||||||
if reg == nil then
|
|
||||||
for w, i in pairs(registered) do
|
|
||||||
if w == widget then
|
|
||||||
for k,v in pairs(i) do
|
|
||||||
reg = unregister(w, keep, v)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return reg
|
|
||||||
end
|
|
||||||
|
|
||||||
if not keep then
|
|
||||||
for w, i in pairs(registered) do
|
|
||||||
if w == widget then
|
|
||||||
for k,v in pairs(i) do
|
|
||||||
if v == reg then
|
|
||||||
table.remove(registered[w], k)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
awful.hooks.timer.unregister(reg.update)
|
|
||||||
|
|
||||||
reg.running = false
|
|
||||||
return reg
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Suspend wicked, halt all widget updates
|
|
||||||
function suspend()
|
|
||||||
for w, i in pairs(registered) do
|
|
||||||
for k,v in pairs(i) do
|
|
||||||
unregister(w, true, v)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Activate wicked, restart all widget updates
|
|
||||||
function activate(widget)
|
|
||||||
for w, i in pairs(registered) do
|
|
||||||
if widget == nil or w == widget then
|
|
||||||
for k,v in pairs(i) do
|
|
||||||
regregister(v)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Enable caching for a widget type
|
|
||||||
function enable_caching(widget)
|
|
||||||
if widget_cache[widget] == nil then
|
|
||||||
widget_cache[widget] = {}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
---- {{{ Update widget
|
|
||||||
function update(widget, reg, disablecache)
|
|
||||||
-- Check if there are any equal widgets
|
|
||||||
if reg == nil then
|
|
||||||
for w, i in pairs(registered) do
|
|
||||||
if w == widget then
|
|
||||||
for k,v in pairs(i) do
|
|
||||||
update(w, v, disablecache)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local t = os.time()
|
|
||||||
local data = {}
|
|
||||||
|
|
||||||
-- Check if we have output chached for this widget,
|
|
||||||
-- newer than last widget update.
|
|
||||||
if widget_cache[reg.type] ~= nil then
|
|
||||||
local c = widget_cache[reg.type]
|
|
||||||
|
|
||||||
if c.time == nil or c.time <= t-reg.timer or disablecache then
|
|
||||||
c.time = t
|
|
||||||
c.data = reg.type(reg.format, reg.padd)
|
|
||||||
end
|
|
||||||
|
|
||||||
data = c.data
|
|
||||||
else
|
|
||||||
data = reg.type(reg.format, reg.padd)
|
|
||||||
end
|
|
||||||
|
|
||||||
if type(data) == "table" then
|
|
||||||
if type(reg.format) == "string" then
|
|
||||||
data = helper.format(reg.format, data)
|
|
||||||
elseif type(reg.format) == "function" then
|
|
||||||
data = reg.format(widget, data)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if reg.field == nil then
|
|
||||||
widget.text = data
|
|
||||||
elseif widget.plot_data_add ~= nil then
|
|
||||||
widget:plot_data_add(reg.field, tonumber(data))
|
|
||||||
elseif widget.bar_data_add ~= nil then
|
|
||||||
widget:bar_data_add(reg.field, tonumber(data))
|
|
||||||
end
|
|
||||||
return data
|
|
||||||
end
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- vim: set filetype=lua fdm=marker tabstop=4 shiftwidth=4 nu:
|
|
141
zenburn.lua
|
@ -1,141 +0,0 @@
|
||||||
-------------------------------
|
|
||||||
-- "Zenburn" awesome theme --
|
|
||||||
-- By Adrian C. (anrxc) --
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
-- {{{ Main
|
|
||||||
theme = {}
|
|
||||||
theme.confdir = awful.util.getdir("config")
|
|
||||||
theme.wallpaper_cmd = { "/usr/bin/nitrogen --restore" }
|
|
||||||
--theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/zenburn/zenburn-background.png" }
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
|
|
||||||
-- {{{ Styles
|
|
||||||
theme.font = "Profont 8"
|
|
||||||
|
|
||||||
-- {{{ Colors
|
|
||||||
theme.fg_normal = "#DCDCCC"
|
|
||||||
theme.fg_focus = "#F0DFAF"
|
|
||||||
theme.fg_urgent = "#CC9393"
|
|
||||||
theme.bg_normal = "#3F3F3F"
|
|
||||||
theme.bg_focus = "#1E2320"
|
|
||||||
theme.bg_urgent = "#ff0000"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Borders
|
|
||||||
theme.border_width = "1"
|
|
||||||
theme.border_normal = "#3F3F3F"
|
|
||||||
theme.border_focus = "#6F6F6F"
|
|
||||||
theme.border_marked = "#CC9393"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Titlebars
|
|
||||||
theme.titlebar_bg_focus = "#3F3F3F"
|
|
||||||
theme.titlebar_bg_normal = "#3F3F3F"
|
|
||||||
-- theme.titlebar_[normal|focus]
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Widgets
|
|
||||||
theme.fg_widget = "#AECF96"
|
|
||||||
theme.fg_center_widget = "#88A175"
|
|
||||||
theme.fg_end_widget = "#FF5656"
|
|
||||||
theme.fg_off_widget = "#494B4F"
|
|
||||||
theme.fg_netup_widget = "#7F9F7F"
|
|
||||||
theme.fg_netdn_widget = "#CC9393"
|
|
||||||
theme.bg_widget = "#3F3F3F"
|
|
||||||
theme.border_widget = "#3F3F3F"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Mouse finder
|
|
||||||
theme.mouse_finder_color = "#CC9393"
|
|
||||||
-- theme.mouse_finder_[timeout|animate_timeout|radius|factor]
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Tooltips
|
|
||||||
-- theme.tooltip_[font|opacity|fg_color|bg_color|border_width|border_color]
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Taglist and Tasklist
|
|
||||||
-- theme.[taglist|tasklist]_[bg|fg]_[focus|urgent]
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Menu
|
|
||||||
-- theme.menu_[bg|fg]_[normal|focus]
|
|
||||||
-- theme.menu_[height|width|border_color|border_width]
|
|
||||||
-- }}}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
|
|
||||||
-- {{{ Icons
|
|
||||||
--
|
|
||||||
-- {{{ Taglist icons
|
|
||||||
theme.taglist_squares_sel = theme.confdir .. "/icons/taglist/squarefz.png"
|
|
||||||
theme.taglist_squares_unsel = theme.confdir .. "/icons/taglist/squareza.png"
|
|
||||||
--theme.taglist_squares_resize = "false"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Misc icons
|
|
||||||
--theme.awesome_icon = theme.confdir .. "/icons/awesome.png"
|
|
||||||
--theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png"
|
|
||||||
--theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/floatingw.png"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Layout icons
|
|
||||||
theme.layout_tile = theme.confdir .. "/icons/layouts/tile.png"
|
|
||||||
theme.layout_tileleft = theme.confdir .. "/icons/layouts/tileleft.png"
|
|
||||||
theme.layout_tilebottom = theme.confdir .. "/icons/layouts/tilebottom.png"
|
|
||||||
theme.layout_tiletop = theme.confdir .. "/icons/layouts/tiletop.png"
|
|
||||||
theme.layout_fairv = theme.confdir .. "/icons/layouts/fairv.png"
|
|
||||||
theme.layout_fairh = theme.confdir .. "/icons/layouts/fairh.png"
|
|
||||||
theme.layout_spiral = theme.confdir .. "/icons/layouts/spiral.png"
|
|
||||||
theme.layout_dwindle = theme.confdir .. "/icons/layouts/dwindle.png"
|
|
||||||
theme.layout_max = theme.confdir .. "/icons/layouts/max.png"
|
|
||||||
theme.layout_fullscreen = theme.confdir .. "/icons/layouts/fullscreen.png"
|
|
||||||
theme.layout_magnifier = theme.confdir .. "/icons/layouts/magnifier.png"
|
|
||||||
theme.layout_floating = theme.confdir .. "/icons/layouts/floating.png"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Widget icons
|
|
||||||
theme.widget_cpu = theme.confdir .. "/icons/cpu.png"
|
|
||||||
theme.widget_bat = theme.confdir .. "/icons/bat.png"
|
|
||||||
theme.widget_mem = theme.confdir .. "/icons/mem.png"
|
|
||||||
theme.widget_fs = theme.confdir .. "/icons/disk.png"
|
|
||||||
theme.widget_net = theme.confdir .. "/icons/down.png"
|
|
||||||
theme.widget_netup = theme.confdir .. "/icons/up.png"
|
|
||||||
theme.widget_mail = theme.confdir .. "/icons/mail.png"
|
|
||||||
theme.widget_vol = theme.confdir .. "/icons/vol.png"
|
|
||||||
theme.widget_org = theme.confdir .. "/icons/cal.png"
|
|
||||||
theme.widget_date = theme.confdir .. "/icons/time.png"
|
|
||||||
theme.widget_crypto = theme.confdir .. "/icons/crypto.png"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
-- {{{ Titlebar icons
|
|
||||||
theme.titlebar_close_button_focus = theme.confdir .. "/icons/titlebar/close_focus.png"
|
|
||||||
theme.titlebar_close_button_normal = theme.confdir .. "/icons/titlebar/close_normal.png"
|
|
||||||
|
|
||||||
theme.titlebar_ontop_button_focus_active = theme.confdir .. "/icons/titlebar/ontop_focus_active.png"
|
|
||||||
theme.titlebar_ontop_button_normal_active = theme.confdir .. "/icons/titlebar/ontop_normal_active.png"
|
|
||||||
theme.titlebar_ontop_button_focus_inactive = theme.confdir .. "/icons/titlebar/ontop_focus_inactive.png"
|
|
||||||
theme.titlebar_ontop_button_normal_inactive = theme.confdir .. "/icons/titlebar/ontop_normal_inactive.png"
|
|
||||||
|
|
||||||
theme.titlebar_sticky_button_focus_active = theme.confdir .. "/icons/titlebar/sticky_focus_active.png"
|
|
||||||
theme.titlebar_sticky_button_normal_active = theme.confdir .. "/icons/titlebar/sticky_normal_active.png"
|
|
||||||
theme.titlebar_sticky_button_focus_inactive = theme.confdir .. "/icons/titlebar/sticky_focus_inactive.png"
|
|
||||||
theme.titlebar_sticky_button_normal_inactive = theme.confdir .. "/icons/titlebar/sticky_normal_inactive.png"
|
|
||||||
|
|
||||||
theme.titlebar_floating_button_focus_active = theme.confdir .. "/icons/titlebar/floating_focus_active.png"
|
|
||||||
theme.titlebar_floating_button_normal_active = theme.confdir .. "/icons/titlebar/floating_normal_active.png"
|
|
||||||
theme.titlebar_floating_button_focus_inactive = theme.confdir .. "/icons/titlebar/floating_focus_inactive.png"
|
|
||||||
theme.titlebar_floating_button_normal_inactive = theme.confdir .. "/icons/titlebar/floating_normal_inactive.png"
|
|
||||||
|
|
||||||
theme.titlebar_maximized_button_focus_active = theme.confdir .. "/icons/titlebar/maximized_focus_active.png"
|
|
||||||
theme.titlebar_maximized_button_normal_active = theme.confdir .. "/icons/titlebar/maximized_normal_active.png"
|
|
||||||
theme.titlebar_maximized_button_focus_inactive = theme.confdir .. "/icons/titlebar/maximized_focus_inactive.png"
|
|
||||||
theme.titlebar_maximized_button_normal_inactive = theme.confdir .. "/icons/titlebar/maximized_normal_inactive.png"
|
|
||||||
-- }}}
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
|
|
||||||
return theme
|
|
|
@ -8,19 +8,19 @@
|
||||||
|
|
||||||
-- {{{ Main
|
-- {{{ Main
|
||||||
theme = {}
|
theme = {}
|
||||||
theme.wallpaper_cmd = { "awsetbg -a /home/crater2150/.config/awesome/wallpaper" }
|
theme.wallpaper_cmd = { "nitrogen --restore" }
|
||||||
-- }}}
|
-- }}}
|
||||||
|
|
||||||
-- {{{ Styles
|
-- {{{ Styles
|
||||||
theme.font = "sans 8"
|
theme.font = "sans 8"
|
||||||
|
|
||||||
-- {{{ Colors
|
-- {{{ Colors
|
||||||
theme.fg_normal = "#DCDCCC"
|
theme.fg_normal = "#DCDCDC"
|
||||||
theme.fg_focus = "#F0DFAF"
|
theme.fg_focus = "#F0DFAF"
|
||||||
theme.fg_urgent = "#CC9393"
|
theme.fg_urgent = "#CC9393"
|
||||||
theme.bg_normal = "#3F3F3F"
|
theme.bg_normal = "#121212"
|
||||||
theme.bg_focus = "#1E2320"
|
theme.bg_focus = "#3F3F3F"
|
||||||
theme.bg_urgent = "#3F3F3F"
|
theme.bg_urgent = "#DA4E4E"
|
||||||
-- }}}
|
-- }}}
|
||||||
|
|
||||||
-- {{{ Borders
|
-- {{{ Borders
|
||||||
|
@ -83,12 +83,12 @@ theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/float
|
||||||
-- }}}
|
-- }}}
|
||||||
|
|
||||||
-- {{{ Layout
|
-- {{{ Layout
|
||||||
theme.layout_tile = "/usr/share/awesome/themes/zenburn/layouts/tile.png"
|
theme.layout_tiletop = "/usr/share/awesome/themes/zenburn/layouts/tile.png"
|
||||||
theme.layout_tileleft = "/usr/share/awesome/themes/zenburn/layouts/tileleft.png"
|
theme.layout_tilebottom = "/usr/share/awesome/themes/zenburn/layouts/tileleft.png"
|
||||||
theme.layout_tilebottom = "/usr/share/awesome/themes/zenburn/layouts/tilebottom.png"
|
theme.layout_tile = "/usr/share/awesome/themes/zenburn/layouts/tilebottom.png"
|
||||||
theme.layout_tiletop = "/usr/share/awesome/themes/zenburn/layouts/tiletop.png"
|
theme.layout_tileleft = "/usr/share/awesome/themes/zenburn/layouts/tiletop.png"
|
||||||
theme.layout_fairv = "/usr/share/awesome/themes/zenburn/layouts/fairv.png"
|
theme.layout_fairh = "/usr/share/awesome/themes/zenburn/layouts/fairv.png"
|
||||||
theme.layout_fairh = "/usr/share/awesome/themes/zenburn/layouts/fairh.png"
|
theme.layout_fairv = "/usr/share/awesome/themes/zenburn/layouts/fairh.png"
|
||||||
theme.layout_spiral = "/usr/share/awesome/themes/zenburn/layouts/spiral.png"
|
theme.layout_spiral = "/usr/share/awesome/themes/zenburn/layouts/spiral.png"
|
||||||
theme.layout_dwindle = "/usr/share/awesome/themes/zenburn/layouts/dwindle.png"
|
theme.layout_dwindle = "/usr/share/awesome/themes/zenburn/layouts/dwindle.png"
|
||||||
theme.layout_max = "/usr/share/awesome/themes/zenburn/layouts/max.png"
|
theme.layout_max = "/usr/share/awesome/themes/zenburn/layouts/max.png"
|
||||||
|
|
Before Width: | Height: | Size: 370 B After Width: | Height: | Size: 370 B |
Before Width: | Height: | Size: 339 B After Width: | Height: | Size: 339 B |
Before Width: | Height: | Size: 361 B After Width: | Height: | Size: 361 B |
Before Width: | Height: | Size: 328 B After Width: | Height: | Size: 328 B |
Before Width: | Height: | Size: 337 B After Width: | Height: | Size: 337 B |
Before Width: | Height: | Size: 369 B After Width: | Height: | Size: 369 B |
Before Width: | Height: | Size: 349 B After Width: | Height: | Size: 349 B |
Before Width: | Height: | Size: 333 B After Width: | Height: | Size: 333 B |
Before Width: | Height: | Size: 349 B After Width: | Height: | Size: 349 B |
Before Width: | Height: | Size: 334 B After Width: | Height: | Size: 334 B |
Before Width: | Height: | Size: 330 B After Width: | Height: | Size: 330 B |
Before Width: | Height: | Size: 361 B After Width: | Height: | Size: 361 B |
Before Width: | Height: | Size: 329 B After Width: | Height: | Size: 329 B |