]> git.madduck.net Git - etc/awesome.git/blobdiff - .config/awesome/rc.lua

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

add awsetbg to PATH
[etc/awesome.git] / .config / awesome / rc.lua
index 46f6d57deb295c081b6f236e41af4429023a1f6e..232909528e5f01395ba1fadc526ca0dd1752ac99 100644 (file)
@@ -9,8 +9,10 @@ require("beautiful")
 -- This is a file path to a theme file which will defines colors.
 theme_path = "/home/madduck/code/awesome/share/awesome/themes/default"
 
--- This is used later as the default terminal to run.
+-- This is used later as the default terminal and editor to run.
 terminal = "x-terminal-emulator"
+editor = "sensible-editor"
+editor_cmd = terminal .. " -e " .. editor
 
 -- Default modkey.
 -- Usually, Mod4 is the key with a logo between Control and Alt.
@@ -65,7 +67,8 @@ maxapps =
     ["Navigator"] = true,
     -- jpilot is -v
     ["-v"] = true,
-    ["Xpdf"] = true
+    ["Xpdf"] = true,
+    ["gscan2pdf"] = true
 }
 
 -- Applications to be moved to a pre-defined tag by class or instance.
@@ -113,54 +116,80 @@ for s = 1, screen.count() do
 end
 -- }}}
 
--- {{{ Statusbar
--- Create a taglist widget
-mytaglist = widget({ type = "taglist", name = "mytaglist" })
-mytaglist:buttons({
-    button({ }, 1, function (object, tag) awful.tag.viewonly(tag) end),
-    button({ modkey }, 1, function (object, tag) awful.client.movetotag(tag) end),
-    button({ }, 3, function (object, tag) tag.selected = not tag.selected end),
-    button({ modkey }, 3, function (object, tag) awful.client.toggletag(tag) end),
-    button({ }, 4, awful.tag.viewnext),
-    button({ }, 5, awful.tag.viewprev)
-})
-mytaglist.label = awful.widget.taglist.label.all
-
--- Create a tasklist widget
-mytasklist = widget({ type = "tasklist", name = "mytasklist" })
-mytasklist:buttons({
-    button({ }, 1, function (object, c) client.focus = c; c:raise() end),
-    button({ }, 4, function () awful.client.focusbyidx(1) end),
-    button({ }, 5, function () awful.client.focusbyidx(-1) end)
-})
-mytasklist.label = awful.widget.tasklist.label.currenttags
-
+-- {{{ Wibox
 -- Create a textbox widget
-mytimebox = widget({ type = "textbox", name = "mytimebox", align = "right" })
-mybatterybox = widget({ type = "textbox", name = "mybatterybox", align = "right" })
-mypromptbox = widget({ type = "textbox", name = "mypromptbox", align = "left" })
+mytextbox = widget({ type = "textbox", name = "mytextbox", align = "right" })
+-- Set the default text in textbox
+mytextbox.text = "<b><small> " .. AWESOME_RELEASE .. " </small></b>"
+
+-- 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 = {
+   {"awesome", myawesomemenu, "/home/madduck/code/awesome/share/awesome/icons/awesome16.png" },
+   {"open terminal", terminal }
+}
 
--- Create a laucher widget
 mylauncher = awful.widget.launcher({ name = "mylauncher",
                                      image = "/home/madduck/code/awesome/share/awesome/icons/awesome16.png",
-                                     command = terminal .. " -e man awesome"})
+                                     menu = { id="mymainmenu", items=mymainmenu } })
 
 -- Create a systray
 mysystray = widget({ type = "systray", name = "mysystray", align = "right" })
 
--- Create an iconbox widget which will contains an icon indicating which layout we're using.
--- We need one layoutbox per screen.
+-- Create textbox widgets
+mytimebox = widget({ type = "textbox", name = "mytimebox", align = "right" })
+mybatterybox = widget({ type = "textbox", name = "mybatterybox", 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) }
+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
     mylayoutbox[s] = widget({ type = "imagebox", name = "mylayoutbox", align = "right" })
-    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)
-    })
-    mylayoutbox[s].image = image("/home/madduck/code/awesome/share/awesome/icons/layouts/tilew.png")
+    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)
+
+    -- 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 = { mytaglist[s],
+                           mytasklist[s],
+                           mypromptbox[s],
+                           mybatterybox,
+                           mytimebox,
+                           mylayoutbox[s],
+                           s == screen.count() and mysystray or nil }
+    mywibox[s].screen = s
 end
