From: Penny Leach Date: Wed, 9 Dec 2020 02:00:37 +0000 (+0100) Subject: Merge branch 'pristine' X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=refs%2Fheads%2Fmaster;p=dotfiles%2Fawesome.git Merge branch 'pristine' --- 582b0097038f4b687a37443d02720b98d598fdcc diff --cc .config/awesome/rc.lua index d7ec5e5,9458979..ed54373 --- a/.config/awesome/rc.lua +++ b/.config/awesome/rc.lua @@@ -1,19 -1,55 +1,68 @@@ + -- If LuaRocks is installed, make sure that packages installed through it are + -- found (e.g. lgi). If LuaRocks is not installed, do nothing. + pcall(require, "luarocks.loader") + -- Standard awesome library ++<<<<<<< HEAD +require("awful") +require("awful.autofocus") +require("awful.rules") ++======= + local gears = require("gears") + local awful = require("awful") + require("awful.autofocus") + -- Widget and layout library + local wibox = require("wibox") ++>>>>>>> pristine -- Theme handling library - require("beautiful") + local beautiful = require("beautiful") -- Notification library - require("naughty") + local naughty = require("naughty") + local menubar = require("menubar") + local hotkeys_popup = require("awful.hotkeys_popup") + -- Enable hotkeys help widget for VIM and other apps + -- when client with a matching name is opened: + require("awful.hotkeys_popup.keys") -- Load Debian menu entries - require("debian.menu") + local debian = require("debian.menu") + local has_fdo, freedesktop = pcall(require, "freedesktop") + + -- {{{ Error handling + -- Check if awesome encountered an error during startup and fell back to + -- another config (This code will only ever execute for the fallback config) + if awesome.startup_errors then + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, there were errors during startup!", + text = awesome.startup_errors }) + end ++<<<<<<< HEAD +-- {{{ Variable definitions +-- Themes define colours, icons, and wallpapers +-- beautiful.init("/usr/share/awesome/themes/default/theme.lua") +beautiful.init("/home/penny/.config/awesome/theme.lua") ++======= + -- Handle runtime errors after startup + do + local in_error = false + awesome.connect_signal("debug::error", function (err) + -- Make sure we don't go into an endless error loop + if in_error then return end + in_error = true + + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, an error happened!", + text = tostring(err) }) + in_error = false + end) + end + -- }}} + + -- {{{ Variable definitions + -- Themes define colours, icons, font and wallpapers. + beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua") ++>>>>>>> pristine -- This is used later as the default terminal and editor to run. terminal = "x-terminal-emulator" @@@ -25,141 -61,180 +74,285 @@@ editor_cmd = terminal .. " -e " .. edit -- 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" +modkey = "Mod1" -- Table of layouts to cover with awful.layout.inc, order matters. - layouts = - { + awful.layout.layouts = { + awful.layout.suit.floating, awful.layout.suit.tile, - awful.layout.suit.tile.left, +-- awful.layout.suit.tile.left, awful.layout.suit.tile.bottom, ++<<<<<<< HEAD +-- awful.layout.suit.tile.top, +-- awful.layout.suit.fair, +-- awful.layout.suit.fair.horizontal, +-- awful.layout.suit.spiral, +-- awful.layout.suit.spiral.dwindle, + awful.layout.suit.max, +-- awful.layout.suit.floating, +-- awful.layout.suit.max.fullscreen, +-- awful.layout.suit.magnifier +} +-- }}} + +-- {{{ Tags +-- Define a tag table which hold all screen tags. +tags = { + names = { "♥", "☭", "⌥", "✇", "⌤", "☼", "⌘" }, +} + +for s = 1, screen.count() do + -- Each screen has its own tag table. + tags[s] = awful.tag(tags.names, s, layouts[1]) +end +-- }}} + +-- {{{ Menu +-- Create a laucher widget and a main menu ++======= + awful.layout.suit.tile.top, + awful.layout.suit.fair, + awful.layout.suit.fair.horizontal, + awful.layout.suit.spiral, + awful.layout.suit.spiral.dwindle, + awful.layout.suit.max, + awful.layout.suit.max.fullscreen, + awful.layout.suit.magnifier, + awful.layout.suit.corner.nw, + -- awful.layout.suit.corner.ne, + -- awful.layout.suit.corner.sw, + -- awful.layout.suit.corner.se, + } + -- }}} + + -- {{{ Menu + -- Create a launcher widget and a main menu ++>>>>>>> pristine myawesomemenu = { + { "hotkeys", function() hotkeys_popup.show_help(nil, awful.screen.focused()) end }, { "manual", terminal .. " -e man awesome" }, - { "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" }, + { "edit config", editor_cmd .. " " .. awesome.conffile }, { "restart", awesome.restart }, - { "quit", awesome.quit } + { "quit", function() awesome.quit() end }, } ++<<<<<<< HEAD +mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon }, + { "Debian", debian.menu.Debian_menu.Debian }, + { "open terminal", terminal } + } + }) ++======= + local menu_awesome = { "awesome", myawesomemenu, beautiful.awesome_icon } + local menu_terminal = { "open terminal", terminal } + + if has_fdo then + mymainmenu = freedesktop.menu.build({ + before = { menu_awesome }, + after = { menu_terminal } + }) + else + mymainmenu = awful.menu({ + items = { + menu_awesome, + { "Debian", debian.menu.Debian_menu.Debian }, + menu_terminal, + } + }) + end + ++>>>>>>> pristine - mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon), + mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, menu = mymainmenu }) +-- }}} + +-- {{{ Wibox +-- Create a textclock widget +mytextclock = awful.widget.textclock({ align = "right" }) +mybatterybox = widget({ type = "textbox", name = "mybatterybox", align = "right" }) + ++<<<<<<< HEAD +-- Create a systray +mysystray = widget({ type = "systray" }) +-- 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, awful.tag.viewtoggle), + 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]) ++======= + -- Menubar configuration + menubar.utils.terminal = terminal -- Set the terminal for applications that require it + -- }}} + + -- Keyboard map indicator and switcher + mykeyboardlayout = awful.widget.keyboardlayout() + + -- {{{ Wibar + -- Create a textclock widget + mytextclock = wibox.widget.textclock() + + -- Create a wibox for each screen and add it + local taglist_buttons = gears.table.join( + awful.button({ }, 1, function(t) t:view_only() end), + awful.button({ modkey }, 1, function(t) + if client.focus then + client.focus:move_to_tag(t) + end + end), + awful.button({ }, 3, awful.tag.viewtoggle), + awful.button({ modkey }, 3, function(t) + if client.focus then + client.focus:toggle_tag(t) ++>>>>>>> pristine end - client.focus = c - c:raise() end), - awful.button({ }, 3, function () - if instance then - instance:hide() - instance = nil + awful.button({ }, 4, function(t) awful.tag.viewnext(t.screen) end), + awful.button({ }, 5, function(t) awful.tag.viewprev(t.screen) end) + ) + + local tasklist_buttons = gears.table.join( + awful.button({ }, 1, function (c) + if c == client.focus then + c.minimized = true else - instance = awful.menu.clients({ width=250 }) + c:emit_signal( + "request::activate", + "tasklist", + {raise = true} + ) end end), + awful.button({ }, 3, function() + awful.menu.client_list({ theme = { width = 250 } }) + 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 + local function set_wallpaper(s) + -- Wallpaper + if beautiful.wallpaper then + local wallpaper = beautiful.wallpaper + -- If wallpaper is a function, call it with the screen + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + gears.wallpaper.maximized(wallpaper, s, true) + end + end + + -- Re-set wallpaper when a screen's geometry changes (e.g. different resolution) + screen.connect_signal("property::geometry", set_wallpaper) + + awful.screen.connect_for_each_screen(function(s) + -- Wallpaper + set_wallpaper(s) + + -- Each screen has its own tag table. + awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[1]) + -- Create a promptbox for each screen ++<<<<<<< HEAD + mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright }) + -- 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 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] = awful.wibox({ position = "top", screen = s }) + -- Add widgets to the wibox - order matters + mywibox[s].widgets = { + { + mylauncher, + mytaglist[s], + mypromptbox[s], + layout = awful.widget.layout.horizontal.leftright + }, + mylayoutbox[s], + mybatterybox, + mytextclock, + s == 1 and mysystray or nil, + mytasklist[s], + layout = awful.widget.layout.horizontal.rightleft + } +end ++======= + s.mypromptbox = awful.widget.prompt() + -- Create an imagebox widget which will contain an icon indicating which layout we're using. + -- We need one layoutbox per screen. + s.mylayoutbox = awful.widget.layoutbox(s) + s.mylayoutbox:buttons(gears.table.join( + awful.button({ }, 1, function () awful.layout.inc( 1) end), + awful.button({ }, 3, function () awful.layout.inc(-1) end), + awful.button({ }, 4, function () awful.layout.inc( 1) end), + awful.button({ }, 5, function () awful.layout.inc(-1) end))) + -- Create a taglist widget + s.mytaglist = awful.widget.taglist { + screen = s, + filter = awful.widget.taglist.filter.all, + buttons = taglist_buttons + } + + -- Create a tasklist widget + s.mytasklist = awful.widget.tasklist { + screen = s, + filter = awful.widget.tasklist.filter.currenttags, + buttons = tasklist_buttons + } + + -- Create the wibox + s.mywibox = awful.wibar({ position = "top", screen = s }) + + -- Add widgets to the wibox + s.mywibox:setup { + layout = wibox.layout.align.horizontal, + { -- Left widgets + layout = wibox.layout.fixed.horizontal, + mylauncher, + s.mytaglist, + s.mypromptbox, + }, + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + mykeyboardlayout, + wibox.widget.systray(), + mytextclock, + s.mylayoutbox, + }, + } + end) ++>>>>>>> pristine -- }}} -- {{{ Mouse bindings @@@ -184,16 -265,23 +383,31 @@@ globalkeys = gears.table.join 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), + end, + {description = "focus previous by index", group = "client"} + ), + awful.key({ modkey, }, "w", function () mymainmenu:show() end, + {description = "show main menu", group = "awesome"}), -- Layout manipulation ++<<<<<<< HEAD + 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, "Shift" }, "j", function () awful.client.swap.byidx( 1) end, + {description = "swap with next client by index", group = "client"}), + awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end, + {description = "swap with previous client by index", group = "client"}), + awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end, + {description = "focus the next screen", group = "screen"}), + awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end, + {description = "focus the previous screen", group = "screen"}), + awful.key({ modkey, }, "u", awful.client.urgent.jumpto, + {description = "jump to urgent client", group = "client"}), ++>>>>>>> pristine awful.key({ modkey, }, "Tab", function () awful.client.focus.history.previous() @@@ -221,234 -334,249 +460,465 @@@ 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) + awful.prompt.run { + prompt = "Run Lua code: ", + textbox = awful.screen.focused().mypromptbox.widget, + exe_callback = awful.util.eval, + history_path = awful.util.get_cache_dir() .. "/history_eval" + } + end, + {description = "lua execute prompt", group = "awesome"}), + -- Menubar + awful.key({ modkey }, "p", function() menubar.show() end, + {description = "show the menubar", group = "launcher"}) ) ++<<<<<<< HEAD +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, "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 }, "a", function (c) c.ontop = not c.ontop end, nil, "toggle on top"), -- TODO figure out how to add this later + awful.key({ modkey, }, "n", function (c) c.minimized = not c.minimized end), + awful.key({ modkey, }, "m", ++======= + clientkeys = gears.table.join( + awful.key({ modkey, }, "f", + function (c) + c.fullscreen = not c.fullscreen + c:raise() + end, + {description = "toggle fullscreen", group = "client"}), + awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end, + {description = "close", group = "client"}), + awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle , + {description = "toggle floating", group = "client"}), + awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end, + {description = "move to master", group = "client"}), + awful.key({ modkey, }, "o", function (c) c:move_to_screen() end, + {description = "move to screen", group = "client"}), + awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end, + {description = "toggle keep on top", group = "client"}), + awful.key({ modkey, }, "n", + function (c) + -- The client currently has the input focus, so it cannot be + -- minimized, since minimized clients can't have the focus. + c.minimized = true + end , + {description = "minimize", group = "client"}), + awful.key({ modkey, }, "m", + function (c) + c.maximized = not c.maximized + c:raise() + end , + {description = "(un)maximize", group = "client"}), + awful.key({ modkey, "Control" }, "m", + function (c) + c.maximized_vertical = not c.maximized_vertical + c:raise() + end , + {description = "(un)maximize vertically", group = "client"}), + awful.key({ modkey, "Shift" }, "m", ++>>>>>>> pristine function (c) c.maximized_horizontal = not c.maximized_horizontal - c.maximized_vertical = not c.maximized_vertical - end) + c:raise() + end , + {description = "(un)maximize horizontally", group = "client"}) ) ++<<<<<<< HEAD +-- 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, ++======= + -- Bind all key numbers to tags. + -- Be careful: we use keycodes to make it work on any keyboard layout. + -- This should map on the top row of your keyboard, usually 1 to 9. + for i = 1, 9 do + globalkeys = gears.table.join(globalkeys, + -- View tag only. ++>>>>>>> pristine awful.key({ modkey }, "#" .. i + 9, function () - local screen = mouse.screen - if tags[screen][i] then - awful.tag.viewonly(tags[screen][i]) + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + tag:view_only() end ++<<<<<<< HEAD + 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)) ++======= + end, + {description = "view tag #"..i, group = "tag"}), + -- Toggle tag display. + awful.key({ modkey, "Control" }, "#" .. i + 9, + function () + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + awful.tag.viewtoggle(tag) + end + end, + {description = "toggle tag #" .. i, group = "tag"}), + -- Move client to tag. + awful.key({ modkey, "Shift" }, "#" .. i + 9, + function () + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:move_to_tag(tag) + end + end + end, + {description = "move focused client to tag #"..i, group = "tag"}), + -- Toggle tag on focused client. + awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, + function () + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:toggle_tag(tag) + end + end + end, + {description = "toggle focused client on tag #" .. i, group = "tag"}) + ) + end + + clientbuttons = gears.table.join( + awful.button({ }, 1, function (c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + end), + awful.button({ modkey }, 1, function (c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + awful.mouse.client.move(c) + end), + awful.button({ modkey }, 3, function (c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + awful.mouse.client.resize(c) + end) + ) ++>>>>>>> pristine -- Set keys root.keys(globalkeys) -- }}} -- {{{ Rules ++<<<<<<< HEAD ++======= + -- Rules to apply to new clients (through the "manage" signal). ++>>>>>>> pristine awful.rules.rules = { -- All clients will match this rule. { rule = { }, properties = { border_width = beautiful.border_width, border_color = beautiful.border_normal, ++<<<<<<< HEAD + focus = true, + keys = clientkeys, + buttons = clientbuttons } }, + { rule = { class = "MPlayer" }, + 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] } }, +} +-- }}} + +-- {{{ 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 + -- Honor size hints + c.size_hints_honor = false +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) +-- }}} + + +-- {{{ Statusbar battery +-- +function get_acpibatt() + + local f=io.popen('acpi -b', 'r') + if not f then + return "acpi -b failed" + end + local s=f:read('*l') + f:close() + if not s then + return laststring; + end +-- Battery 0: Discharging, 89%, 00:02:14 remaining +-- or! Battery 0: Full, 100% +-- so find the first bit first and then go look for the time + local st, en, status, percent = string.find(s, '%a+%s%d[:]%s(%a+),%s(%d+%%)'); + local st, en, time = string.find(s, ',%s(%d+[:]%d+[:]%d+)%s%a+', en); + + if not status or not percent then -- time can be empty if we're full + return "couldn't parse line " ..s + end + + if not time then + return percent + end + + if status == 'Charging' then + status = '+'; + else + status = '-'; + end + + return percent .. ' (' .. status .. ') '; -- .. ' ' .. time .. ' left'; +end +-- }}} + + +function hook_battery() + mybatterybox.text = " " .. get_acpibatt() .. " " +end + +t = timer({ timeout = 20 }) +t:add_signal('timeout', hook_battery) +t:start() +hook_battery() + +-- {{{ penny key binding additions +table.foreach(awful.key({ modkey }, 'F6', + function () + os.execute('xmms2 toggleplay') + end), function(_, k) table.insert(globalkeys, k) end) +table.foreach(awful.key({ nil },'XF86AudioRaiseVolume', + function() + os.execute("amixer set Master 2+") + end), function(_, k) table.insert(globalkeys, k) end) +table.foreach(awful.key({ nil },'XF86AudioLowerVolume', + function() + os.execute("amixer set Master 2-") + end), function(_, k) table.insert(globalkeys, k) end) +table.foreach(awful.key({ nil },'XF86AudioMute', + function() + os.execute("amixer set Master toggle") + end), function(_, k) table.insert(globalkeys, k) end) +table.foreach(awful.key({ modkey, 'Ctrl' }, 'x', + function() + os.execute('/sbin/start-stop-daemon --start --background --exec /usr/bin/gnome-screensaver; gnome-screensaver-command --lock') + end), function(_, k) table.insert(globalkeys, k) end) +table.foreach(awful.key({ modkey, 'Shift' },'x', + function() + os.execute("gnome-screensaver-command --exit") + end), function(_, k) table.insert(globalkeys, k) end) +table.foreach(awful.key({ modkey, 'Shift' }, 'Return' , + function() + awful.util.spawn('gmrun') + end), function(_, k) table.insert(globalkeys, k) end) +root.keys(globalkeys) + +-- {{{ broken +-- +-- commented out for various (broken) reasons, and need updating to 3.3 syntax +--keybinding({modkey},'x', function() os.execute("/sbin/start-stop-daemon --start --background --exec /usr/bin/xscreensaver; xscreensaver-command -lock") end):add() +--keybinding({modkey,"Shift"}, 'x', function() os.execute("xscreensaver-command -exit") end):add() + +--keybinding({modkey},"F7", function() os.execute('~/bin/paste.pl') end):add() +--keybinding({modkey},"XF86MonBrightnessUp", function() os.execute('xbacklight -inc 10') end):add() +--keybinding({modkey},"XF86MonBrightnessDown", function() os.execute('xbacklight -dec 10') end):add() +-- }}} + +--{{{ +-- taken from http://awesome.naquadah.org/wiki/XRandR_Screen_Table +function xrandr_screens () + local screens = {} + local counter = 1 + local handle = io.popen("xrandr -q") + for display in handle:read("*all"):gmatch("([%a%d-]+) connected") do + screens[display] = counter + counter = counter + 1 + end + handle:close() + return screens +end + + +--}}} ++======= + focus = awful.client.focus.filter, + raise = true, + keys = clientkeys, + buttons = clientbuttons, + screen = awful.screen.preferred, + placement = awful.placement.no_overlap+awful.placement.no_offscreen + } + }, + + -- Floating clients. + { rule_any = { + instance = { + "DTA", -- Firefox addon DownThemAll. + "copyq", -- Includes session name in class. + "pinentry", + }, + class = { + "Arandr", + "Blueman-manager", + "Gpick", + "Kruler", + "MessageWin", -- kalarm. + "Sxiv", + "Tor Browser", -- Needs a fixed window size to avoid fingerprinting by screen size. + "Wpa_gui", + "veromix", + "xtightvncviewer"}, + + -- Note that the name property shown in xprop might be set slightly after creation of the client + -- and the name shown there might not match defined rules here. + name = { + "Event Tester", -- xev. + }, + role = { + "AlarmWindow", -- Thunderbird's calendar. + "ConfigManager", -- Thunderbird's about:config. + "pop-up", -- e.g. Google Chrome's (detached) Developer Tools. + } + }, properties = { floating = true }}, + + -- Add titlebars to normal clients and dialogs + { rule_any = {type = { "normal", "dialog" } + }, properties = { titlebars_enabled = true } + }, + + -- Set Firefox to always map on the tag named "2" on screen 1. + -- { rule = { class = "Firefox" }, + -- properties = { screen = 1, tag = "2" } }, + } + -- }}} + + -- {{{ Signals + -- Signal function to execute when a new client appears. + client.connect_signal("manage", function (c) + -- Set the windows at the slave, + -- i.e. put it at the end of others instead of setting it master. + -- if not awesome.startup then awful.client.setslave(c) end + + if awesome.startup + and not c.size_hints.user_position + and not c.size_hints.program_position then + -- Prevent clients from being unreachable after screen count changes. + awful.placement.no_offscreen(c) + end + end) + + -- Add a titlebar if titlebars_enabled is set to true in the rules. + client.connect_signal("request::titlebars", function(c) + -- buttons for the titlebar + local buttons = gears.table.join( + awful.button({ }, 1, function() + c:emit_signal("request::activate", "titlebar", {raise = true}) + awful.mouse.client.move(c) + end), + awful.button({ }, 3, function() + c:emit_signal("request::activate", "titlebar", {raise = true}) + awful.mouse.client.resize(c) + end) + ) + + awful.titlebar(c) : setup { + { -- Left + awful.titlebar.widget.iconwidget(c), + buttons = buttons, + layout = wibox.layout.fixed.horizontal + }, + { -- Middle + { -- Title + align = "center", + widget = awful.titlebar.widget.titlewidget(c) + }, + buttons = buttons, + layout = wibox.layout.flex.horizontal + }, + { -- Right + awful.titlebar.widget.floatingbutton (c), + awful.titlebar.widget.maximizedbutton(c), + awful.titlebar.widget.stickybutton (c), + awful.titlebar.widget.ontopbutton (c), + awful.titlebar.widget.closebutton (c), + layout = wibox.layout.fixed.horizontal() + }, + layout = wibox.layout.align.horizontal + } + end) + + -- Enable sloppy focus, so that focus follows mouse. + client.connect_signal("mouse::enter", function(c) + c:emit_signal("request::activate", "mouse_enter", {raise = false}) + end) + + client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) + client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) --- }}} ++-- }}} ++>>>>>>> pristine