From 5f1fd821a0ebbb2d61cb3c382ca199d109e4bbd8 Mon Sep 17 00:00:00 2001 From: copycat-killer Date: Mon, 9 Jan 2017 20:21:56 +0100 Subject: [PATCH] port to awesome 4.0 completed; #248 --- helpers.lua | 10 +++++ scripts/mpdcover | 5 +-- util/init.lua | 94 +++++++++------------------------------------ widgets/maildir.lua | 74 +++++++++++++++-------------------- widgets/mpd.lua | 3 +- 5 files changed, 62 insertions(+), 124 deletions(-) diff --git a/helpers.lua b/helpers.lua index 50254c1..8eed10f 100644 --- a/helpers.lua +++ b/helpers.lua @@ -144,6 +144,16 @@ end -- {{{ Misc +-- check if an element exist on a table +function helpers.element_in_table(element, tbl) + for _, i in pairs(tbl) do + if i == element then + return true + end + end + return false +end + -- iterate over table of records sorted by keys function helpers.spairs(t) -- collect the keys diff --git a/scripts/mpdcover b/scripts/mpdcover index 6f9062c..a611666 100755 --- a/scripts/mpdcover +++ b/scripts/mpdcover @@ -37,9 +37,6 @@ fi # The default cover to use (optional) DEFAULT_ART=$4 -# Thumbnail background (transparent) -COVER_BACKGROUND="none" - #-------------------------------------------------------------------- # check if anything is playing at all @@ -58,7 +55,7 @@ cover="${cover:=$DEFAULT_ART}" # check if art is available if [[ -n $cover ]]; then if [[ -n $COVER_RESIZE ]]; then - convert "$cover" -scale $COVER_RESIZE -gravity "center" -background "$COVER_BACKGROUND" "$TEMP_PATH" + convert "$cover" -scale $COVER_RESIZE "$TEMP_PATH" cover="$TEMP_PATH" fi else diff --git a/util/init.lua b/util/init.lua index a7b53d2..5596afa 100644 --- a/util/init.lua +++ b/util/init.lua @@ -15,7 +15,6 @@ local awful = require("awful") local beautiful = require("beautiful") local math = { sqrt = math.sqrt } -local mouse = mouse local pairs = pairs local string = { gsub = string.gsub } local client = client @@ -29,26 +28,23 @@ local setmetatable = setmetatable -- lain.util local util = { _NAME = "lain.util" } --- Like awful.menu.clients, but only show clients of currently selected --- tags. +-- Like awful.menu.clients, but only show clients of currently selected tags function util.menu_clients_current_tags(menu, args) -- List of currently selected tags. local cls_tags = awful.screen.focused().selected_tags + if cls_tags == nil then return nil end + -- Final list of menu items. local cls_t = {} - if cls_tags == nil then return nil end - -- For each selected tag get all clients of that tag and add them to -- the menu. A click on a menu item will raise that client. - for i = 1,#cls_tags - do - local t = cls_tags[i] + for i = 1,#cls_tags do + local t = cls_tags[i] local cls = t:clients() - for k, c in pairs(cls) - do + for k, c in pairs(cls) do cls_t[#cls_t + 1] = { awful.util.escape(c.name) or "", function () c.minimized = false @@ -68,30 +64,30 @@ function util.menu_clients_current_tags(menu, args) -- Set the list of items and show the menu. menu.items = cls_t - local m = awful.menu.new(menu) + local m = awful.menu(menu) m:show(args) + return m end --- Magnify a client: Set it to "float" and resize it. -local magnified_client = nil +-- Magnify a client: set it to "float" and resize it. function util.magnify_client(c) - if c and not awful.client.floating.get(c) then + if c and not c.floating then util.mc(c) - magnified_client = c + util.magnified_client = c else - awful.client.floating.set(c, false) - magnified_client = nil + c.floating = false + util.magnified_client = nil end end -- https://github.com/copycat-killer/lain/issues/195 function util.mc(c) - c = c or magnified_client + c = c or util.magnified_client if not c then return end c.floating = true - local s = awful.screen.selected() + local s = awful.screen.focused() local mg = s.geometry local tag = s.selected_tag local mwfact = beautiful.master_width_factor or 0.5 @@ -104,55 +100,10 @@ function util.mc(c) if c then c:geometry(g) end -- if c is still a valid object end --- Read the nice value of pid from /proc. -local function get_nice_value(pid) - local n = first_line('/proc/' .. pid .. '/stat') - if not n then return 0 end - - -- Remove pid and tcomm. This is necessary because tcomm may contain - -- nasty stuff such as whitespace or additional parentheses... - n = string.gsub(n, '.*%) ', '') - - -- Field number 17 now is the nice value. - fields = split(n, ' ') - return tonumber(fields[17]) -end - --- To be used as a signal handler for "focus" --- This requires beautiful.border_focus{,_highprio,_lowprio}. -function util.niceborder_focus(c) - local n = get_nice_value(c.pid) - if n == 0 - then - c.border_color = beautiful.border_focus - elseif n < 0 - then - c.border_color = beautiful.border_focus_highprio - else - c.border_color = beautiful.border_focus_lowprio - end -end - --- To be used as a signal handler for "unfocus" --- This requires beautiful.border_normal{,_highprio,_lowprio}. -function util.niceborder_unfocus(c) - local n = get_nice_value(c.pid) - if n == 0 - then - c.border_color = beautiful.border_normal - elseif n < 0 - then - c.border_color = beautiful.border_normal_highprio - else - c.border_color = beautiful.border_normal_lowprio - end -end - -- Non-empty tag browsing -- direction in {-1, 1} <-> {previous, next} non-empty tag function util.tag_view_nonempty(direction, sc) local s = sc or awful.screen.focused() - local scr = screen[s] for i = 1, #s.tags do awful.tag.viewidx(direction, s) @@ -163,7 +114,7 @@ function util.tag_view_nonempty(direction, sc) end -- {{{ Dynamic tagging --- + -- Add a new tag function util.add_tag() awful.prompt.run { @@ -210,22 +161,13 @@ function util.delete_tag() if not t then return end t:delete() end + -- }}} -- On the fly useless gaps change function util.useless_gaps_resize(thatmuch) beautiful.useless_gap = tonumber(beautiful.useless_gap) + thatmuch - awful.layout.arrange(mouse.screen) -end - --- Check if an element exist on a table -function util.element_in_table(element, tbl) - for _, i in pairs(tbl) do - if i == element then - return true - end - end - return false + awful.layout.arrange(awful.screen.focused()) end return setmetatable(util, { __index = wrequire }) diff --git a/widgets/maildir.lua b/widgets/maildir.lua index e963fc6..7d4ca28 100644 --- a/widgets/maildir.lua +++ b/widgets/maildir.lua @@ -7,22 +7,22 @@ --]] -local newtimer = require("lain.helpers").newtimer -local read_pipe = require("lain.helpers").read_pipe -local spairs = require("lain.helpers").spairs +local spawn = require("awful").spawn +local wibox = require("wibox") -local wibox = require("wibox") +local element_in_table = require("lain.helpers").element_in_table +local newtimer = require("lain.helpers").newtimer +local read_pipe = require("lain.helpers").read_pipe +local spairs = require("lain.helpers").spairs -local awful = require("awful") -local util = require("lain.util") +local io = { popen = io.popen } +local os = { getenv = os.getenv } +local pairs = pairs +local string = { format = string.format, + len = string.len, + match = string.match } -local io = { popen = io.popen } -local os = { getenv = os.getenv } -local pairs = pairs -local string = { len = string.len, - match = string.match } - -local setmetatable = setmetatable +local setmetatable = setmetatable -- Maildir check -- lain.widgets.maildir @@ -39,67 +39,55 @@ local function worker(args) maildir.widget = wibox.widget.textbox('') function update() - if ext_mail_cmd then - awful.util.spawn(ext_mail_cmd) - end + if ext_mail_cmd then awful.spawn(ext_mail_cmd) end -- Find pathes to mailboxes. - local p = io.popen("find " .. mailpath .. - " -mindepth 1 -maxdepth 2 -type d" .. - " -not -name .git") + local p = io.popen(string.format("find %s -mindepth 1 -maxdepth 2 -type d -not -name .git", mailpath)) local boxes = {} repeat line = p:read("*l") - if line ~= nil - then + if line then -- Find all files in the "new" subdirectory. For each -- file, print a single character (no newline). Don't -- match files that begin with a dot. -- Afterwards the length of this string is the number of -- new mails in that box. - local mailstring = read_pipe("find " .. line .. - "/new -mindepth 1 -type f " .. - "-not -name '.*' -printf a") + local mailstring = read_pipe(string.format("find %s /new -mindepth 1 -type f -not -name '.*' -printf a", line)) -- Strip off leading mailpath. - local box = string.match(line, mailpath .. "/(.*)") + local box = string.match(line, mailpath .. "/(.*)") local nummails = string.len(mailstring) - if nummails > 0 - then + + if nummails > 0 then boxes[box] = nummails end end - until line == nil - + until not line p:close() - newmail = "no mail" + local newmail = "no mail" + local total = 0 - -- Count the total number of mails irrespective of where it was found - total = 0 - - for box, number in spairs(boxes) - do + for box, number in spairs(boxes) do -- Add this box only if it's not to be ignored. - if not util.element_in_table(box, ignore_boxes) - then + if not util.element_in_table(box, ignore_boxes) then total = total + number - if newmail == "no mail" - then - newmail = box .. "(" .. number .. ")" + if newmail == "no mail" then + newmail = string.format("%s(%s)", box, number) else - newmail = newmail .. ", " .. - box .. "(" .. number .. ")" + newmail = string.format("%s, %s(%s)", newmail, box, number) end end end widget = maildir.widget + settings() end newtimer(mailpath, timeout, update, true) - return maildir.widget + + return setmetatable(maildir, { __index = maildir.widget }) end return setmetatable(maildir, { __call = function(_, ...) return worker(...) end }) diff --git a/widgets/mpd.lua b/widgets/mpd.lua index 3e2eaf5..ce48014 100644 --- a/widgets/mpd.lua +++ b/widgets/mpd.lua @@ -124,7 +124,8 @@ local function worker(args) mpd.id = naughty.notify({ preset = mpd_notification_preset, - icon = current_icon, + icon = os.execute(string.format("ls %s &> /dev/null", current_icon)) + and current_icon, replaces_id = mpd.id, }).id end -- 2.39.2