+-- }}}
 
 --Battery widget
 batterywidget = widget({ type = 'progressbar', name = 'batterywidget' })
@@ -182,29 +211,10 @@ batterywidget:bar_properties_set('bat', {
 })
 -- }}}
 
--- Create a statusbar for each screen and add it
-mystatusbar = {}
-for s = 1, screen.count() do
-    mystatusbar[s] = wibox({ position = "top", name = "mystatusbar" .. s,
-                             fg = beautiful.fg_normal, bg = beautiful.bg_normal })
-    -- Add widgets to the statusbar - order matters
-    mystatusbar[s]:widgets({
-        mytaglist,
-        mytasklist,
-        mypromptbox,
---        batterywidget,
---        mybatterybox,
-        mytimebox,
-        mylayoutbox[s],
-        s == screen.count() and mysystray or nil
-    })
-    mystatusbar[s].screen = s
-end
--- }}}
 
 -- {{{ Mouse bindings
 awesome.buttons({
-    button({ }, 3, function () awful.spawn(terminal) end),
+    button({ }, 3, function () awful.menu.new({ id="mymainmenu", items=mymainmenu }) end),
     button({ }, 4, awful.tag.viewnext),
     button({ }, 5, awful.tag.viewprev)
 })
@@ -257,17 +267,20 @@ keybinding({ modkey }, "Right", awful.tag.viewnext):add()
 keybinding({ modkey }, "Escape", awful.tag.history.restore):add()
 
 -- Standard program
-keybinding({ modkey }, "Return", function () awful.spawn(terminal) end):add()
+keybinding({ modkey }, "Return", function () awful.util.spawn(terminal) end):add()
 
-keybinding({ modkey, "Control" }, "r", awesome.restart):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()
 
 -- Client manipulation
 keybinding({ modkey }, "m", awful.client.maximize):add()
 keybinding({ modkey }, "f", function () client.focus.fullscreen = not client.focus.fullscreen end):add()
 keybinding({ modkey, "Shift" }, "c", function () client.focus:kill() end):add()
-keybinding({ modkey }, "j", function () awful.client.focusbyidx(1); client.focus:raise() end):add()
-keybinding({ modkey }, "k", function () awful.client.focusbyidx(-1);  client.focus:raise() end):add()
+keybinding({ modkey }, "j", function () awful.client.focus.byidx(1); client.focus:raise() end):add()
+keybinding({ modkey }, "k", function () awful.client.focus.byidx(-1);  client.focus:raise() end):add()
 keybinding({ modkey, "Shift" }, "j", function () awful.client.swap(1) end):add()
 keybinding({ modkey, "Shift" }, "k", function () awful.client.swap(-1) end):add()
 keybinding({ modkey, "Control" }, "j", function () awful.screen.focus(1) end):add()
@@ -291,24 +304,28 @@ keybinding({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -
 
 -- Prompt
 keybinding({ modkey }, "F1", function ()
-                                 awful.prompt.run({ prompt = "Run: " }, mypromptbox, awful.spawn, awful.completion.bash,
-os.getenv("HOME") .. "/.cache/awesome/history") end):add()
+                                 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, awful.eval, awful.prompt.bash,
-os.getenv("HOME") .. "/.cache/awesome/history_eval") end):add()
+                                 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 ()
-                                        if mypromptbox.text then
-                                            mypromptbox.text = nil
+                                        local s = mouse.screen
+                                        if mypromptbox[s].text then
+                                            mypromptbox[s].text = nil
                                         else
-                                            mypromptbox.text = nil
+                                            mypromptbox[s].text = nil
                                             if client.focus.class then
-                                                mypromptbox.text = "Class: " .. client.focus.class .. " "
+                                                mypromptbox[s].text = "Class: " .. client.focus.class .. " "
                                             end
                                             if client.focus.instance then
-                                                mypromptbox.text = mypromptbox.text .. "Instance: ".. client.focus.instance .. " "
+                                                mypromptbox[s].text = mypromptbox[s].text .. "Instance: ".. client.focus.instance .. " "
                                             end
                                             if client.focus.role then
-                                                mypromptbox.text = mypromptbox.text .. "Role: ".. client.focus.role
+                                                mypromptbox[s].text = mypromptbox[s].text .. "Role: ".. client.focus.role
                                             end
                                         end
                                     end):add()
@@ -393,13 +410,13 @@ awful.hooks.marked.register(function (c)
     c.border_color = beautiful.border_marked
 end)
 
--- Hook function to execute when unmarking a client
+-- 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 is over a client.
-awful.hooks.mouse_over.register(function (c)
+-- 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) ~= "magnifier"
         and awful.client.focus.filter(c) then
@@ -454,7 +471,7 @@ awful.hooks.manage.register(function (c)
     -- 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.              |      if maxapps[inst] or maxapps[cls] then                                                              
+    -- Honor size hints: if you want to drop the gaps between windows, set this to false.
     c.honorsizehints = true
 
     -- Maximise some
@@ -463,7 +480,7 @@ awful.hooks.manage.register(function (c)
     end
 end)
 
--- Hook function to execute when arranging the screen
+-- Hook function to execute when arranging the screen.
 -- (tag switch, new client, etc)
 awful.hooks.arrange.register(function (screen)
     local layout = awful.layout.get(screen)
@@ -483,7 +500,7 @@ awful.hooks.arrange.register(function (screen)
     -- Uncomment if you want mouse warping
     --[[
     if client.focus then
-        local c_c = client.focus:coords()
+        local c_c = client.focus:geometry()
         local m_c = mouse.coords()
 
         if m_c.x < c_c.x or m_c.x >= c_c.x + c_c.width or
@@ -521,7 +538,7 @@ function get_acpibatt()
     local s = f:read('*l')
     f:close()
     if not s then
-      return laststring;
+      return '-';
     end
 
     -- Battery 0: Discharging, 89%, 00:02:14 remaining
@@ -544,7 +561,7 @@ function get_acpibatt()
     elseif status == 'Discarching' then
       status = 'd';
     else
-      status = '';
+      status = '-';
     end
 
     return percent; -- .. ' (' .. status .. ')'; -- .. ' ' .. time .. ' left';
@@ -576,27 +593,27 @@ awful.hooks.timer.register(120, hook_battery)
 cmdmodkey = "Mod3"
 
 -- xmms2 & sound
-keybinding({ cmdmodkey }, "Prior", function () awful.spawn("amixer set Master 2+") end):add()
-keybinding({ cmdmodkey }, "Next", function () awful.spawn("amixer set Master 2-") end):add()
-keybinding({ cmdmodkey }, "Up", function () awful.spawn("amixer set PCM 2+") end):add()
-keybinding({ cmdmodkey }, "Down", function () awful.spawn("amixer set PCM 2-") end):add()
-keybinding({ cmdmodkey }, "Home", function () awful.spawn("amixer set Mic toggle") end):add()
-keybinding({ cmdmodkey }, "End", function () awful.spawn("amixer set Master toggle") end):add()
-keybinding({ cmdmodkey }, "Left", function () awful.spawn("xmms2 prev") end):add()
-keybinding({ cmdmodkey }, "Right", function () awful.spawn("xmms2 next") end):add()
-keybinding({ cmdmodkey }, "space", function () awful.spawn("xmms2 toggleplay") end):add()
-keybinding({ cmdmodkey }, "backslash", function () awful.spawn("xmms2 current | head -1 | xmessage -nearmouse -timeout 5 -file -") end):add()
-keybinding({ cmdmodkey, "Shift" }, "backslash", function () awful.spawn("xmms2 list | xmessage -nearmouse -timeout 5 -file -") end):add()
+keybinding({ cmdmodkey }, "Prior", function () awful.util.spawn("amixer set Master 2+") end):add()
+keybinding({ cmdmodkey }, "Next", function () awful.util.spawn("amixer set Master 2-") end):add()
+keybinding({ cmdmodkey }, "Up", function () awful.util.spawn("amixer set PCM 2+") end):add()
+keybinding({ cmdmodkey }, "Down", function () awful.util.spawn("amixer set PCM 2-") end):add()
+keybinding({ cmdmodkey }, "Home", function () awful.util.spawn("amixer set Mic toggle") end):add()
+keybinding({ cmdmodkey }, "End", function () awful.util.spawn("amixer set Master toggle") end):add()
+keybinding({ cmdmodkey }, "Left", function () awful.util.spawn("xmms2 prev") end):add()
+keybinding({ cmdmodkey }, "Right", function () awful.util.spawn("xmms2 next") end):add()
+keybinding({ cmdmodkey }, "space", function () awful.util.spawn("xmms2 toggleplay") end):add()
+keybinding({ cmdmodkey }, "backslash", function () awful.util.spawn("xmms2 current | head -1 | xmessage -nearmouse -timeout 5 -file -") end):add()
+keybinding({ cmdmodkey, "Shift" }, "backslash", function () awful.util.spawn("xmms2 list | xmessage -nearmouse -timeout 5 -file -") end):add()
 
 -- misc apps
-keybinding({ cmdmodkey }, "n", function () awful.spawn("sensible-browser") end):add()
-keybinding({ cmdmodkey }, "m", function () awful.spawn(terminal .. " -e mutt -f =store") end):add()
-keybinding({ cmdmodkey }, "t", function () awful.spawn(terminal) end):add()
-keybinding({ cmdmodkey }, "c", function () awful.spawn(terminal .. " -e python") end):add()
-keybinding({ cmdmodkey }, "r", function () awful.spawn("gmrun") end):add()
-keybinding({ cmdmodkey }, "j", function () awful.spawn("jpilot") end):add()
-keybinding({ cmdmodkey }, "x", function () awful.spawn("/sbin/start-stop-daemon --start --background --exec /usr/bin/xscreensaver; xscreensaver-command -lock") end):add()
-keybinding({ cmdmodkey, "Shift" }, "x", function () awful.spawn("xscreensaver-command -exit") end):add()
+keybinding({ cmdmodkey }, "n", function () awful.util.spawn("sensible-browser") end):add()
+keybinding({ cmdmodkey }, "m", function () awful.util.spawn(terminal .. " -e mutt -f =store") end):add()
+keybinding({ cmdmodkey }, "t", function () awful.util.spawn(terminal) end):add()
+keybinding({ cmdmodkey }, "c", function () awful.util.spawn(terminal .. " -e python") end):add()
+keybinding({ cmdmodkey }, "r", function () awful.util.spawn("gmrun") end):add()
+keybinding({ cmdmodkey }, "j", function () awful.util.spawn("jpilot") end):add()
+keybinding({ cmdmodkey }, "x", function () awful.util.spawn("/sbin/start-stop-daemon --start --background --exec /usr/bin/xscreensaver; xscreensaver-command -lock") end):add()
+keybinding({ cmdmodkey, "Shift" }, "x", function () awful.util.spawn("xscreensaver-command -exit") end):add()
 
 -- Highlight statusbars on the screen that has focus, 
 -- set this to false if you only have one screen or