diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..37957f6 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,17 @@ +name: Lain + +on: [push] + +permissions: + contents: read + +jobs: + linting: + runs-on: ubuntu-latest + steps: + - run: echo "Running tests triggered by a ${{ github.event_name }} event." + - run: echo "Testing ${{ github.ref }} from ${{ github.repository }} on ${{ runner.os }}" + - name: Check out code + uses: actions/checkout@v3 + - name: Run tests + uses: lunarmodules/luacheck@v0 diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..9944223 --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,27 @@ +-- Only allow symbols available in all Lua versions +std = "min" + +allow_defined = true +max_line_length = false +cache = true + +-- Global objects defined by the C code +read_globals = { + "awesome", + "mousegrabber", + "table.unpack", + "unpack", + "utf8" +} + +globals = { + "client", + "mouse", + "root", + "screen" +} + +-- https://luacheck.readthedocs.io/en/stable/warnings.html +ignore = { + "131" +} diff --git a/README.rst b/README.rst index 3d2f13f..616c7cd 100644 --- a/README.rst +++ b/README.rst @@ -1,6 +1,8 @@ Lain ==== +.. image:: https://github.com/lcpz/lain/actions/workflows/main.yml/badge.svg + ------------------------------------------------- Layouts, widgets and utilities for Awesome WM 4.x ------------------------------------------------- diff --git a/helpers.lua b/helpers.lua index 45f090f..ef9e08b 100644 --- a/helpers.lua +++ b/helpers.lua @@ -5,15 +5,15 @@ --]] -local spawn = require("awful.spawn") -local timer = require("gears.timer") -local debug = require("debug") -local io = { lines = io.lines, - open = io.open } -local pairs = pairs -local rawget = rawget -local table = { sort = table.sort, unpack = table.unpack } -local unpack = unpack or table.unpack -- lua 5.1 retro-compatibility +local spawn = require("awful.spawn") +local timer = require("gears.timer") +local debug = require("debug") +local io = { lines = io.lines, + open = io.open } +local pairs = pairs +local rawget = rawget +local tsort = table.sort +local unpack = unpack or table.unpack -- lua 5.1 retro-compatibility -- Lain helper functions for internal use -- lain.helpers @@ -164,7 +164,7 @@ function helpers.spairs(t) local keys = {} for k in pairs(t) do keys[#keys+1] = k end - table.sort(keys) + tsort(keys) -- return the iterator function local i = 0 diff --git a/lain-scm-1.rockspec b/lain-scm-1.rockspec index 6a76aba..70b0f43 100644 --- a/lain-scm-1.rockspec +++ b/lain-scm-1.rockspec @@ -6,16 +6,12 @@ source = { } description = { summary = "Layout, widgets and utilities for Awesome WM", - detailed = [[ - Successor of awesome-vain, this module provides alternative layouts, asynchronous widgets and utility functions for Awesome WM. - - Dependencies: curl (for IMAP, MPD and weather widgets); Glib >= 2.54 (for filesystems widget). - ]], + detailed = "Alternative layouts, asynchronous widgets and utility functions for Awesome WM. Non-Lua dependency: curl (for IMAP, MPD and weather widgets).", homepage = "https://github.com/lcpz/lain", - license = "GPL-2.0" + license = "GPL2" } dependencies = { - "lua >= 5.1", + "lua >= 5.3", "dkjson >= 2.6-1" } supported_platforms = { "linux" } diff --git a/layout/centerwork.lua b/layout/centerwork.lua index 142ccbe..c105676 100644 --- a/layout/centerwork.lua +++ b/layout/centerwork.lua @@ -10,7 +10,11 @@ --]] -local floor, max, mouse, mousegrabber, screen = math.floor, math.max, mouse, mousegrabber, screen +local floor = math.floor +local max = math.max +local mouse = mouse +local mousegrabber = mousegrabber +local screen = screen local centerwork = { name = "centerwork", @@ -138,7 +142,7 @@ local function mouse_resize_handler(c, _, _, _, orientation) if g.height + 15 >= wa.height then offset = g.height * .5 cursor = "sb_h_double_arrow" - elseif not (g.y + g.height + 15 > wa.y + wa.height) then + elseif g.y + g.height + 15 <= wa.y + wa.height then offset = g.height end corner_coords = { x = wa.x + wa.width * (1 - mwfact) / 2, y = g.y + offset } @@ -146,7 +150,7 @@ local function mouse_resize_handler(c, _, _, _, orientation) if g.width + 15 >= wa.width then offset = g.width * .5 cursor = "sb_v_double_arrow" - elseif not (g.x + g.width + 15 > wa.x + wa.width) then + elseif g.x + g.width + 15 <= wa.x + wa.width then offset = g.width end corner_coords = { y = wa.y + wa.height * (1 - mwfact) / 2, x = g.x + offset } @@ -156,22 +160,22 @@ local function mouse_resize_handler(c, _, _, _, orientation) local prev_coords = {} - mousegrabber.run(function(_mouse) + mousegrabber.run(function(m) if not c.valid then return false end - for _, v in ipairs(_mouse.buttons) do + for _, v in ipairs(m.buttons) do if v then - prev_coords = { x = _mouse.x, y = _mouse.y } + prev_coords = { x = m.x, y = m.y } local new_mwfact if orientation == 'vertical' then - new_mwfact = 1 - (_mouse.x - wa.x) / wa.width * 2 + new_mwfact = 1 - (m.x - wa.x) / wa.width * 2 else - new_mwfact = 1 - (_mouse.y - wa.y) / wa.height * 2 + new_mwfact = 1 - (m.y - wa.y) / wa.height * 2 end c.screen.selected_tag.master_width_factor = math.min(math.max(new_mwfact, 0.01), 0.99) return true end end - return prev_coords.x == _mouse.x and prev_coords.y == _mouse.y + return prev_coords.x == m.x and prev_coords.y == m.y end, cursor) end @@ -191,11 +195,14 @@ function centerwork.horizontal.mouse_resize_handler(c, corner, x, y) return mouse_resize_handler(c, corner, x, y, 'horizontal') end -------------------------------------------------------------------------------- --- make focus.byidx and swap.byidx behave more consistently with other layouts + +--[[ +Make focus.byidx and swap.byidx behave more consistently with other layouts. +--]] local awful = require("awful") local gears = require("gears") +local client = client local function compare_position(a, b) if a.x == b.x then @@ -208,7 +215,10 @@ end local function clients_by_position() local this = client.focus if this then - local sorted = client.focus.first_tag:clients() + local sorted = {} + for _, c in ipairs(client.focus.first_tag:clients()) do + if not c.minimized then sorted[#sorted+1] = c end + end table.sort(sorted, compare_position) local idx = 0 @@ -234,10 +244,9 @@ centerwork.focus = {} --[[ Drop in replacements for awful.client.focus.byidx and awful.client.swap.byidx -that behaves consistently with other layouts +that behaves consistently with other layouts. --]] - function centerwork.focus.byidx(i) if in_centerwork() then local cls = clients_by_position() diff --git a/util/dkjson.lua b/util/dkjson.lua index fadb5ef..61cccb9 100644 --- a/util/dkjson.lua +++ b/util/dkjson.lua @@ -42,8 +42,8 @@ SOFTWARE. --]==] -- global dependencies: -local pairs, type, tostring, tonumber, getmetatable, setmetatable, rawset = - pairs, type, tostring, tonumber, getmetatable, setmetatable, rawset +local pairs, type, tostring, tonumber, getmetatable, setmetatable = + pairs, type, tostring, tonumber, getmetatable, setmetatable local error, require, pcall, select = error, require, pcall, select local floor, huge = math.floor, math.huge local strrep, gsub, strsub, strbyte, strchar, strfind, strlen, strformat = @@ -64,7 +64,7 @@ if register_global_module_table then end end -local _ENV = nil -- blocking globals in Lua 5.2 and later +_ENV = nil -- blocking globals in Lua 5.2 and later pcall (function() -- Enable access to blocked metatables. @@ -252,7 +252,7 @@ local function exception(reason, value, state, buffer, buflen, defaultmessage) end end -function json.encodeexception(reason, value, state, defaultmessage) +function json.encodeexception(_reason, _value, _state, defaultmessage) return quotestring("<" .. defaultmessage .. ">") end @@ -327,7 +327,7 @@ encode2 = function (value, indent, level, buffer, buflen, tables, globalorder, s local v = value[k] if v ~= nil then used[k] = true - buflen, msg = addpair (k, v, prev, indent, level, buffer, buflen, tables, globalorder, state) + buflen, _msg = addpair (k, v, prev, indent, level, buffer, buflen, tables, globalorder, state) prev = true -- add a seperator before the next element end end @@ -510,7 +510,6 @@ end local scanvalue -- forward declaration local function scantable (what, closechar, str, startpos, nullval, objectmeta, arraymeta) - local len = strlen (str) local tbl, n = {}, 0 local pos = startpos + 1 if what == 'object' then @@ -640,7 +639,7 @@ function json.use_lpeg () local PlainChar = 1 - S"\"\\\n\r" local EscapeSequence = (P"\\" * g.C (S"\"\\/bfnrt" + Err "unsupported escape sequence")) / escapechars local HexDigit = R("09", "af", "AF") - local function UTF16Surrogate (match, pos, high, low) + local function UTF16Surrogate (_match, _pos, high, low) high, low = tonumber (high, 16), tonumber (low, 16) if 0xD800 <= high and high <= 0xDBff and 0xDC00 <= low and low <= 0xDFFF then return true, unichar ((high - 0xD800) * 0x400 + (low - 0xDC00) + 0x10000) diff --git a/util/separators.lua b/util/separators.lua index ae384ec..04402bb 100644 --- a/util/separators.lua +++ b/util/separators.lua @@ -8,10 +8,11 @@ local wibox = require("wibox") local gears = require("gears") +local beautiful = require("beautiful") -- Lain Cairo separators util submodule -- lain.util.separators -local separators = { height = 0, width = 9 } +local separators = { height = beautiful.separators_height or 0, width = beautiful.separators_width or 9 } -- [[ Arrow diff --git a/widget/temp.lua b/widget/temp.lua index f636994..d478bd4 100644 --- a/widget/temp.lua +++ b/widget/temp.lua @@ -32,7 +32,11 @@ local function factory(args) temp_now[t] = temp_value and temp_value/1e3 or temp_fl end end - coretemp_now = string.format(format, temp_now[tempfile]) or "N/A" + if temp_now[tempfile] then + coretemp_now = string.format(format, temp_now[tempfile]) + else + coretemp_now = "N/A" + end widget = temp.widget settings() end) diff --git a/wiki b/wiki index 74a423d..ad8081c 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 74a423dac2c8ea2f0f6827b209aa6de9b741a3a1 +Subproject commit ad8081cb3e3cb336323d1f72d34c7c8304490b14