diff -r 6348b9f842b2 -r 73df43769340 awesome/rc.lua --- a/awesome/rc.lua Sun Sep 13 14:47:26 2015 -0400 +++ b/awesome/rc.lua Sun Sep 13 22:53:18 2015 -0400 @@ -1,8 +1,10 @@ +local debug = require("debug") +-- -- Standard awesome library local gears = require("gears") local awful = require("awful") awful.rules = require("awful.rules") -require("awful.autofocus") +awful.autofocus = require("awful.autofocus") -- Widget and layout library local wibox = require("wibox") -- Theme handling library @@ -11,6 +13,11 @@ local naughty = require("naughty") local menubar = require("menubar") +-- Revelation +local revelation = require("revelation") +-- vicious widgets +local vicious = require("vicious") +local wicked = require("wicked") -- Load Debian menu entries require("debian.menu") @@ -22,14 +29,13 @@ -- 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 }) + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, there were errors during startup!", + text = awesome.startup_errors }) end -- Handle runtime errors after startup do - local in_error = false awesome.connect_signal("debug::error", my.notify_error) awesome.connect_signal("debug::deprecation", my.notify_error) awesome.connect_signal("debug::index::miss", @@ -79,41 +85,63 @@ -- Table of layouts to cover with awful.layout.inc, order matters. local layouts = -{ - awful.layout.suit.floating, - 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.spiral, - awful.layout.suit.spiral.dwindle, - awful.layout.suit.max, - -- awful.layout.suit.max.fullscreen, - awful.layout.suit.magnifier, -} + { + awful.layout.suit.floating, + 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.spiral, + awful.layout.suit.spiral.dwindle, + awful.layout.suit.max, + -- awful.layout.suit.max.fullscreen, + awful.layout.suit.magnifier, + } local default_layout = 2 -- }}} -- {{{ Wallpaper if beautiful.wallpaper then - for s = 1, screen.count() do - gears.wallpaper.maximized(beautiful.wallpaper, s, true) - end + for s = 1, screen.count() do + -- gears.wallpaper.maximized(beautiful.wallpaper, s, true) + awful.util.spawn(wallpaper_cmd, false, s) + end end -- }}} --- Define if we want to use titlebar on all applications. -use_titlebar = true - -- {{{ Tags -- Define a tag table which hold all screen tags. +local mytags = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 } +local number_of_rows = #mytags + tags = {} for s = 1, screen.count() do - -- Each screen has its own tag table. - tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[default_layout]) + -- Each screen has its own tag table. + tags[s] = awful.tag(mytags, s, layouts[default_layout]) +end + +local function get_tag(s, i) + return awful.tag.gettags(s)[i] end + +local function get_next_tag(s) + local idx = awful.tag.getidx() + 1 + if idx > number_of_rows then + idx = 1 + end + return get_tag(s, idx) +end + +local function get_prev_tag(s) + local idx = awful.tag.getidx() - 1 + if idx < 1 then + idx = number_of_rows + end + return get_tag(s, idx) +end + -- }}} -- Create a laucher widget and a main menu @@ -155,14 +183,14 @@ 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, function(t) - awful.tag.viewnext(awful.tag.getscreen(t)) end), - awful.button({ }, 5, function(t) - awful.tag.viewprev(awful.tag.getscreen(t)) end) + 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, function(t) + awful.tag.viewnext(awful.tag.getscreen(t)) end), + awful.button({ }, 5, function(t) + awful.tag.viewprev(awful.tag.getscreen(t)) end) ) mytasklist = {} mytasklist.buttons = awful.util.table.join( @@ -192,6 +220,9 @@ }) end end), + awful.button({modkey}, 3, function(c) + c.maximized = not c.maximized + end), awful.button({ }, 4, function () awful.client.focus.byidx(1) if client.focus then client.focus:raise() end @@ -210,152 +241,231 @@ for s = 1, screen.count() do - -- Create a promptbox for each screen - mypromptbox[s] = awful.widget.prompt() - -- 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.filter.all, mytaglist.buttons) - -- Create a tasklist widget - mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons) + -- Create a promptbox for each screen + mypromptbox[s] = awful.widget.prompt() + -- 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.filter.all, mytaglist.buttons) - -- Create the wibox - mywibox[s] = awful.wibox({ position = "top", screen = s }) + -- Create a tasklist widget + mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons) + + -- Create the wibox + mywibox[s] = awful.wibox({ position = "top", screen = s }) - -- Widgets that are aligned to the left - local left_layout = wibox.layout.fixed.horizontal() - left_layout:add(mymodewidget) - left_layout:add(mylauncher) - if s == 1 then - left_layout:add(mycpuwidget) - left_layout:add(mymemwidget) - end - left_layout:add(mytaglist[s]) - left_layout:add(mypromptbox[s]) + -- Widgets that are aligned to the left + local left_layout = wibox.layout.fixed.horizontal() + left_layout:add(mymodewidget) + left_layout:add(mylauncher) + if s == 1 then + left_layout:add(mycpuwidget) + left_layout:add(mymemwidget) + end + left_layout:add(mytaglist[s]) + left_layout:add(mypromptbox[s]) - -- Widgets that are aligned to the right - local right_layout = wibox.layout.fixed.horizontal() - if s == 1 then - right_layout:add(mynetwidget) - right_layout:add(mysystray) - end - right_layout:add(mytextclock) - right_layout:add(mylayoutbox[s]) + -- Widgets that are aligned to the right + local right_layout = wibox.layout.fixed.horizontal() + if s == 1 then + right_layout:add(mynetwidget) + right_layout:add(mysystray) + end + right_layout:add(mytextclock) + right_layout:add(mylayoutbox[s]) - -- Now bring it all together (with the tasklist in the middle) - local layout = wibox.layout.align.horizontal() - layout:set_left(left_layout) - layout:set_middle(mytasklist[s]) - layout:set_right(right_layout) + -- Now bring it all together (with the tasklist in the middle) + local layout = wibox.layout.align.horizontal() + layout:set_left(left_layout) + layout:set_middle(mytasklist[s]) + layout:set_right(right_layout) - mywibox[s]:set_widget(layout) + mywibox[s]:set_widget(layout) 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) + awful.button({ }, 3, function () mymainmenu:toggle() end), + awful.button({ }, 4, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) )) -- }}} -- {{{ Key tables + +local awesome_table = { + my.make_single_key("m", "Main menu", my.mkinteractive(function () mymainmenu:show({keygrabber=true}) end)), + -- This one returns an error. + my.make_single_key("b", "Menu bar", function () menubar.show() end), + my.make_single_key("t", "Terminal", my.mkspawn(terminal)), + my.make_single_key("f", "Toggle sloppy mouse", my.sloppy_toggle), + my.make_single_key("r", "Restart", awesome.restart), + my.make_single_key("q", "Quit", logout) +} + +local layout_table = { + -- Client movement + my.make_interactive_key("Right", "Focus right", + function () awful.client.focus.bydirection("right") end), + my.make_interactive_key("Left", "Focus left", + function () awful.client.focus.bydirection("left") end), + my.make_interactive_key("Up", "Focus up", + function () awful.client.focus.bydirection("up") end), + my.make_interactive_key("Down", "Focus down", + function () awful.client.focus.bydirection("down") end), + my.make_interactive_key("Shift+Right", "Move right", + function () awful.client.swap.bydirection("right") end), + my.make_interactive_key("Shift+Left", "Move left", + function () awful.client.swap.bydirection("left") end), + my.make_interactive_key("Shift+Up", "Move up", + function () awful.client.swap.bydirection("up") end), + my.make_interactive_key("Shift+Down", "Move down", + function () awful.client.swap.bydirection("down") end), + -- Master/Client transforms + my.make_interactive_key("Control+Right", "Master grow", + function () awful.tag.incmwfact( 0.05 ) end), + my.make_interactive_key("Control+Left", "Master shrink", + function () awful.tag.incmwfact( -0.05 ) end), + my.make_interactive_key("Control+Shift+Down", "Add master", + function () awful.tag.incnmaster( 1 ) end), + my.make_interactive_key("Control+Shift+Up", "Remove master", + function () awful.tag.incnmaster( -1 ) end), + my.make_interactive_key("Control+Shift+Right", "Add column", + function () awful.tag.incncol( 1 ) end), + my.make_interactive_key("Control+Shift+Left", "Remove column", + function () awful.tag.incncol( -1 ) end), + -- Layouts + my.make_interactive_key("Space", "Next layout", + function () awful.layout.inc(layouts, 1 ) end), + my.make_interactive_key("Shift+Space", "Previous layout", + function () awful.layout.inc(layouts, -1 ) end), +} + +-- Media Keys table, associated globally, with no modifiers. +local media_table = { + -- media keys + my.make_single_key("XF86HomePage", "Browser", my.mkspawn(browser)), + my.make_single_key("XF86Mail", "Mail", my.mkspawn(mail)), + my.make_single_key("XF86Search", "Search file...", my.mkspawn(lookup)), + my.make_single_key("XF86Explorer", "File Manager", my.mkspawn(filemanager)), + my.make_single_key("XF86Calculator", "Calculator", my.mkspawn(calculator)), + my.make_single_key("XF86Tools", "Music", my.mkspawn(musicplayer)), + my.make_single_key("XF86AudioPrev", "Previous song", my.mkspawn("mpc prev")), + my.make_single_key("XF86AudioNext", "Next song", my.mkspawn("mpc next")), + my.make_single_key("XF86AudioPlay", "Play song", my.mkspawn("mpc toggle")), + my.make_single_key("XF86AudioMute", "Mute", my.mkspawn("pulseaudio-ctl mute")), + my.make_single_key("XF86AudioLowerVolume", "Volume down", my.mkspawn("pulseaudio-ctl down")), + my.make_single_key("XF86AudioRaiseVolume", "Volume up", my.mkspawn("pulseaudio-ctl up")), + my.make_single_key("XF86Eject", "Eject", my.mkspawn("eject")), +} + +-- Global table, associated globally to modkey. local global_table = { - my.make_single_key("Up", "View prev", awful.tag.viewprev), - my.make_single_key("Down", "View next", awful.tag.viewnext), + -- my.make_single_key("e", "Revel windows", revelation), + my.make_single_key("Control+n", "Restore clients", awful.client.restore), my.make_single_key("Escape", "Restore history", awful.tag.history.restore), - my.make_single_key("Right", "Next screen", - function () - awful.client.focus.byidx( 1) - if client.focus then client.focus:raise() end - end), - my.make_single_key("Left", "Previous screen", - function () - awful.client.focus.byidx(-1) - if client.focus then client.focus:raise() end - end), - my.make_single_key("w", "Main menu", function () mymainmenu:show() end), - my.make_single_key("Shift+Right", "Swap with next", - function () awful.client.swap.byidx( 1); end), - my.make_single_key("Shift+Left", "Swap with prev", - function () awful.client.swap.byidx(-1); end), - -- Is this work ? - my.make_single_key("Control+Right", "Focus next screen", - function () awful.screen.focus_relative( 1); end), - -- Is this work ? - my.make_single_key("Control+Left", "Focus prev screen", - function () awful.screen.focus_relative(-1); end), - my.make_single_key("u", "Go to urgent", - function () awful.client.urgent.jumpto(); end), - my.make_single_key("Tab", "Next client", + my.make_single_key("Tab", "Previous client", function () awful.client.focus.history.previous() if client.focus then client.focus:raise() end end), - my.make_single_key("Return", "Start terminal", my.mkspawn(terminal)), - my.make_single_key("Control+r", "Restart", awesome.restart), - my.make_single_key("Shift+q", "Quit", logout), - my.make_single_key("l", "Inc Master Size", - function () awful.tag.incmwfact( 0.05 ) end), - my.make_single_key("h", "Dec Master Size", - function () awful.tag.incmwfact( -0.05 ) end), - my.make_single_key("Shift+l", "Inc Master Count", - function () awful.tag.incnmaster( 1 ) end), - my.make_single_key("Shift+h", "Dec Master Count", - function () awful.tag.incnmaster( -1 ) end), - my.make_single_key("Control+l", "Inc Column Count", - function () awful.tag.incncol( 1 ) end), - my.make_single_key("Control+h", "Dec Column Count", - function () awful.tag.incncol( -1 ) end), - my.make_single_key("Space", "Next layout", - function () awful.layout.inc(layouts, 1 ) end), - my.make_single_key("Shift+Space", "Prev layout", - function () awful.layout.inc(layouts, -1 ) end), - my.make_single_key("Control+n", "Restore clients", awful.client.restore), - my.make_single_key("r", "Run", + my.make_single_key("u", "Go to urgent", awful.client.urgent.jumpto), + + -- Tag Navigation + my.make_single_key("Prior", "View prev", awful.tag.viewprev), + my.make_single_key("Next", "View next", awful.tag.viewnext), + my.make_single_key("Shift+Prior", "Send to Previous View", + function () + if client.focus then + local tag = get_prev_tag(client.focus.screen) + awful.client.movetotag(tag) + awful.tag.viewprev() + end + end), + my.make_single_key("Shift+Next", "Send to Next View", + function () + if client.focus then + local tag = get_next_tag(client.focus.screen) + awful.client.movetotag(tag) + awful.tag.viewnext() + end + end), + + -- Client Navigation + my.make_single_key("Right", "Right client", my.make_focus_bydirection("right")), + my.make_single_key("Left", "Left client", my.make_focus_bydirection("left")), + my.make_single_key("Up", "Up client", my.make_focus_bydirection("up")), + my.make_single_key("Down", "Down client", my.make_focus_bydirection("down")), + my.make_single_key("Shift+Right", "Move right", + function () awful.client.swap.bydirection("right") end), + my.make_single_key("Shift+Left", "Move left", + function () awful.client.swap.bydirection("left") end), + my.make_single_key("Shift+Up", "Move up", + function () awful.client.swap.bydirection("up") end), + my.make_single_key("Shift+Down", "Move down", + function () awful.client.swap.bydirection("down") end), + + -- Prompts... + my.make_single_key("F2", "Run...", function () mypromptbox[mouse.screen]:run() end), - my.make_single_key("x", "Lua prompt", + my.make_single_key("F3", "Eval...", function () awful.prompt.run({ prompt = "Run Lua code: " }, mypromptbox[mouse.screen].widget, awful.util.eval, nil, awful.util.getdir("cache") .. "/history_eval") end), - -- This one returns an error. - my.make_single_key("p", "Menu bar", function () menubar.show() end) + + -- forcing restart of mpd. + -- it sometime have difficulty to connect to pulse + my.make_single_key("F6", "Restart mpd", + function () + awful.util.spawn("pkill -9 mpd") + awful.util.spawn("mpd") + end), + + -- modal key binding + my.make_key("a", "Main mode...", my.make_kt(awesome_table, "awesome") ), + my.make_key("l", "Layout mode...", my.make_kt(layout_table, "layout") ), } -client_table = { +-- Client table, associated to each client with modkey. +local client_table = { + my.make_single_key("Return", "Swap master", + function(c) c:swap(awful.client.getmaster()) end), my.make_single_key("f", "Toggle fullscreen", function (c) c.fullscreen = not c.fullscreen end), - my.make_single_key("Shift+c", "Kill client", function (c) c:kill() end), - my.make_single_key("Control+Space", "Toggle floating", awful.client.floating.toggle), - my.make_single_key("o", "Move to screen", awful.client.movetoscreen), + my.make_single_key("F4", "Kill client", function (c) c:kill() end), + my.make_single_key("Space", "Toggle floating", awful.client.floating.toggle), my.make_single_key("t", "Toggle on top", function (c) c.ontop = not c.ontop end), - my.make_single_key("n", "Iconized", - 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), my.make_single_key("m", "Toggle maximized", function (c) maximized = not c.maximized_horizontal c.maximized_horizontal = maximized c.maximized_vertical = maximized end), + my.make_single_key("h", "Hide", + 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), + -- Client awful tagging: this is useful to tag some clients and then do stuff + -- like move to tag on them my.make_single_key("Shift+t", "Toggle mark", awful.client.togglemarked) } + + -- }}} -- {{{ Key bindings @@ -364,169 +474,181 @@ -- make the client binding help available even when there is no client. awful.key({modkey, "Shift"}, "F1", function () my.show_kt(client_table, "Client binding") end), - my.make_globalkeys({modkey}, global_table) + my.make_globalkeys({modkey}, global_table), + my.make_globalkeys({}, media_table) ) clientkeys = awful.util.table.join( my.make_globalkeys({modkey}, client_table) ) - +-- }}} + + -- 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, 9 do - globalkeys = awful.util.table.join(globalkeys, - -- View tag only. - awful.key({ modkey }, "#" .. i + 9, - function () - local screen = mouse.screen - local tag = awful.tag.gettags(screen)[i] - if tag then - awful.tag.viewonly(tag) - end - end), - -- Toggle tag. - awful.key({ modkey, "Control" }, "#" .. i + 9, - function () - local screen = mouse.screen - local tag = awful.tag.gettags(screen)[i] - if tag then - awful.tag.viewtoggle(tag) - end - end), - -- Move client to tag. - awful.key({ modkey, "Shift" }, "#" .. i + 9, - function () - if client.focus then - local tag = awful.tag.gettags(client.focus.screen)[i] - if tag then - awful.client.movetotag(tag) - end - end - end), - -- Toggle tag. - awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, - function () - if client.focus then - local tag = awful.tag.gettags(client.focus.screen)[i] - if tag then - awful.client.toggletag(tag) - end - end - end)) +for i = 1, number_of_rows do + local k = "#" .. i + 9 + globalkeys = awful.util.table.join( + globalkeys, + -- View tag only. + awful.key({ modkey }, k, + function () + local tag = get_tag(mouse.screen, i) + if tag then + awful.tag.viewonly(tag) + end + end), + -- Toggle view tag. + awful.key({ modkey, "Control" }, k, + function () + local tag = get_tag(mouse.screen, i) + if tag then + awful.tag.viewtoggle(tag) + end + end), + -- Move client to tag. + awful.key({ modkey, "Shift" }, k, + function () + if client.focus then + local tag = get_tag(client.focus.screen, i) + if tag then + awful.client.movetotag(tag) + end + end + end), + -- Toggle client tag. + awful.key({ modkey, "Control", "Shift" }, k, + function () + if client.focus then + local tag = get_tag(client.focus.screen, i) + if tag then + awful.client.toggletag(tag) + end + 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)) + 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 +-- mympdwidget:append_global_keys() root.keys(globalkeys) -- }}} -- {{{ Rules -- Rules to apply to new clients (through the "manage" signal). awful.rules.rules = { - -- All clients will match this rule. - { rule = { }, - properties = { border_width = beautiful.border_width, - border_color = beautiful.border_normal, - focus = awful.client.focus.filter, - raise = 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] } }, + -- All clients will match this rule. + { rule = { }, + properties = { border_width = beautiful.border_width, + border_color = beautiful.border_normal, + focus = awful.client.focus.filter, + raise = 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.connect_signal("manage", function (c, startup) - -- Enable sloppy focus - -- c:connect_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 - elseif not c.size_hints.user_position and not c.size_hints.program_position then - -- Prevent clients from being unreachable after screen count change - awful.placement.no_offscreen(c) - end +function manage_clients(c, startup) + -- Enable sloppy focus + -- c:connect_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 + elseif not c.size_hints.user_position and not c.size_hints.program_position then + -- Prevent clients from being unreachable after screen count change + awful.placement.no_offscreen(c) + end + + if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then + -- buttons for the titlebar + local buttons = awful.util.table.join( + awful.button({ }, 1, function() + client.focus = c + c:raise() + awful.mouse.client.move(c) + end), + awful.button({ }, 3, function() + client.focus = c + c:raise() + awful.mouse.client.resize(c) + end) + ) + + -- Widgets that are aligned to the left + local left_layout = wibox.layout.fixed.horizontal() + left_layout:add(awful.titlebar.widget.iconwidget(c)) + left_layout:buttons(buttons) + + -- Widgets that are aligned to the right + local right_layout = wibox.layout.fixed.horizontal() + right_layout:add(awful.titlebar.widget.floatingbutton(c)) + right_layout:add(awful.titlebar.widget.maximizedbutton(c)) + right_layout:add(awful.titlebar.widget.stickybutton(c)) + right_layout:add(awful.titlebar.widget.ontopbutton(c)) + right_layout:add(awful.titlebar.widget.closebutton(c)) + + -- The title goes in the middle + local middle_layout = wibox.layout.flex.horizontal() + local title = awful.titlebar.widget.titlewidget(c) + title:set_align("center") + middle_layout:add(title) + middle_layout:buttons(buttons) + + -- Now bring it all together + local layout = wibox.layout.align.horizontal() + layout:set_left(left_layout) + layout:set_right(right_layout) + layout:set_middle(middle_layout) + + awful.titlebar(c):set_widget(layout) + end +end +client.connect_signal("manage", manage_clients) - if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then - -- buttons for the titlebar - local buttons = awful.util.table.join( - awful.button({ }, 1, function() - client.focus = c - c:raise() - awful.mouse.client.move(c) - end), - awful.button({ }, 3, function() - client.focus = c - c:raise() - awful.mouse.client.resize(c) - end) - ) - - -- Widgets that are aligned to the left - local left_layout = wibox.layout.fixed.horizontal() - left_layout:add(awful.titlebar.widget.iconwidget(c)) - left_layout:buttons(buttons) - - -- Widgets that are aligned to the right - local right_layout = wibox.layout.fixed.horizontal() - right_layout:add(awful.titlebar.widget.floatingbutton(c)) - right_layout:add(awful.titlebar.widget.maximizedbutton(c)) - right_layout:add(awful.titlebar.widget.stickybutton(c)) - right_layout:add(awful.titlebar.widget.ontopbutton(c)) - right_layout:add(awful.titlebar.widget.closebutton(c)) - - -- The title goes in the middle - local middle_layout = wibox.layout.flex.horizontal() - local title = awful.titlebar.widget.titlewidget(c) - title:set_align("center") - middle_layout:add(title) - middle_layout:buttons(buttons) - - -- Now bring it all together - local layout = wibox.layout.align.horizontal() - layout:set_left(left_layout) - layout:set_right(right_layout) - layout:set_middle(middle_layout) - - awful.titlebar(c):set_widget(layout) - end +-- Hook function to execute when focusing a client. +client.connect_signal("focus", + function(c) + if not awful.client.ismarked(c) then + c.border_color = beautiful.border_focus + -- c.opacity = 13.0 + end 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 +-- Hook function to execute when unfocusing a client. +client.connect_signal("unfocus", function(c) + if not awful.client.ismarked(c) then + c.border_color = beautiful.border_normal + -- c.opacity = 0.8 + end end) -- }}}