summaryrefslogtreecommitdiffstats
path: root/.config
diff options
context:
space:
mode:
authorGravatar Tom Willemsen2012-10-03 02:47:17 +0200
committerGravatar Tom Willemsen2012-10-03 02:47:17 +0200
commitb4e8c45e18cec74210e8d3d5c0d46ebcc41e5024 (patch)
tree263d4290d65a86a07db692e5e6098d5e08a25fc8 /.config
parentdf6be906492b103c56b12917874a7a2b3ae911ee (diff)
downloaddotfiles-b4e8c45e18cec74210e8d3d5c0d46ebcc41e5024.tar.gz
dotfiles-b4e8c45e18cec74210e8d3d5c0d46ebcc41e5024.zip
.config/awesome/rc.lua
Diffstat (limited to '.config')
-rw-r--r--.config/awesome/ext.lua67
-rw-r--r--.config/awesome/oni.lua73
-rw-r--r--.config/awesome/rc.lua145
3 files changed, 154 insertions, 131 deletions
diff --git a/.config/awesome/ext.lua b/.config/awesome/ext.lua
new file mode 100644
index 0000000..d564867
--- /dev/null
+++ b/.config/awesome/ext.lua
@@ -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
diff --git a/.config/awesome/oni.lua b/.config/awesome/oni.lua
new file mode 100644
index 0000000..7cc5df1
--- /dev/null
+++ b/.config/awesome/oni.lua
@@ -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
diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua
index 5e07a09..b83de13 100644
--- a/.config/awesome/rc.lua
+++ b/.config/awesome/rc.lua
@@ -4,12 +4,9 @@ require("awful.rules")
require("beautiful")
require("bowl")
require("keychain")
-require("lfs")
require("naughty")
-
-oni = { } -- Container for custom functions.
-
-oni.maildirfmt = "/home/slash/documents/mail/%s/inbox/new/"
+require("ext")
+require("oni")
--- Error handling
-- Check if awesome encountered an error during startup and fell back to
@@ -35,111 +32,6 @@ do
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
-- Themes define colours, icons, and wallpapers
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({ }, "b", function () oni.focus_raise("left") end),
sub({ }, "n", function () oni.focus_raise("down") 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) }),
+ sub({ }, "p", function () oni.focus_raise("up") end) }),
awful.key({ "Control", "Mod1" }, "l",
function () awful.util.spawn("i3lock -c 000000") end),
- awful.key({ modkey, }, "Left", awful.tag.viewprev ),
- awful.key({ modkey, }, "Right", awful.tag.viewnext ),
- awful.key({ modkey, }, "Escape", awful.tag.history.restore),
-
- awful.key({ modkey, }, "w", function () mymainmenu:show({keygrabber=true}) 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, }, "Right", awful.tag.viewnext ),
+ awful.key({ modkey, }, "Escape", awful.tag.history.restore),
+
+ -- awful.key({ modkey, }, "w", function () mymainmenu:show({keygrabber=true}) end),
-- Layout manipulation
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),