From 0ded3ecd3bb65b37602e2ad06d657b47dd3025e7 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 13 Jun 2020 10:30:56 +0200 Subject: workspace: avoid unnecessary page stealing When switching to a different desktop, the current code would use the last-used tag even if it is currently displayed. Instead, keep a per-desktop stack of free tags and pick the first of those. --- stack.lua | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 stack.lua (limited to 'stack.lua') diff --git a/stack.lua b/stack.lua new file mode 100644 index 0000000..bee5fd3 --- /dev/null +++ b/stack.lua @@ -0,0 +1,38 @@ +local M = {} + +local Stack = {} + +function Stack:push(v) + table.insert(self._et, v) +end + +function Stack:pop() + return table.remove(self._et) +end + +function Stack:remove(it) + local idx = nil + for i, v in ipairs(self._et) do + if v == it then + idx = i + break + end + end + if idx == nil then + error(it .. " not in stack") + end + table.remove(self._et, idx) +end + +function Stack:new() + local o = setmetatable({}, self) + self.__index = self + + o._et = {} + + return o +end + +M.Stack = Stack + +return M -- cgit v1.2.3