.config/awesome/rc.lua
This commit is contained in:
parent
df6be90649
commit
b4e8c45e18
3 changed files with 153 additions and 130 deletions
67
.config/awesome/ext.lua
Normal file
67
.config/awesome/ext.lua
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
local client=client
|
||||||
|
local awful=awful
|
||||||
|
local pairs=pairs
|
||||||
|
local table=table
|
||||||
|
|
||||||
|
module("ext")
|
||||||
|
|
||||||
|
-- Returns true if all pairs in table1 are present in table2
|
||||||
|
function match(table1, table2)
|
||||||
|
for k, v in pairs(table1) do
|
||||||
|
if table[k] ~= v and not table2[k]:find(v) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
--- 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
|
||||||
|
function run_or_raise(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 match(properties, c) then
|
||||||
|
n = n + 1
|
||||||
|
matched_clients[n] = c
|
||||||
|
|
||||||
|
if n == 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()
|
||||||
|
awful.screen.focus(c.screen)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
awful.util.spawn(cmd)
|
||||||
|
end
|
73
.config/awesome/oni.lua
Normal file
73
.config/awesome/oni.lua
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
local awful = awful
|
||||||
|
local beautiful = beautiful
|
||||||
|
local client = client
|
||||||
|
local ext = require("ext")
|
||||||
|
local lfs = require("lfs")
|
||||||
|
local pairs = pairs
|
||||||
|
local string = string
|
||||||
|
local table = table
|
||||||
|
local widget = widget
|
||||||
|
|
||||||
|
module("oni")
|
||||||
|
|
||||||
|
local maildirfmt = "/home/slash/documents/mail/%s/inbox/new/"
|
||||||
|
|
||||||
|
function mailcount(account)
|
||||||
|
local i = 0
|
||||||
|
local dir = string.format(maildirfmt, account)
|
||||||
|
|
||||||
|
for file in lfs.dir(dir) do
|
||||||
|
if file ~= "." and file ~= ".." then
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return i
|
||||||
|
end
|
||||||
|
|
||||||
|
local function showmail(name)
|
||||||
|
awful.util.spawn("emacsclient -e '(oni:view-mail \"" .. name .. "\")'")
|
||||||
|
end
|
||||||
|
|
||||||
|
function mailcount_widgets(label, account, name)
|
||||||
|
widgets = {}
|
||||||
|
widgets.label = widget({ type = "textbox" })
|
||||||
|
widgets.label.text = string.format(" %s: ", label)
|
||||||
|
widgets.count = widget({ type = "textbox" })
|
||||||
|
widgets.count.text = string.format(" %d ", mailcount(account))
|
||||||
|
widgets.count.bg = beautiful.bg_focus
|
||||||
|
widgets.count:buttons(
|
||||||
|
awful.util.table.join(
|
||||||
|
awful.button({ }, 1, function (c) showmail(name) end)))
|
||||||
|
|
||||||
|
return widgets
|
||||||
|
end
|
||||||
|
|
||||||
|
function focus_raise(direction)
|
||||||
|
awful.client.focus.bydirection(direction)
|
||||||
|
if client.focus then client.focus:raise() end
|
||||||
|
end
|
||||||
|
|
||||||
|
function ror_browser()
|
||||||
|
ext.run_or_raise("conkeror", { class = "Conkeror" })
|
||||||
|
end
|
||||||
|
|
||||||
|
function ror_editor()
|
||||||
|
ext.run_or_raise("emacsclient -c -a emacs", { class = "Emacs" })
|
||||||
|
end
|
||||||
|
|
||||||
|
function ror_term()
|
||||||
|
ext.run_or_raise("urxvt", { class = "URxvt" })
|
||||||
|
end
|
||||||
|
|
||||||
|
function run_browser()
|
||||||
|
awful.util.spawn("conkeror")
|
||||||
|
end
|
||||||
|
|
||||||
|
function run_editor()
|
||||||
|
awful.util.spawn("emacsclient -c -a emacs")
|
||||||
|
end
|
||||||
|
|
||||||
|
function run_term()
|
||||||
|
awful.util.spawn("urxvt")
|
||||||
|
end
|
|
@ -4,12 +4,9 @@ require("awful.rules")
|
||||||
require("beautiful")
|
require("beautiful")
|
||||||
require("bowl")
|
require("bowl")
|
||||||
require("keychain")
|
require("keychain")
|
||||||
require("lfs")
|
|
||||||
require("naughty")
|
require("naughty")
|
||||||
|
require("ext")
|
||||||
oni = { } -- Container for custom functions.
|
require("oni")
|
||||||
|
|
||||||
oni.maildirfmt = "/home/slash/documents/mail/%s/inbox/new/"
|
|
||||||
|
|
||||||
--- Error handling
|
--- Error handling
|
||||||
-- Check if awesome encountered an error during startup and fell back to
|
-- Check if awesome encountered an error during startup and fell back to
|
||||||
|
@ -35,111 +32,6 @@ do
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Functions
|
|
||||||
function oni.focus_raise(direction)
|
|
||||||
awful.client.focus.bydirection(direction)
|
|
||||||
if client.focus then client.focus:raise() end
|
|
||||||
end
|
|
||||||
|
|
||||||
function oni.mailcount(account)
|
|
||||||
local i = 0
|
|
||||||
local dir = string.format(oni.maildirfmt, account)
|
|
||||||
|
|
||||||
for file in lfs.dir(dir) do
|
|
||||||
if file ~= "." and file ~= ".." then
|
|
||||||
i = i + 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return i
|
|
||||||
end
|
|
||||||
|
|
||||||
function oni.mailcount_text()
|
|
||||||
return string.format(" ryu: %d aet: %d gmail: %d 9f: %d --",
|
|
||||||
oni.mailcount("ryuslash.org"),
|
|
||||||
oni.mailcount("aethon"),
|
|
||||||
oni.mailcount("gmail"),
|
|
||||||
oni.mailcount("ninthfloor"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function oni.mailcount_widgets(label, account, name)
|
|
||||||
widgets = {}
|
|
||||||
widgets.label = widget({ type = "textbox" })
|
|
||||||
widgets.label.text = string.format(" %s: ", label)
|
|
||||||
widgets.count = widget({ type = "textbox" })
|
|
||||||
widgets.count.text = string.format(" %d ", oni.mailcount(account))
|
|
||||||
widgets.count.bg = beautiful.bg_focus
|
|
||||||
widgets.count:buttons(
|
|
||||||
awful.util.table.join(
|
|
||||||
awful.button({ }, 1,
|
|
||||||
function (c)
|
|
||||||
awful.util.spawn("emacsclient -e '(oni:view-mail \"" .. name .. "\")'")
|
|
||||||
end)))
|
|
||||||
|
|
||||||
return widgets
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Returns true if all pairs in table1 are present in table2
|
|
||||||
function oni.match(table1, table2)
|
|
||||||
for k, v in pairs(table1) do
|
|
||||||
if table[k] ~= v and not table2[k]:find(v) then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
--- 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
|
|
||||||
function oni.run_or_raise(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 oni.match(properties, c) then
|
|
||||||
n = n + 1
|
|
||||||
matched_clients[n] = c
|
|
||||||
|
|
||||||
if n == 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()
|
|
||||||
awful.screen.focus(c.screen)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
awful.util.spawn(cmd)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- {{{ Variable definitions
|
-- {{{ Variable definitions
|
||||||
-- Themes define colours, icons, and wallpapers
|
-- Themes define colours, icons, and wallpapers
|
||||||
beautiful.init("/home/slash/.config/awesome/themes/custom/theme.lua")
|
beautiful.init("/home/slash/.config/awesome/themes/custom/theme.lua")
|
||||||
|
@ -347,29 +239,20 @@ globalkeys = awful.util.table.join(
|
||||||
sub({ }, "f", function () oni.focus_raise("right") end),
|
sub({ }, "f", function () oni.focus_raise("right") end),
|
||||||
sub({ }, "b", function () oni.focus_raise("left") end),
|
sub({ }, "b", function () oni.focus_raise("left") end),
|
||||||
sub({ }, "n", function () oni.focus_raise("down") end),
|
sub({ }, "n", function () oni.focus_raise("down") end),
|
||||||
sub({ }, "p", function () oni.focus_raise("up") end),
|
sub({ }, "p", function () oni.focus_raise("up") end) }),
|
||||||
sub({ }, "e",
|
|
||||||
function () oni.run_or_raise("emacsclient -c -a emacs",
|
|
||||||
{ class = "Emacs" }) end),
|
|
||||||
sub({ "Shift", }, "e",
|
|
||||||
function () awful.util.spawn("emacsclient -c -a emacs") end),
|
|
||||||
sub({ }, "c",
|
|
||||||
function () oni.run_or_raise("urxvt",
|
|
||||||
{ class = "URxvt" }) end),
|
|
||||||
sub({ "Shift", }, "c",
|
|
||||||
function () awful.util.spawn("urxvt") end),
|
|
||||||
sub({ }, "w",
|
|
||||||
function () oni.run_or_raise("conkeror",
|
|
||||||
{ class = "Conkeror" }) end),
|
|
||||||
sub({ "Shift", }, "w",
|
|
||||||
function () awful.util.spawn("conkeror") end) }),
|
|
||||||
awful.key({ "Control", "Mod1" }, "l",
|
awful.key({ "Control", "Mod1" }, "l",
|
||||||
function () awful.util.spawn("i3lock -c 000000") end),
|
function () awful.util.spawn("i3lock -c 000000") end),
|
||||||
|
awful.key({ "Mod4", }, "c", oni.ror_term),
|
||||||
|
awful.key({ "Mod4", "Shift" }, "c", oni.run_term),
|
||||||
|
awful.key({ "Mod4", }, "e", oni.ror_editor),
|
||||||
|
awful.key({ "Mod4", "Shift" }, "e", oni.run_editor),
|
||||||
|
awful.key({ "Mod4", }, "w", oni.ror_browser),
|
||||||
|
awful.key({ "Mod4", "Shift" }, "w", oni.run_browser),
|
||||||
awful.key({ modkey, }, "Left", awful.tag.viewprev ),
|
awful.key({ modkey, }, "Left", awful.tag.viewprev ),
|
||||||
awful.key({ modkey, }, "Right", awful.tag.viewnext ),
|
awful.key({ modkey, }, "Right", awful.tag.viewnext ),
|
||||||
awful.key({ modkey, }, "Escape", awful.tag.history.restore),
|
awful.key({ modkey, }, "Escape", awful.tag.history.restore),
|
||||||
|
|
||||||
awful.key({ modkey, }, "w", function () mymainmenu:show({keygrabber=true}) end),
|
-- awful.key({ modkey, }, "w", function () mymainmenu:show({keygrabber=true}) end),
|
||||||
|
|
||||||
-- Layout manipulation
|
-- Layout manipulation
|
||||||
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),
|
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),
|
||||||
|
|
Loading…
Reference in a new issue